| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Task-number: QTBUG-16513
Reviewed-by: Gareth Stockwell
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The Phonon API does not provide any way for the client to specify
which network connection should be used for streaming playback.
If the application already has a connection open, using a bearer
other than the default (e.g. using WiFi when the device default is
GPRS), it may be desirable to use it for streaming, rather than
allowing the Phonon backend to open a second connection on the
default bearer.
This patch adds a custom property on the Phonon::MediaObject,
called InternetAccessPointName. The client can specify the IAP
which Phonon should use by setting this property.
Note that support for this property is only provided in the Phonon
MMF backend.
Task-number: QTBUG-11436
Reviewed-by: Gareth Stockwell
|
|
|
|
| |
RevBy: Trust me
|
|
|
|
|
|
|
|
|
|
|
| |
This prevents a window surface being created if
Phonon::VideoWidget::setFullScreen(true) is called. Since Qt does
not ever render any content to the native window in which video is
displayed, creation of a surface for that window would consume memory
unnecessarily.
Task-number: MOBILITY-1315
Reviewed-by: Jason Barron
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
downloadmgrclient.h is not found on S^4 baselines, causing a build
failure. This commit is a temporary workaround, which disables
progressive download support if the header is not found.
The correct solution is to determine whether the RHttpDownloadMgr
definition has moved, and if so, to modify the .pro file to
include the new path.
Task-number: QTBUG-10769
Reviewed-by: TrustMe
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit integrates the Download class with the media playback
classes in the backend, to implement Progressive Download.
Note that this PDL implementation has one drawback: when video
playback is paused due to shortage of data (i.e. due to the download
being temporarily stalled), the display goes black. This is because,
when the end of the currently-downloaded data is reached, the
playback session is closed. When more data becomes available, the
clip is re-opened, a seek is done to reach the previous playback
position, and playback is re-started. Closing the playback session
closes the video stack's connection to the display, thereby causing
the video widget to go black while more data is buffered.
This is a consequence of the level in the native video stack at which
the Phonon integration is done: managing a network stall without
requiring the playback session to be closed would require integration
below the MMF client API, specifically at the MMF controller level.
Task-number: QTBUG-10769
Reviewed-by: Derick Hawcroft
|
|
|
|
|
|
|
|
| |
This patch adds a Download class which uses the RHttpDownloadMgr
API to download a media clip over HTTP.
Task-number: QTBUG-10769
Reviewed-by: Derick Hawcroft
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The following overload was added in S^3:
TInt RApaLsSession::RecognizeData(const TDesC8& aBuffer,
TDataRecognitionResult& aDataType) const
In order to allow the backend to compile against earlier versions
of the platform, this patch calls the RecognizeData overload which
taking the same arguments as above, plus a filename (for which
KNullDesC is passed).
Task-number: QTBUG-6562
Reviewed-by: trustme
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The backend accesses the resource file path via MediaSource::url().
A small patch to Phonon was required to enable this, because by
default, Phonon passes a QIODevice, rather than the resource file
path, to the backend.
The backend uses this path to create a QResource object, through which
the memory buffer into which the resource file has been read can be
accessed. This buffer is wrapped in a Symbian 8-bit descriptor and
passed to the OpenDesL() function of the appropriate MMF client
utility API.
Playback only works for certain file formats, as the Symbian MIME type
recognizer does not always work. For example, playback of an audio
WAV resource file works, while playback of an MP3 resource file does
not.
Task-number: QTBUG-6562
Reviewed-by: Justin McPherson
|
|
|
|
|
|
|
|
|
|
|
| |
All platform includes are now lower case, i.e. '#include <foobar.h>'
rather than '#include <FooBar.h>'.
Note that Qt includes are still camel case, e.g.
'#include <QtGui/QWidget>'
Task-number: QTBUG-6528
Reviewed-by: trustme
|
|
|
|
| |
Reviewed-by: trustme
|
|
|
|
|
|
|
|
| |
This is to be consistent with the backends for other platforms, which
also call QWidget::winId() on the VideoWidget (or one of its children)
during construction.
Reviewed-by: Thierry Bastian
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When Phonon::MediaObject::setCurrentSource() is called when the
MediaObject is connected to a Phonon::VideoWidget, the
MMF::AbstractVideoOutput pointer is propagated inside the backend
from the first MMF::AbstractVideoPlayer to the second.
If the VideoWidget is subsquently re-sized, the code path enters
the ScaleFactors branch of the
MMF::SurfaceVideoPlayer::handleParametersChanged function. At this
point, m_displayWindow is still set to the inital null value, and the
assertion therefore fails.
This change ensures that m_displayWindow is updated before attempting
to apply the scale factor change.
Task-number: QTBUG-11377
Reviewed-by: Thierry Bastian
|
|
|
|
|
|
|
|
|
|
| |
Failure to Close() an existing MMF player utility object before
creating a new one - which happens in the MMF backend's implementation
of Phonon::MediaObject::setCurrentSource() - causes intialization of the
newly-created utility to fail later on.
Task-number: QTBUG-11377
Reviewed-by: Thierry Bastian
|
|
|
|
|
|
|
|
| |
CVideoPlayerUtility::RegisterForVideoLoadingNotification() was only
called in the DSA, not the NGA, variant of the Phonon MMF backend.
Task-number: QTBUG-11378
Reviewed-by: Thierry Bastian
|
|
|
|
|
|
|
|
|
| |
The Phonon API allows video to be played via a Phonon::MediaObject,
even if no Phonon::VideoWidget has been connected to it. This
patch prevents the Phonon MMF backend crashing in this scenario
due to dereferencing a null pointer.
Reviewed-by: Thierry Bastian
|
|
|
|
|
|
| |
Emitted when building with MetroWerks x86 toolchain.
Reviewed-by: trustme
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In S60 3.2, CMdaAudioPlayerUtility::SetVolume(TInt) was changed from
having a void return type to returning TInt. The code in the Phonon
MMF backend which calls this function uses a runtime platform version
check to ensure that only on S60 3.2 and above is the return value
from SetVolume treated as valid.
This check was previously testing for the wrong platform version (5.0
rather than 3.2).
Reviewed-by: Shane Kearns
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A crash was observed during opening a video clip, and was traced
to dereferencing a null m_player pointer in
DsaVideoPlayer::handleParametersChanged(), which is called during
construction, but before createPlayer() has been called.
This was reproducible using the following sequence:
1. Launch qmediaplayer
2. Play an audio clip
3. Open a video clip
However, the following sequence worked as expected:
1. Launch qmediaplayer
2. Play a video clip
3. Play an audio clip
4. Play a video clip
...
It is not clear which commit introduced this defect.
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
|
| |
A recent change meant that, if the user set a volume level before
loading a clip into the MediaObject, that initial volume level was
not applied to the audio output.
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This change is required by the testPlayBeforeFinish step in
tst_mediaobject. This test starts playback of one track, then calls
MediaObject::setCurrentSource() followed by MediaObject::play(). The
step checks that the following stateChanged() signals are emitted
by the MediaObject:
1. StoppedState (optionally)
2. LoadingState
3. BufferingState or PlayingState
The state changes emitted by the Phonon MMF backend were:
1. PlayingState -> StoppedState
2. LoadingState -> PlayingState
This patch fixes the discontinuity in state changes which occurred
while processing a playlist.
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
|
| |
Previously, the MMF backend simply swallowed a call to pause() when in
StoppedState. However, the stopToPause step in tst_mediaobject requires
the backend to emit a stateChanged signal when this happens.
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
| |
This behaviour is required by the testPauseOnFinish step in
tst_mediaobject.
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
|
|
|
|
|
| |
If MediaObject::play() is called while the object is in LoadingState,
playback will start once loading is completed. Previously, the
Symbian backend at this point emitted two stateChanged signals - first
to StoppedState and then to PlayingState.
The testPlayOnFinish step in tst_mediaobject requires that only one
state change occurs: directly from LoadingState to PlayingState.
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
| |
Fixes testTickSignal step in tst_mediaobject.
Task-number: QTBUG-9339
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
| |
Fixes testPrefinishMark step in tst_mediaobject.
Task-number: QTBUG-9339
Reviewed-by: Frans Englich
|
|
|
|
| |
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
| |
This builds under RVCT 2.2 (although obviously the debug output will
contain garbage), but causes a compiler error with RVCT 4.
Reviewed-by: trustme
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It seems that, after a call to CMdaAudioPlayerUtility::SetPosition,
the reported position values are slightly lower than they should be.
This, combined with the fact that the backend emitted aboutToFinish
from its timer tick slot, means that the aboutToFinish signal is
sometimes not emitted at the end of an audio clip, if the position
has been advanced by seeking during playback.
This patch adds a check in the implementation of the
MMdaAudioPlayerCallback::MapcPlayComplete callback - if, at this point,
aboutToFinish has not been emitted, it is emitted now.
Task-number: QTBUG-9368
Reviewed-by: trustme
|
|
|
|
|
|
|
| |
RVCT complains that a non-POD type (VideoParameters) is passed through
the TRACE_ENTRY ellipsis, when building in debug mode.
Reviewed-by: trustme
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In addition to dumping the widget tree which contains the VideoOutput
widget, the backend now also dumps the widget tree from the application's
active window. This is to allow debugging of problems which stem from
the fact that the VideoOutput widget subtree root is not the
application's main window.
In addition to dumping the Qt widget tree, the backend now also requests
the window server to dump the entire window tree.
Together, these changes allow easier debugging of video visibility-
related problems.
Reviewed-by: trustme
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
During application shutdown, DsaVideoPlayer::handleVideoWindowChanged
is called. At this point, the application's main window has been closed
and therefore QApplication::activeWindow() returns 0. This leads to a
crash.
This patch ensures that a null return value from
QApplication::activeWindow(), and the resulting zero value of
DsaVideoPlayer::m_window, are handled gracefully.
Reviewed-by: Frans Englich
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
| |
| |
| | |
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
|
| |
| |
| |
| | |
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
|