From 4cf313be8d440e2ef9bdb4a586fbcba20c3ee317 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Wed, 28 Jul 2010 14:05:52 +0100 Subject: Added support to Phonon MMF backend for playback of Qt resource files 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. Task-number: QTBUG-6562 --- src/3rdparty/phonon/mmf/abstractmediaplayer.cpp | 28 ++++++++-- src/3rdparty/phonon/mmf/abstractmediaplayer.h | 6 ++- src/3rdparty/phonon/mmf/abstractplayer.h | 4 +- src/3rdparty/phonon/mmf/abstractvideoplayer.cpp | 6 +++ src/3rdparty/phonon/mmf/abstractvideoplayer.h | 1 + src/3rdparty/phonon/mmf/audioplayer.cpp | 6 +++ src/3rdparty/phonon/mmf/audioplayer.h | 1 + src/3rdparty/phonon/mmf/dummyplayer.cpp | 2 +- src/3rdparty/phonon/mmf/dummyplayer.h | 2 +- src/3rdparty/phonon/mmf/mediaobject.cpp | 71 ++++++++++++++++++++++--- src/3rdparty/phonon/mmf/mediaobject.h | 11 ++-- src/3rdparty/phonon/phonon/mediasource.cpp | 5 ++ 12 files changed, 123 insertions(+), 20 deletions(-) diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp index be2a568..bca0891 100644 --- a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp +++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp @@ -16,6 +16,7 @@ along with this library. If not, see . */ +#include #include #include "abstractmediaplayer.h" @@ -216,9 +217,10 @@ void MMF::AbstractMediaPlayer::doSetTickInterval(qint32 interval) TRACE_EXIT_0(); } -void MMF::AbstractMediaPlayer::open(const MediaSource &source, RFile& file) +void MMF::AbstractMediaPlayer::open() { - TRACE_CONTEXT(AbstractMediaPlayer::setFileSource, EAudioApi); + TRACE_CONTEXT(AbstractMediaPlayer::open, EAudioApi); + const MediaSource source = m_parent->source(); TRACE_ENTRY("state %d source.type %d", privateState(), source.type()); close(); @@ -229,7 +231,9 @@ void MMF::AbstractMediaPlayer::open(const MediaSource &source, RFile& file) switch (source.type()) { case MediaSource::LocalFile: { - symbianErr = openFile(file); + RFile *const file = m_parent->file(); + Q_ASSERT(file); + symbianErr = openFile(*file); if (KErrNone != symbianErr) errorMessage = tr("Error opening file"); break; @@ -237,9 +241,10 @@ void MMF::AbstractMediaPlayer::open(const MediaSource &source, RFile& file) case MediaSource::Url: { const QUrl url(source.url()); - if (url.scheme() == QLatin1String("file")) { - symbianErr = openFile(file); + RFile *const file = m_parent->file(); + Q_ASSERT(file); + symbianErr = openFile(*file); if (KErrNone != symbianErr) errorMessage = tr("Error opening file"); } else { @@ -251,6 +256,19 @@ void MMF::AbstractMediaPlayer::open(const MediaSource &source, RFile& file) break; } + case MediaSource::Stream: { + QResource *const resource = m_parent->resource(); + if (resource && resource->isValid()) { + m_buffer.Set(resource->data(), resource->size()); + symbianErr = openDescriptor(m_buffer); + if (KErrNone != symbianErr) + errorMessage = tr("Error opening resource"); + } else { + errorMessage = tr("Error opening source: resource not valid"); + } + break; + } + // Other source types are handled in MediaObject::createPlayer // Protection against adding new media types and forgetting to update this switch diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.h b/src/3rdparty/phonon/mmf/abstractmediaplayer.h index 7d28caf..e795ecb 100644 --- a/src/3rdparty/phonon/mmf/abstractmediaplayer.h +++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.h @@ -47,7 +47,7 @@ protected: AbstractMediaPlayer(MediaObject *parent, const AbstractPlayer *player); public: - virtual void open(const Phonon::MediaSource&, RFile&); + virtual void open(); // MediaObjectInterface virtual void play(); @@ -70,6 +70,7 @@ protected: virtual int setDeviceVolume(int mmfVolume) = 0; virtual int openFile(RFile& file) = 0; virtual int openUrl(const QString& url) = 0; + virtual int openDescriptor(const TDesC8 &des) = 0; virtual int bufferStatus() const = 0; void updateMetaData(); @@ -123,6 +124,9 @@ private: bool m_prefinishMarkSent; bool m_aboutToFinishSent; + // Used for playback of resource files + TPtrC8 m_buffer; + QMultiMap m_metaData; }; diff --git a/src/3rdparty/phonon/mmf/abstractplayer.h b/src/3rdparty/phonon/mmf/abstractplayer.h index 30d5243..dd98c7c 100644 --- a/src/3rdparty/phonon/mmf/abstractplayer.h +++ b/src/3rdparty/phonon/mmf/abstractplayer.h @@ -26,8 +26,6 @@ along with this library. If not, see . #include "abstractvideooutput.h" -class RFile; - QT_BEGIN_NAMESPACE namespace Phonon @@ -54,7 +52,7 @@ class AbstractPlayer : public QObject public: AbstractPlayer(const AbstractPlayer *player); - virtual void open(const Phonon::MediaSource&, RFile&) = 0; + virtual void open() = 0; virtual void close() = 0; // MediaObjectInterface (implemented) diff --git a/src/3rdparty/phonon/mmf/abstractvideoplayer.cpp b/src/3rdparty/phonon/mmf/abstractvideoplayer.cpp index 9ea4d18..fb20bea 100644 --- a/src/3rdparty/phonon/mmf/abstractvideoplayer.cpp +++ b/src/3rdparty/phonon/mmf/abstractvideoplayer.cpp @@ -144,6 +144,12 @@ int MMF::AbstractVideoPlayer::openUrl(const QString &url) return err; } +int MMF::AbstractVideoPlayer::openDescriptor(const TDesC8 &des) +{ + TRAPD(err, m_player->OpenDesL(des)); + return err; +} + int MMF::AbstractVideoPlayer::bufferStatus() const { int result = 0; diff --git a/src/3rdparty/phonon/mmf/abstractvideoplayer.h b/src/3rdparty/phonon/mmf/abstractvideoplayer.h index d854793..3ff3c75 100644 --- a/src/3rdparty/phonon/mmf/abstractvideoplayer.h +++ b/src/3rdparty/phonon/mmf/abstractvideoplayer.h @@ -66,6 +66,7 @@ public: virtual int setDeviceVolume(int mmfVolume); virtual int openFile(RFile &file); virtual int openUrl(const QString &url); + virtual int openDescriptor(const TDesC8 &des); virtual int bufferStatus() const; virtual void close(); diff --git a/src/3rdparty/phonon/mmf/audioplayer.cpp b/src/3rdparty/phonon/mmf/audioplayer.cpp index f49e898..7c8b9bd 100644 --- a/src/3rdparty/phonon/mmf/audioplayer.cpp +++ b/src/3rdparty/phonon/mmf/audioplayer.cpp @@ -137,6 +137,12 @@ int MMF::AudioPlayer::openUrl(const QString& /*url*/) return 0; } +int MMF::AudioPlayer::openDescriptor(const TDesC8 &des) +{ + TRAPD(err, m_player->OpenDesL(des)); + return err; +} + int MMF::AudioPlayer::bufferStatus() const { int result = 0; diff --git a/src/3rdparty/phonon/mmf/audioplayer.h b/src/3rdparty/phonon/mmf/audioplayer.h index 0eb8bb7..e43cadd 100644 --- a/src/3rdparty/phonon/mmf/audioplayer.h +++ b/src/3rdparty/phonon/mmf/audioplayer.h @@ -67,6 +67,7 @@ typedef CMdaAudioPlayerUtility NativePlayer; virtual int setDeviceVolume(int mmfVolume); virtual int openFile(RFile& file); virtual int openUrl(const QString& url); + virtual int openDescriptor(const TDesC8 &des); virtual int bufferStatus() const; virtual void close(); diff --git a/src/3rdparty/phonon/mmf/dummyplayer.cpp b/src/3rdparty/phonon/mmf/dummyplayer.cpp index d39ef76..ba75b02 100644 --- a/src/3rdparty/phonon/mmf/dummyplayer.cpp +++ b/src/3rdparty/phonon/mmf/dummyplayer.cpp @@ -92,7 +92,7 @@ qint64 MMF::DummyPlayer::totalTime() const return 0; } -void MMF::DummyPlayer::open(const Phonon::MediaSource &, RFile &) +void MMF::DummyPlayer::open() { } diff --git a/src/3rdparty/phonon/mmf/dummyplayer.h b/src/3rdparty/phonon/mmf/dummyplayer.h index 9d45696..5b00411 100644 --- a/src/3rdparty/phonon/mmf/dummyplayer.h +++ b/src/3rdparty/phonon/mmf/dummyplayer.h @@ -57,7 +57,7 @@ public: virtual qint64 totalTime() const; // AbstractPlayer - virtual void open(const Phonon::MediaSource&, RFile&); + virtual void open(); virtual void close(); virtual void doSetTickInterval(qint32 interval); }; diff --git a/src/3rdparty/phonon/mmf/mediaobject.cpp b/src/3rdparty/phonon/mmf/mediaobject.cpp index d264377..e16bdf3 100644 --- a/src/3rdparty/phonon/mmf/mediaobject.cpp +++ b/src/3rdparty/phonon/mmf/mediaobject.cpp @@ -34,6 +34,7 @@ along with this library. If not, see . #include "mediaobject.h" #include +#include #include QT_BEGIN_NAMESPACE @@ -52,6 +53,8 @@ using namespace Phonon::MMF; MMF::MediaObject::MediaObject(QObject *parent) : MMF::MediaNode::MediaNode(parent) , m_recognizerOpened(false) , m_nextSourceSet(false) + , m_file(0) + , m_resource(0) { m_player.reset(new DummyPlayer()); @@ -68,7 +71,12 @@ MMF::MediaObject::~MediaObject() TRACE_CONTEXT(MediaObject::~MediaObject, EAudioApi); TRACE_ENTRY_0(); - m_file.Close(); + delete m_resource; + + if (m_file) + m_file->Close(); + delete m_file; + m_fileServer.Close(); m_recognizer.Close(); @@ -122,12 +130,13 @@ MMF::MediaType MMF::MediaObject::fileMediaType const QHBufC fileNameSymbian(QDir::toNativeSeparators(fileName)); - m_file.Close(); - TInt err = m_file.Open(m_fileServer, *fileNameSymbian, EFileRead | EFileShareReadersOnly); + Q_ASSERT(!m_file); + m_file = new RFile; + TInt err = m_file->Open(m_fileServer, *fileNameSymbian, EFileRead | EFileShareReadersOnly); if (KErrNone == err) { TDataRecognitionResult recognizerResult; - err = m_recognizer.RecognizeData(m_file, recognizerResult); + err = m_recognizer.RecognizeData(*m_file, recognizerResult); if (KErrNone == err) { const TPtrC mimeType = recognizerResult.iDataType.Des(); result = Utils::mimeTypeToMediaType(mimeType); @@ -142,6 +151,23 @@ MMF::MediaType MMF::MediaObject::fileMediaType return result; } +MMF::MediaType MMF::MediaObject::bufferMediaType(const uchar *data, qint64 size) +{ + TRACE_CONTEXT(MediaObject::bufferMediaType, EAudioInternal); + MediaType result = MediaTypeUnknown; + if (openRecognizer()) { + TDataRecognitionResult recognizerResult; + const TPtrC8 des(data, size); + const TInt err = m_recognizer.RecognizeData(des, recognizerResult); + if (KErrNone == err) { + const TPtrC mimeType = recognizerResult.iDataType.Des(); + result = Utils::mimeTypeToMediaType(mimeType); + } else { + TRACE("RApaLsSession::RecognizeData error %d", err); + } + } + return result; +} //----------------------------------------------------------------------------- // MediaObjectInterface @@ -228,9 +254,17 @@ void MMF::MediaObject::setSource(const MediaSource &source) void MMF::MediaObject::switchToSource(const MediaSource &source) { + if (m_file) + m_file->Close(); + delete m_file; + m_file = 0; + + delete m_resource; + m_resource = 0; + createPlayer(source); m_source = source; - m_player->open(m_source, m_file); + m_player->open(); emit currentSourceChanged(m_source); } @@ -272,10 +306,25 @@ void MMF::MediaObject::createPlayer(const MediaSource &source) case MediaSource::Invalid: case MediaSource::Disc: - case MediaSource::Stream: errorMessage = tr("Error opening source: type not supported"); break; + case MediaSource::Stream: + { + const QString fileName = source.url().toLocalFile(); + if (fileName.startsWith(QLatin1String(":/")) || fileName.startsWith(QLatin1String("qrc://"))) { + Q_ASSERT(!m_resource); + m_resource = new QResource(fileName); + if (m_resource->isValid()) + mediaType = bufferMediaType(m_resource->data(), m_resource->size()); + else + errorMessage = tr("Error opening source: resource not valid"); + } else { + errorMessage = tr("Error opening source: type not supported"); + } + } + break; + case MediaSource::Empty: TRACE_0("Empty media source"); break; @@ -374,6 +423,16 @@ void MMF::MediaObject::volumeChanged(qreal volume) m_player->volumeChanged(volume); } +RFile* MMF::MediaObject::file() const +{ + return m_file; +} + +QResource* MMF::MediaObject::resource() const +{ + return m_resource; +} + //----------------------------------------------------------------------------- // MediaNode //----------------------------------------------------------------------------- diff --git a/src/3rdparty/phonon/mmf/mediaobject.h b/src/3rdparty/phonon/mmf/mediaobject.h index f15eb21..5399e27 100644 --- a/src/3rdparty/phonon/mmf/mediaobject.h +++ b/src/3rdparty/phonon/mmf/mediaobject.h @@ -33,6 +33,8 @@ along with this library. If not, see . QT_BEGIN_NAMESPACE +class QResource; + namespace Phonon { namespace MMF @@ -87,6 +89,9 @@ public: void setVideoOutput(AbstractVideoOutput* videoOutput); + RFile* file() const; + QResource* resource() const; + public Q_SLOTS: void volumeChanged(qreal volume); void switchToNextSource(); @@ -117,6 +122,7 @@ private: // Audio / video media type recognition MediaType fileMediaType(const QString& fileName); + MediaType bufferMediaType(const uchar *data, qint64 size); // TODO: urlMediaType function static qint64 toMilliSeconds(const TTimeIntervalMicroSeconds &); @@ -132,9 +138,8 @@ private: MediaSource m_nextSource; bool m_nextSourceSet; - // Storing the file handle here to work around KErrInUse error - // from MMF player utility OpenFileL functions - RFile m_file; + RFile* m_file; + QResource* m_resource; QScopedPointer m_player; diff --git a/src/3rdparty/phonon/phonon/mediasource.cpp b/src/3rdparty/phonon/phonon/mediasource.cpp index be22dc3..925ff32 100644 --- a/src/3rdparty/phonon/phonon/mediasource.cpp +++ b/src/3rdparty/phonon/phonon/mediasource.cpp @@ -58,6 +58,11 @@ MediaSource::MediaSource(const QString &filename) d->type = Stream; d->ioDevice = new QFile(filename); d->setStream(new IODeviceStream(d->ioDevice, d->ioDevice)); +#ifdef Q_OS_SYMBIAN + // On Symbian, we need to access the resource buffer directly, rather than + // via QFile indirection + d->url = QUrl::fromLocalFile(fileInfo.absoluteFilePath()); +#endif #else d->type = Invalid; #endif //QT_NO_PHONON_ABSTRACTMEDIASTREAM -- cgit v0.12 From 2e0a41f304e7505602699c9623a96b6174165150 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Wed, 28 Jul 2010 17:12:10 +0100 Subject: Updated tst_mediaobject resource playback test cases * Removed Q_SKIP on Symbian * Divided test into two, to exercise the two possible ways of providing the resource path to Phonon::MediaSource Task-number: QTBUG-6562 --- tests/auto/mediaobject/tst_mediaobject.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/tests/auto/mediaobject/tst_mediaobject.cpp b/tests/auto/mediaobject/tst_mediaobject.cpp index 994057b..99a16db 100644 --- a/tests/auto/mediaobject/tst_mediaobject.cpp +++ b/tests/auto/mediaobject/tst_mediaobject.cpp @@ -124,7 +124,8 @@ class tst_MediaObject : public QObject void init(); void cleanup(); - void testPlayFromResource(); + void testPlayFromResourceDirect(); + void testPlayFromResourceFile(); void testPlayIllegalFile(); void initTestCase(); void checkForDefaults(); @@ -199,11 +200,22 @@ void tst_MediaObject::stateChanged(Phonon::State newstate, Phonon::State oldstat QWARN(QByteArray(QByteArray(QTest::toString(oldstate)) + " to " + QByteArray(QTest::toString(newstate)))); } -void tst_MediaObject::testPlayFromResource() +void tst_MediaObject::testPlayFromResourceDirect() +{ + MediaObject media; + media.setCurrentSource(Phonon::MediaSource(MEDIA_FILEPATH)); + QVERIFY(media.state() != Phonon::ErrorState); + if (media.state() != Phonon::StoppedState) + QTest::waitForSignal(&media, SIGNAL(stateChanged(Phonon::State, Phonon::State)), 10000); + QCOMPARE(media.state(), Phonon::StoppedState); + media.play(); + if (media.state() != Phonon::PlayingState) + QTest::waitForSignal(&media, SIGNAL(stateChanged(Phonon::State, Phonon::State)), 10000); + QCOMPARE(media.state(), Phonon::PlayingState); +} + +void tst_MediaObject::testPlayFromResourceFile() { -#ifdef Q_OS_SYMBIAN - QSKIP("Not implemented yet.", SkipAll); -#else QFile file(MEDIA_FILEPATH); MediaObject media; media.setCurrentSource(&file); @@ -215,7 +227,6 @@ void tst_MediaObject::testPlayFromResource() if (media.state() != Phonon::PlayingState) QTest::waitForSignal(&media, SIGNAL(stateChanged(Phonon::State, Phonon::State)), 10000); QCOMPARE(media.state(), Phonon::PlayingState); -#endif } void tst_MediaObject::testPlayIllegalFile() -- cgit v0.12 From 7b70dd1d7f5f6819b1aa28647826e2137504de54 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Wed, 28 Jul 2010 14:05:52 +0100 Subject: Added support to Phonon MMF backend for playback of Qt resource files 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 --- src/3rdparty/phonon/mmf/abstractmediaplayer.cpp | 4 ++-- src/3rdparty/phonon/mmf/mediaobject.cpp | 10 +++++++--- src/3rdparty/phonon/phonon/mediasource.cpp | 4 ---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp index bca0891..3702560 100644 --- a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp +++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp @@ -258,13 +258,13 @@ void MMF::AbstractMediaPlayer::open() case MediaSource::Stream: { QResource *const resource = m_parent->resource(); - if (resource && resource->isValid()) { + if (resource) { m_buffer.Set(resource->data(), resource->size()); symbianErr = openDescriptor(m_buffer); if (KErrNone != symbianErr) errorMessage = tr("Error opening resource"); } else { - errorMessage = tr("Error opening source: resource not valid"); + errorMessage = tr("Error opening source: resource not opened"); } break; } diff --git a/src/3rdparty/phonon/mmf/mediaobject.cpp b/src/3rdparty/phonon/mmf/mediaobject.cpp index e16bdf3..b476535 100644 --- a/src/3rdparty/phonon/mmf/mediaobject.cpp +++ b/src/3rdparty/phonon/mmf/mediaobject.cpp @@ -315,10 +315,14 @@ void MMF::MediaObject::createPlayer(const MediaSource &source) if (fileName.startsWith(QLatin1String(":/")) || fileName.startsWith(QLatin1String("qrc://"))) { Q_ASSERT(!m_resource); m_resource = new QResource(fileName); - if (m_resource->isValid()) - mediaType = bufferMediaType(m_resource->data(), m_resource->size()); - else + if (m_resource->isValid()) { + if (m_resource->isCompressed()) + errorMessage = tr("Error opening source: resource is compressed"); + else + mediaType = bufferMediaType(m_resource->data(), m_resource->size()); + } else { errorMessage = tr("Error opening source: resource not valid"); + } } else { errorMessage = tr("Error opening source: type not supported"); } diff --git a/src/3rdparty/phonon/phonon/mediasource.cpp b/src/3rdparty/phonon/phonon/mediasource.cpp index 925ff32..8bde565 100644 --- a/src/3rdparty/phonon/phonon/mediasource.cpp +++ b/src/3rdparty/phonon/phonon/mediasource.cpp @@ -58,11 +58,7 @@ MediaSource::MediaSource(const QString &filename) d->type = Stream; d->ioDevice = new QFile(filename); d->setStream(new IODeviceStream(d->ioDevice, d->ioDevice)); -#ifdef Q_OS_SYMBIAN - // On Symbian, we need to access the resource buffer directly, rather than - // via QFile indirection d->url = QUrl::fromLocalFile(fileInfo.absoluteFilePath()); -#endif #else d->type = Invalid; #endif //QT_NO_PHONON_ABSTRACTMEDIASTREAM -- cgit v0.12 From 7f4e72f438362da7b862ea682f36ec959070e1cb Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Mon, 2 Aug 2010 10:09:49 +0100 Subject: Enabled tst_mediaobject::testPlayFromResource on Symbian Task-number: QTBUG-6562 Reviewed-by: Justin McPherson --- tests/auto/mediaobject/tst_mediaobject.cpp | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/tests/auto/mediaobject/tst_mediaobject.cpp b/tests/auto/mediaobject/tst_mediaobject.cpp index 99a16db..613a086 100644 --- a/tests/auto/mediaobject/tst_mediaobject.cpp +++ b/tests/auto/mediaobject/tst_mediaobject.cpp @@ -124,8 +124,7 @@ class tst_MediaObject : public QObject void init(); void cleanup(); - void testPlayFromResourceDirect(); - void testPlayFromResourceFile(); + void testPlayFromResource(); void testPlayIllegalFile(); void initTestCase(); void checkForDefaults(); @@ -200,7 +199,7 @@ void tst_MediaObject::stateChanged(Phonon::State newstate, Phonon::State oldstat QWARN(QByteArray(QByteArray(QTest::toString(oldstate)) + " to " + QByteArray(QTest::toString(newstate)))); } -void tst_MediaObject::testPlayFromResourceDirect() +void tst_MediaObject::testPlayFromResource() { MediaObject media; media.setCurrentSource(Phonon::MediaSource(MEDIA_FILEPATH)); @@ -214,21 +213,6 @@ void tst_MediaObject::testPlayFromResourceDirect() QCOMPARE(media.state(), Phonon::PlayingState); } -void tst_MediaObject::testPlayFromResourceFile() -{ - QFile file(MEDIA_FILEPATH); - MediaObject media; - media.setCurrentSource(&file); - QVERIFY(media.state() != Phonon::ErrorState); - if (media.state() != Phonon::StoppedState) - QTest::waitForSignal(&media, SIGNAL(stateChanged(Phonon::State, Phonon::State)), 10000); - QCOMPARE(media.state(), Phonon::StoppedState); - media.play(); - if (media.state() != Phonon::PlayingState) - QTest::waitForSignal(&media, SIGNAL(stateChanged(Phonon::State, Phonon::State)), 10000); - QCOMPARE(media.state(), Phonon::PlayingState); -} - void tst_MediaObject::testPlayIllegalFile() { QString filename = QDir::tempPath() + QString("/test.wav"); -- cgit v0.12 From 1c7c6e2326b2f89bdf564cebe89ff6f95c3f17d7 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Mon, 2 Aug 2010 12:10:14 +0100 Subject: Fixed build break on Symbian versions earlier than S^3 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 --- src/3rdparty/phonon/mmf/mediaobject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/3rdparty/phonon/mmf/mediaobject.cpp b/src/3rdparty/phonon/mmf/mediaobject.cpp index b476535..98326b8 100644 --- a/src/3rdparty/phonon/mmf/mediaobject.cpp +++ b/src/3rdparty/phonon/mmf/mediaobject.cpp @@ -158,7 +158,7 @@ MMF::MediaType MMF::MediaObject::bufferMediaType(const uchar *data, qint64 size) if (openRecognizer()) { TDataRecognitionResult recognizerResult; const TPtrC8 des(data, size); - const TInt err = m_recognizer.RecognizeData(des, recognizerResult); + const TInt err = m_recognizer.RecognizeData(KNullDesC, des, recognizerResult); if (KErrNone == err) { const TPtrC mimeType = recognizerResult.iDataType.Des(); result = Utils::mimeTypeToMediaType(mimeType); -- cgit v0.12