From 966d4bc86f02de83b621ef972c418352e84f6d09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Thu, 28 Nov 2013 15:07:21 +0100 Subject: Android add support for qrc in mediaplayer. [ChangeLog][QtMultimedia][Android] Enable mediaplayer to read files from the Qt Resource system. Task-number: QTBUG-31422 Change-Id: Iaaefb35566b623b78b9f8aa22daf6ac92fb35e67 Reviewed-by: Yoann Lopes --- .../src/mediaplayer/qandroidmediaplayercontrol.cpp | 15 ++++++++++++--- .../android/src/mediaplayer/qandroidmediaplayercontrol.h | 2 ++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp index 54c04e5c9..ce73263d3 100644 --- a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp +++ b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp @@ -218,10 +218,19 @@ void QAndroidMediaPlayerControl::setMedia(const QMediaContent &mediaContent, return; } - const QString uri = mediaContent.canonicalUrl().toString(); + const QUrl url = mediaContent.canonicalUrl(); + QString mediaPath; + if (url.scheme() == QLatin1String("qrc")) { + const QString path = url.toString().mid(3); + mTempFile.reset(QTemporaryFile::createNativeFile(path)); + if (!mTempFile.isNull()) + mediaPath = QLatin1String("file://") + mTempFile->fileName(); + } else { + mediaPath = url.toString(); + } - if (!uri.isEmpty()) - mMediaPlayer->setDataSource(uri); + if (!mediaPath.isEmpty()) + mMediaPlayer->setDataSource(mediaPath); else setMediaStatus(QMediaPlayer::NoMedia); diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h index ef1d325e5..fadac3c19 100644 --- a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h +++ b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.h @@ -45,6 +45,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -114,6 +115,7 @@ private: QMediaPlayer::State mPendingState; qint64 mPendingPosition; bool mPendingSetMedia; + QScopedPointer mTempFile; void setState(QMediaPlayer::State state); void setMediaStatus(QMediaPlayer::MediaStatus status); -- cgit v1.2.3