summaryrefslogtreecommitdiff
path: root/src/3rdparty/phonon/mmf
Commit message (Collapse)AuthorAgeFilesLines
* Fixed resource leak in Phonon MMF backendRuth Sadler2011-01-111-0/+2
| | | | | Task-number: QTBUG-16513 Reviewed-by: Gareth Stockwell
* Allow IAP to be selected in Phonon MMF backendRuth Sadler2011-01-1110-14/+86
| | | | | | | | | | | | | | | | | | | | 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
* Fixed several compile and deployment issues in the mmf phonon plugin.axis2010-12-146-6/+6
| | | | RevBy: Trust me
* Phonon MMF backend: set _q_DummyWindowSurface property on VideoWidgetGareth Stockwell2010-10-261-0/+2
| | | | | | | | | | | 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
* Phonon MMF backend: removed redundant trace outputGareth Stockwell2010-10-251-14/+0
|
* Added qmake check for presence of RHttpDownloadMgr headerGareth Stockwell2010-10-033-7/+30
| | | | | | | | | | | | | 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
* Progressive download in Phonon MMF backend: integrated with playerGareth Stockwell2010-10-018-43/+211
| | | | | | | | | | | | | | | | | | | | | | | 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
* Progressive download in Phonon MMF backend: added download managersGareth Stockwell2010-10-012-0/+305
| | | | | | | | 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
* Fixed build break on Symbian versions earlier than S^3Gareth Stockwell2010-08-021-1/+1
| | | | | | | | | | | | | | 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
* Added support to Phonon MMF backend for playback of Qt resource filesGareth Stockwell2010-08-0211-20/+122
| | | | | | | | | | | | | | | | | | | | | 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
* Use lower case for including system header filesGareth Stockwell2010-07-076-6/+6
| | | | | | | | | | | 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
* Added trace statements to Phonon MMF backendGareth Stockwell2010-07-071-0/+17
| | | | Reviewed-by: trustme
* MMF Phonon backend: call winId() from VideoWidget constructorGareth Stockwell2010-07-072-4/+2
| | | | | | | | 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
* Fixed crash which occurs when switching between video clipsGareth Stockwell2010-07-072-13/+32
| | | | | | | | | | | | | | | | | | | 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
* Close media clip before creating new player objectGareth Stockwell2010-07-075-1/+9
| | | | | | | | | | 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
* Enable bufferStatus signal during video clip loading on NGA platformsGareth Stockwell2010-07-072-2/+2
| | | | | | | | 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
* Prevent crash when video is played without a VideoWidgetGareth Stockwell2010-07-073-4/+18
| | | | | | | | | 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
* Removed compiler warningsGareth Stockwell2010-06-026-2/+14
| | | | | | Emitted when building with MetroWerks x86 toolchain. Reviewed-by: trustme
* Fixed incorrect runtime platform version check in Phonon MMF backendGareth Stockwell2010-04-301-1/+1
| | | | | | | | | | | | | 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
* Phonon MMF: fixed crash during opening of video clipGareth Stockwell2010-04-152-57/+58
| | | | | | | | | | | | | | | | | | | | | | | 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
* Phonon MMF: ensure initial volume is appliedGareth Stockwell2010-04-151-3/+2
| | | | | | | | 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
* Phonon MMF: fix state changes emitted during playlist handlingGareth Stockwell2010-04-151-0/+5
| | | | | | | | | | | | | | | | | | | | | | 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
* Phonon MMF: calling pause() when in StoppedState triggers stateChanged()Gareth Stockwell2010-04-156-29/+71
| | | | | | | | 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
* Phonon MMF: change to PausedState, not StoppedState when finishedGareth Stockwell2010-04-151-1/+1
| | | | | | | This behaviour is required by the testPauseOnFinish step in tst_mediaobject. Reviewed-by: Frans Englich
* Phonon MMF: Suppress intermediate stateChanged() signalGareth Stockwell2010-04-152-8/+16
| | | | | | | | | | | | 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
* Phonon MMF: Emit tick() signalGareth Stockwell2010-04-151-0/+1
| | | | | | | Fixes testTickSignal step in tst_mediaobject. Task-number: QTBUG-9339 Reviewed-by: Frans Englich
* Phonon MMF: Emit prefinishMarkReached(), finished() signalsGareth Stockwell2010-04-153-2/+18
| | | | | | | Fixes testPrefinishMark step in tst_mediaobject. Task-number: QTBUG-9339 Reviewed-by: Frans Englich
* Phonon MMF: Removed compiler warningGareth Stockwell2010-04-151-1/+1
| | | | Reviewed-by: Frans Englich
* Phonon MMF: fixed typo in trace statementGareth Stockwell2010-04-141-1/+1
| | | | | | | 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
* Ensure Phonon MMF backend emits aboutToFinishGareth Stockwell2010-03-312-5/+10
| | | | | | | | | | | | | | | | 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
* Remove compiler warningGareth Stockwell2010-03-311-1/+1
| | | | | | | RVCT complains that a non-POD type (VideoParameters) is passed through the TRACE_ENTRY ellipsis, when building in debug mode. Reviewed-by: trustme
* Added additional logging to Phonon MMF backendGareth Stockwell2010-03-304-3/+44
| | | | | | | | | | | | | | | | 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
* Fixed crash in Phonon MMF backend during application shutdownGareth Stockwell2010-03-291-1/+7
| | | | | | | | | | | | | 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
* Added support for video surfaces to Phonon MMF backendGareth Stockwell2010-03-1828-1163/+1982
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Merge branch 'mmfphonon' into 4.6Frans Englich2010-03-101-10/+12
|\
| * Fix SDP files are not supported.Frans Englich2010-03-101-10/+12
| | | | | | | | | | | | | | The Phonon glue code rejected SDPs based on the MIME type for SDPs. Task-number: QTBUG-8702 Reviewed-by: Gareth Stockwell
* | I10n: Use 'real' Linguist comments in Phonon::EnvironmentalReverbFriedemann Kleint2010-02-041-31/+22
| | | | | | | | Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
* | Added descriptions of translatable strings for Phonon MMF reverb effectGareth Stockwell2010-02-031-1/+21
| | | | | | | | Reviewed-by: trustme
* | Corrected namespace for Phonon::MMF translatable error stringsGareth Stockwell2010-02-031-1/+1
| | | | | | | | | | | | Error strings are now part of the Phonon::MMF namespace. Reviewed-by: trustme
* | Workaround for compiler error with MWCC (Symbian emulator)Shane Kearns2010-01-188-12/+12
|/ | | | | | | Recent changes to phonon and syncqt cause problems with the default search path for #include with this compiler. Reviewed-by: Gareth Stockwell
* Added enable/disable parameter to each effect in Phonon MMF backendGareth Stockwell2010-01-1112-68/+74
| | | | | Task-number: QTBUG-4659 Reviewed-by: Espen Riskedal
* Simplified error handling for audio effectsGareth Stockwell2010-01-1112-31/+33
| | | | | Task-number: QTBUG-4659 Reviewed-by: Espen Riskedal
* Implemented stereo widening effect in Phonon MMF backendGareth Stockwell2010-01-113-1/+161
| | | | | Task-number: QTBUG-4659 Reviewed-by: Espen Riskedal
* Implemented reverb effect in Phonon MMF backendGareth Stockwell2010-01-115-2/+283
| | | | | Task-number: QTBUG-4659 Reviewed-by: Espen Riskedal
* Implemented loudness effect in Phonon MMF backendGareth Stockwell2010-01-113-0/+146
| | | | | Task-number: QTBUG-4659 Reviewed-by: Espen Riskedal
* Implemented bass boost in Phonon MMF backendGareth Stockwell2010-01-115-11/+42
| | | | | Task-number: QTBUG-4659 Reviewed-by: Espen Riskedal
* Refactored AbstractAudioEffect to reduce redundancy in derived classesGareth Stockwell2010-01-116-41/+37
| | | | | Task-number: QTBUG-4659 Reviewed-by: Espen Riskedal
* Removed unnecessary check in Phonon MMF backendGareth Stockwell2010-01-111-5/+3
| | | | | | | | This pointer is guaranteed not to be null by the check in AbstractAudioEffect::setParameterValue. Task-number: QTBUG-4659 Reviewed-by: trustme
* Added a macro to reduce boilerplate code in Phonon MMF backendGareth Stockwell2010-01-115-17/+35
| | | | | Task-number: QTBUG-4659 Reviewed-by: Espen Riskedal
* Removed dependency of EffectFactory on native effect headersGareth Stockwell2010-01-116-60/+48
| | | | | | | | | | | | | | | 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