summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/phonon/mmf/mediaobject.h
diff options
context:
space:
mode:
authorGareth Stockwell <gareth.stockwell@sosco.com>2009-08-18 08:12:47 (GMT)
committerGareth Stockwell <gareth.stockwell@sosco.com>2009-08-18 08:15:29 (GMT)
commit008d464ea90a0a33f16bd6ce29563e7dd206b91f (patch)
tree7156f7124e8b520b1559e4cce1f0f2476cf075e6 /src/3rdparty/phonon/mmf/mediaobject.h
parent427c415d876d57042a55e8b66730888512ac0ed1 (diff)
parent6b7603a0a2fed844b1264d8deb0ce78b110858c4 (diff)
downloadQt-008d464ea90a0a33f16bd6ce29563e7dd206b91f.zip
Qt-008d464ea90a0a33f16bd6ce29563e7dd206b91f.tar.gz
Qt-008d464ea90a0a33f16bd6ce29563e7dd206b91f.tar.bz2
Merged recognizer changes with abstraction for audio / video playback.
Audio playback now working to the same extent as prior to the abstraction, with one regression: the initial volume level in the UI is set to zero, although playback is audible. Some cleanup is required: - Functionality common to AudioPlayer and VideoPlayer (e.g. tick timer, changeState function) should be moved into AbstractPlayer. - Files may be opened by multiple instances of MediaObject at at time. For example, the musicplayer example app uses one instance to read file metadata, and one for the actual playback. In order to avoid KErrInUse errors from the file server, files must be opened with an EShare* flag and passed around by handle. At present this is done in a slightly hacky way (i.e. AbstractPlayer::setSource is renamed to setFileSource). - The pointer held by MediaObject::m_player must be checked for nullness in many of the public API calls. This could be made cleaner by implementing a stub derivation of AbstractPlayer, which returns sensible default values. Note that, if functionality such as tick timer handling is going to be pushed upwards from AudioPlayer / VideoPlayer, we should add an intermediate class to the hierarchy so that the overhead of constructing DummyPlayer objects is minimised. At present, media type (audio / video) is only recognised from file streams - this needs to be extended to include HTTP streaming aswell.
Diffstat (limited to 'src/3rdparty/phonon/mmf/mediaobject.h')
-rw-r--r--src/3rdparty/phonon/mmf/mediaobject.h99
1 files changed, 27 insertions, 72 deletions
diff --git a/src/3rdparty/phonon/mmf/mediaobject.h b/src/3rdparty/phonon/mmf/mediaobject.h
index af9bae2..2eb70c3 100644
--- a/src/3rdparty/phonon/mmf/mediaobject.h
+++ b/src/3rdparty/phonon/mmf/mediaobject.h
@@ -19,26 +19,10 @@ along with this library. If not, see <http://www.gnu.org/licenses/>.
#ifndef PHONON_MMF_MEDIAOBJECT_H
#define PHONON_MMF_MEDIAOBJECT_H
-/* We use the extra qualification include/ to avoid picking up the include
- * Phonon has. */
-#include <include/videoplayer.h>
-
#include <Phonon/MediaSource>
-#include <Phonon/mediaobjectinterface.h>
-
-class CDrmPlayerUtility;
-class TTimeIntervalMicroSeconds;
-class QTimer;
-
-#ifdef QT_PHONON_MMF_AUDIO_DRM
-#include <drmaudiosampleplayer.h>
-typedef CDrmPlayerUtility CPlayerType;
-typedef MDrmAudioPlayerCallback MPlayerObserverType;
-#else
-#include <mdaaudiosampleplayer.h>
-typedef CMdaAudioPlayerUtility CPlayerType;
-typedef MMdaAudioPlayerCallback MPlayerObserverType;
-#endif
+#include <Phonon/MediaObjectInterface>
+#include <QScopedPointer>
+#include <QTimer>
// For recognizer
#include <apgcli.h>
@@ -47,20 +31,13 @@ namespace Phonon
{
namespace MMF
{
+ class AbstractPlayer;
class AudioOutput;
/**
- *
- * See
- * <a href="http://wiki.forum.nokia.com/index.php/How_to_play_a_video_file_using_CVideoPlayerUtility">How to
- * play a video file using CVideoPlayerUtility</a>
*/
class MediaObject : public QObject
, public MediaObjectInterface
- , public MPlayerObserverType // typedef
-#ifdef QT_PHONON_MMF_AUDIO_DRM
- , public MAudioLoadingObserver
-#endif
{
Q_OBJECT
Q_INTERFACES(Phonon::MediaObjectInterface)
@@ -91,22 +68,6 @@ namespace Phonon
virtual qint32 transitionTime() const;
virtual void setTransitionTime(qint32);
-#ifdef QT_PHONON_MMF_AUDIO_DRM
- // MDrmAudioPlayerCallback
- virtual void MdapcInitComplete(TInt aError,
- const TTimeIntervalMicroSeconds &aDuration);
- virtual void MdapcPlayComplete(TInt aError);
-
- // MAudioLoadingObserver
- virtual void MaloLoadingStarted();
- virtual void MaloLoadingComplete();
-#else
- // MMdaAudioPlayerCallback
- virtual void MapcInitComplete(TInt aError,
- const TTimeIntervalMicroSeconds &aDuration);
- virtual void MapcPlayComplete(TInt aError);
-#endif
-
qreal volume() const;
bool setVolume(qreal volume);
@@ -119,15 +80,13 @@ namespace Phonon
void finished();
void tick(qint64 time);
- private Q_SLOTS:
- /**
- * Receives signal from m_tickTimer
- */
- void tick();
-
private:
static qint64 toMilliSeconds(const TTimeIntervalMicroSeconds &);
+// The following has been moved into the AbstractPlayer-derived classes
+// This needs to be cleaned up - at present, there is no way for this class
+// to enter an error state, unless it has already constructed m_player
+#if 0
/**
* Defined private state enumeration in order to add GroundState
*/
@@ -151,38 +110,34 @@ namespace Phonon
* Changes state and emits stateChanged()
*/
void changeState(PrivateState newState);
+
+ ErrorType m_error;
+ PrivateState m_state;
+#endif
- RApaLsSession m_recognizer;
- RFs m_fileServer;
- enum MediaType { MediaTypeUnknown, MediaTypeAudio, MediaTypeVideo };
- MediaType mimeTypeToMediaType(const TDesC& mimeType);
- MediaType fileMediaType(const QString& fileName);
- // TODO: urlMediaType function
-
- /**
- * Using CPlayerType typedef in order to be able to easily switch between
- * CMdaAudioPlayerUtility and CDrmPlayerUtility
- */
- CPlayerType* m_player;
-
+ RApaLsSession m_recognizer;
+ RFs m_fileServer;
+ enum MediaType { MediaTypeUnknown, MediaTypeAudio, MediaTypeVideo };
+ MediaType mimeTypeToMediaType(const TDesC& mimeType);
+ MediaType fileMediaType(const QString& fileName);
+ // TODO: urlMediaType function
+
+ // Storing the file handle here to work around KErrInUse error
+ // from MMF player utility OpenFileL functions
+ RFile m_file;
+
AudioOutput* m_audioOutput;
- ErrorType m_error;
-
- /**
- * Do not set this directly - call changeState() instead.
- */
- PrivateState m_state;
-
qint32 m_tickInterval;
QTimer* m_tickTimer;
- MediaSource m_mediaSource;
- MediaSource m_nextSource;
-
qreal m_volume;
int m_maxVolume;
+
+ void loadPlayer(const MediaSource &source);
+
+ QScopedPointer<AbstractPlayer> m_player;
};
}
}