| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Symbian^3 introduces a new compositing graphics subsystem in which
non-UI content such as video is provided by client applications via
graphics surfaces.
This patch modifies the video playback part of the Phonon MMF backend
so that, on devices which use the new graphics architecture (NGA),
video is rendered to a surface. On devices which use the legacy
graphics architecture, the existing video rendering path, which uses
Direct Screen Access (DSA) is maintained.
On NGA devices, video playback applications do not deal with surfaces
directly; instead, they use a new MMF client API called
CVideoPlayerUtility2. The implementation of this API takes care of
creating a graphics surface, registering it with the window manager,
and directing the output of the video decoder into this surface.
CVideoPlayerUtility2 inherits from the legacy video playback API,
CVideoPlayerUtility, deprecating certain functions and adding new ones.
The main changes involved in modifying CVideoPlayerUtility client code
to instead use CVideoPlayerUtility2 are:
1. CVideoPlayerUtility requires a window handle to be provided at
object construction time.
The CVideoPlayerUtility2 constructor does not take a window
handle; it is provided by the client later via the
SetDisplayWindowL function.
2. CVideoPlayerUtility requires the client to provide an absolute
screen rectangle at construction time, and then to call
SetDisplayWindowL whenever this rectangle changes due to either
window repositioning or resizing.
CVideoPlayerUtility2 requires the client to provide a display
rectangle which is relative to the display window. This
rectangle must be updated via SetVideoExtentL /
SetWindowClipRectL when the window is resized, but no update is
required when the window is repositioned - the compositing
window system takes care of repositioning the video content on
the screen.
3. CVideoPlayerUtility requires the client to paint transparent
black into the region of the window in which video will be
displayed. CVideoPlayerUtility2 does not require the client
to paint the video window.
In order to accomodate these differences, the existing VideoPlayer and
VideoOutput classes are replaced with AbstractVideoPlayer and
AbstractVideoOutput respectively. These abstract base classes
encapsulate functionality which is common between the DSA and surface
rendering client code. Because CVideoPlayerUtility2 inherits from
CVideoPlayerUtility, AbstractVideoPlayer is able to hold a pointer to
CVideoPlayerUtility, via which it controls functionality which is not
affected by the details of the rendering path, such as play/pause/stop,
seek and metadata access.
The three areas of divergence listed above are encapsulated in the
derived classes DsaVideoOutput/SurfaceVideoOutput and DsaVideoPlayer/
SurfaceVideoPlayer. Of the three, (1) and (3) are fairly
straightforward. For DSA video playback, the need to respond to
changes in video widget absolute screen position in (2) necessitated
the AncestorMoveMonitor class, which installs an event filter on each
ancestor of the video widget. This class is not required for surface
video playback and is therefore removed from the surface-rendering
code path.
Selection of either the DSA- or surface-rendering code path is done
at qmake time, via the exists(...) check introduced in mmf.pro. This
checks for existence of the header in which CVideoPlayerUtility2 is
defined; if this file is found, surface rendering is selected,
otherwise the DSA rendering version of the backend is built. Note that
this approach is not completely robust, since it is possible for an
environment to include the videoplayer2.h header and yet be configured
to use the legacy graphics subsystem. This could be dealt with by
instead performing the check for surface support at configuration time,
building and executing a small Symbian program which will return
different output according to which of the two graphics subsystems is
in use.
Task-number: QTBUG-8919
Reviewed-by: Frans Englich
|
|\ |
|
| |
| |
| |
| |
| |
| |
| | |
The Phonon glue code rejected SDPs based on the MIME type for SDPs.
Task-number: QTBUG-8702
Reviewed-by: Gareth Stockwell
|
|\ \
| | |
| | |
| | |
| | | |
Conflicts:
dist/changes-4.6.2
|
| | |
| | |
| | |
| | | |
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
|
|\ \ \
| |/ /
|/| |
| | |
| | |
| | |
| | | |
Manual resolve of conflict in changes-4.6.2 in staging-2.
Conflicts:
dist/changes-4.6.2
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When using a VideoWidget in a QGraphicsProxyWidget, then Phonon::DS9
crashed, if the VideoWidget didn't have a MediaSource.
Reviewed-by: Thierry
|
| | |
| | |
| | |
| | | |
Reviewed-by: trustme
|
|/ /
| |
| |
| |
| |
| | |
Error strings are now part of the Phonon::MMF namespace.
Reviewed-by: trustme
|
|/
|
|
|
|
|
| |
Recent changes to phonon and syncqt cause problems with the default
search path for #include with this compiler.
Reviewed-by: Gareth Stockwell
|
|
|
|
|
| |
Task-number: QTBUG-4659
Reviewed-by: Espen Riskedal
|
|
|
|
|
| |
Task-number: QTBUG-4659
Reviewed-by: Espen Riskedal
|
|
|
|
|
| |
Task-number: QTBUG-4659
Reviewed-by: Espen Riskedal
|
|
|
|
|
| |
Task-number: QTBUG-4659
Reviewed-by: Espen Riskedal
|
|
|
|
|
| |
Task-number: QTBUG-4659
Reviewed-by: Espen Riskedal
|
|
|
|
|
| |
Task-number: QTBUG-4659
Reviewed-by: Espen Riskedal
|
|
|
|
|
| |
Task-number: QTBUG-4659
Reviewed-by: Espen Riskedal
|
|
|
|
|
|
|
|
| |
This pointer is guaranteed not to be null by the check in
AbstractAudioEffect::setParameterValue.
Task-number: QTBUG-4659
Reviewed-by: trustme
|
|
|
|
|
| |
Task-number: QTBUG-4659
Reviewed-by: Espen Riskedal
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
By refactoring the static capabilities / parameters interface
exposed by AbstractAudioEffect-derived classes to the EffectFactory,
the latter's implementation no longer needs access to the headers
for native effect classes.
Previously, during the initialization phase, the EffectFactory
tried to create an instance of each native effect class, in order to
determine whether that effect is supported. This is now done inside
the backend class for each effect, thereby improving encapsulation.
Task-number: QTBUG-4659
Reviewed-by: Espen Riskedal
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When applying effects to an audio stream, we must ensure that the MMF
utility API (CMdaAudioPlayerUtility or CVideoPlayerUtility) instance has
loaded a controller before calling attempting to create a CAudioEffect-
derived object. If the controller has not been loaded, construction of
the effect object will fail. Even if we mitigate against this, calling
CAudioEffect::ApplyL() will only have an effect if there is a controller
object - or more precisely, a DevSound instance - on which to apply the
effect.
This patch delays construction of the effect object until the MediaObject
has transitioned out of the LoadingState, indicating that an underlying
DevSound instance will have been created.
Task-number: QTBUG-4659
Reviewed-by: Espen Riskedal
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This change is to work around a limitation in the Phonon::EffectWidget
class. This widget only displays sliders for parameters with numeric
values if the variant type of the parameter is QReal and the range is
exactly -1.0 to +1.0; otherwise, a spinbox is displayed. This is
rather inconvenient for many effects, such as the audio equalizer, for
which a slider is a much more natural UI control.
The MMF backend therefore reports the type of numeric parameters to
be QReal, and the range to be -1.0 to +1.0. Internally, the integer
range for the parameter is stored. Changes to the parameter value are
converted from the client-side, floating point representation to the
internal, integer representation.
Task-number: QTBUG-4659
Reviewed-by: Espen Riskedal
|
|
|
|
|
| |
Task-number: QTBUG-4659
Reviewed-by: trustme
|
|
|
|
|
|
|
|
| |
This improves the small-screen layout of the equalizer
configuration dialog.
Task-number: QTBUG-4659
Reviewed-by: trustme
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch addresses the following deficiencies in the existing
implementation of audio effects:
1. Native effect objects (e.g. CAudioEqualizer, CBassBoost etc)
were created frequently, just in order to check whether a given
effect is supported, or retrieve the list of parameters which it
requires. Although this is in part due to a deficiency in the
S60 audio effects API (it doesn't have a 'capability query' concept),
it can be improved by using caching. This patch introduces a
singleton EffectFactory object, which lazily initializes a data
structure containing information about support and parameters.
2. In order to either query effect support, the native effect object
ultimately needs to access a DevSound instance. Previously, the
effect object was provided with a CMdaAudioPlayerUtility object.
If this player utility has not loaded an MMF controller plugin
*before* the effects object makes any calls to the player utility,
incorrect results will be returned. This was observed in the
previous code. For querying, we don't actually need to load an
MMF controller; instead, we would like to directly provide a
CMMFDevSound instance to the effect object. Unfortunately, this
API is not available in public S60 SDKs, so we must use the next
lowest interface available, namely CMdaAudioOutputStream.
By making this change, this patch ensures that support and parameter
queries made via the EffectFactory will return the correct result.
At this point, however, effect settings made via the Phonon API
are not actually applied to the audio output. Fixing this will
require notifying the audio effects backend nodes of state changes
in the MediaObject.
Task-number: QTBUG-4659
Reviewed-by: Espen Riskedal
|
|
|
|
|
|
|
|
| |
Some instances of the changeState signal declaration had the newState and
oldState parameters in the wrong order. While this has no effect on the
behaviour of the code, it can be confusing to developers reading it.
Reviewed-by: trustme
|
|
|
|
|
| |
Task-number: QTBUG-4659
Reviewed-by: trustme
|
|
|
|
|
|
|
|
| |
Removed calls to the video overload of the audio effect
constructors, e.g. CAudioEqualizer::NewL(VideoPlayerUtility&)
Task-number: QTBUG-7223
Reviewed-by: trustme
|
|
|
|
|
| |
Task-number: QTBUG-4663
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
|
|
| |
The following source types are handled in MediaObject::createPlayer
Invalid, Disc, Stream, Empty
The code removed in this patch is therefore never executed.
Reviewed-by: Frans Englich
|
|
|
|
|
| |
Task-number: QTBUG-6214
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
|
|
|
| |
The main changes are:
1. MediaObject emits prefinishMark at the appropriate instant
2. MediaObject emits aboutToFinish at the appropriate instant
3. MediaObject switches to next source when playback completes
Task-number: QTBUG-6214
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
|
|
|
|
|
| |
Modified the sequence of calls made to the MMF APIs when seeking
during ongoing playback. This fixes a bug found during early testing
of streaming playback, whereby playback would not resume following
the seeking operation. This was due to an interaction between the
pause / seek / play operations, and the buffering callbacks received
from the MMF, which caused the backend to enter an incorrect state.
Task-number: QTBUG-4660
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
|
|
|
|
|
| |
When clips are buffering (either at the start of playback, or
during playback, when buffer levels drop due to e.g. CPU, file system
or network load), the backend receives notification from the MMF.
While buffering is ongoing, the backend periodically queries the
filling status and emits a signal.
Task-number: QTBUG-4660
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Because the MIME type of the stream cannot always be deduced from the
URL, we assume that it is a video stream. This is based on the
assumption that the video controllers will be capable of parsing
the container formats for audio-only, as well as video clips. Note
that this assumption may not hold on all devices.
Note that most implementations of the MMF client APIs do not support
HTTP streaming (a.k.a. progressive download). The backend has therefore
only been tested with RTSP streams - see the JIRA entry for further
details.
Task-number: QTBUG-4660
Reviewed-by: Frans Englich
|
|\
| |
| |
| | |
mmfphonon
|
| |
| |
| |
| |
| |
| |
| |
| | |
* Consistently capitalize error sentences
* Simplify & fix code/documentation.
Task-number: QTBUG-4994
Reviewed-by: TrustMe
|
| |
| |
| |
| | |
Reviewed-by: Frans Englich
|
|/
|
|
| |
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
|
|
|
|
| |
When the mediaplayer receives a state change into the ErrorState, it
calls pause() on the media object. Previously, this caused the
backend to transition into PausedState. When the mediaplayer subsequently
called errorString() to retrieve the error message, an empty string was
returned because the backend was no longer in the ErrorState.
Task-number: QTBUG-4994
Reviewed-by: trustme
|
|
|
|
|
|
|
|
|
|
| |
Note that changing Utils from a namespace into a class, and then
using Q_DECLARE_TR_FUNCTIONS in the class declaration, was necessary
in order to be able to call tr(...) from the implementation of
Utils::symbianErrorToString.
Task-number: QTBUG-4994
Reviewed-by: Oswald Buddenhagen
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The CVideoPlayerUtility API requires both a native window handle
and an absolute screen rectangle in order to define the location
of the rendered video output. On certain devices, such as the
Nokia E75, which runs S60 3.2, if the absolute rectangle extends
outside the physical screen extent, no video is rendered.
This change works around this defect in the platform by clipping
the video rectangle to the physical screen extent.
Task-number: QTBUG-5467
Reviewed-by: trustme
|
|
|
|
|
| |
Task-number: QTBUG-5467
Reviewed-by: trustme
|
|
|
|
|
|
|
|
|
| |
In order to prevent flicker or - on some versions of the platform -
video disappearing from the screen altogether, the video controller's
DSA session must be suspended while the window control is redrawn.
Task-number: QTBUG-5467
Reviewed-by: Jason Barron
|
|
|
|
|
|
|
|
|
| |
Certain S60 video stacks require the screen region in which video
will be rendered to be painted with a zero brush (opaque black for
EColor16MU displays; transparent black for EColor16MA / EColor16MAP).
Task-number: QTBUG-5467
Reviewed-by: Jason Barron
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This was introduced by d0b0b525de.
The use of QT_NO_DEBUG macros causes release-armv5 builds to fail
when the -release option is passed to configure.
This change causes the debugging code (ObjectDump and related
classes) to be included in release builds, although these functions
are not executed.
This is a temporary fix; task QTBUG-6012 has been created for
re-removing this code from release builds.
Reviewed-by: Frans Englich
|
|\ |
|
| |
| |
| |
| | |
Over src/ tools/ examples/ and demos/
|
|\ \
| |/ |
|
| |\ |
|