diff options
author | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2015-02-18 16:58:02 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2015-04-07 17:21:47 +0000 |
commit | 63cff37741dca71f3db45ee06bc5bb06488c51f4 (patch) | |
tree | 4feeb36d8f95a24b5dc5dc12c99f471f824de38b /src/plugins/android/src/wrappers | |
parent | 4d17db19f895ddaa778120c346d8a6a33a710194 (diff) |
QMediaPlayer: handle resource files in a cross-platform way.
It was the backend's responsibility to handle resource files in an
appropriate way. In practice, it was either not handled at all,
or implemented in an almost identical manner in every backend
that does handle it.
This is now dealt with in QMediaPlayer, always passing to the
backend something it will be able to play. If the backend has the
StreamPlayback capability, we pass a QFile from which it streams
the data. If it doesn't, we copy the resource to a temporary
file and pass its path to the backend.
Task-number: QTBUG-36175
Task-number: QTBUG-42263
Task-number: QTBUG-43839
Change-Id: I57b355c72692d02661baeaf74e66581ca0a0bd1d
Reviewed-by: Andrew Knight <qt@panimo.net>
Reviewed-by: Peng Wu <peng.wu@intopalo.com>
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Diffstat (limited to 'src/plugins/android/src/wrappers')
-rw-r--r-- | src/plugins/android/src/wrappers/jni/androidmediametadataretriever.cpp | 9 | ||||
-rw-r--r-- | src/plugins/android/src/wrappers/jni/androidmediametadataretriever.h | 2 |
2 files changed, 5 insertions, 6 deletions
diff --git a/src/plugins/android/src/wrappers/jni/androidmediametadataretriever.cpp b/src/plugins/android/src/wrappers/jni/androidmediametadataretriever.cpp index 9714654a2..56ac0e0ac 100644 --- a/src/plugins/android/src/wrappers/jni/androidmediametadataretriever.cpp +++ b/src/plugins/android/src/wrappers/jni/androidmediametadataretriever.cpp @@ -83,15 +83,14 @@ void AndroidMediaMetadataRetriever::release() m_metadataRetriever.callMethod<void>("release"); } -bool AndroidMediaMetadataRetriever::setDataSource(const QString &urlString) +bool AndroidMediaMetadataRetriever::setDataSource(const QUrl &url) { if (!m_metadataRetriever.isValid()) return false; QJNIEnvironmentPrivate env; - QUrl url(urlString); - if (url.isLocalFile()) { // also includes qrc files (copied to a temp file) + if (url.isLocalFile()) { // also includes qrc files (copied to a temp file by QMediaPlayer) QJNIObjectPrivate string = QJNIObjectPrivate::fromString(url.path()); QJNIObjectPrivate fileInputStream("java/io/FileInputStream", "(Ljava/lang/String;)V", @@ -153,7 +152,7 @@ bool AndroidMediaMetadataRetriever::setDataSource(const QString &urlString) return false; } else if (QtAndroidPrivate::androidSdkVersion() >= 14) { // On API levels >= 14, only setDataSource(String, Map<String, String>) accepts remote media - QJNIObjectPrivate string = QJNIObjectPrivate::fromString(urlString); + QJNIObjectPrivate string = QJNIObjectPrivate::fromString(url.toString(QUrl::FullyEncoded)); QJNIObjectPrivate hash("java/util/HashMap"); m_metadataRetriever.callMethod<void>("setDataSource", @@ -165,7 +164,7 @@ bool AndroidMediaMetadataRetriever::setDataSource(const QString &urlString) } else { // While on API levels < 14, only setDataSource(Context, Uri) is available and works for // remote media... - QJNIObjectPrivate string = QJNIObjectPrivate::fromString(urlString); + QJNIObjectPrivate string = QJNIObjectPrivate::fromString(url.toString(QUrl::FullyEncoded)); QJNIObjectPrivate uri = m_metadataRetriever.callStaticObjectMethod("android/net/Uri", "parse", "(Ljava/lang/String;)Landroid/net/Uri;", diff --git a/src/plugins/android/src/wrappers/jni/androidmediametadataretriever.h b/src/plugins/android/src/wrappers/jni/androidmediametadataretriever.h index 13cab7741..01a98490b 100644 --- a/src/plugins/android/src/wrappers/jni/androidmediametadataretriever.h +++ b/src/plugins/android/src/wrappers/jni/androidmediametadataretriever.h @@ -72,7 +72,7 @@ public: QString extractMetadata(MetadataKey key); void release(); - bool setDataSource(const QString &url); + bool setDataSource(const QUrl &url); private: QJNIObjectPrivate m_metadataRetriever; |