Multimedia plugins now have a unique JSON metadata 'Keys' property.
authorYoann Lopes <yoann.lopes@digia.com>
Thu, 20 Jun 2013 15:40:11 +0000 (17:40 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Fri, 21 Jun 2013 10:07:00 +0000 (12:07 +0200)
They previously had the multimedia services they provided as keys. This
was a problem when several plugins were available on the same platform,
providing the same multimedia service, but with different features or
capabilities. Since they had the same key, only the first plugin in the
directory was loaded.

Nevertheless, it was actually working until commit 732dcfe7 in qtbase,
as all plugins were loaded even when sharing the same key.

The services a multimedia plugin provides are now declared in the
'Services' property. To preserve compatibility with third-party plugins,
if that new property doesn't exist it falls back to the 'Keys' property.

Task-number: QTBUG-31868
Task-number: QTBUG-31476
Change-Id: Ic3ba32eeef21b69b922bd3d4feb111101559d132
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
21 files changed:
src/multimedia/qmediapluginloader.cpp
src/plugins/android/mediaplayer/mediaplayer.json
src/plugins/audiocapture/audiocapture.json
src/plugins/avfoundation/camera/avfcamera.json
src/plugins/avfoundation/mediaplayer/avfmediaplayer.json
src/plugins/blackberry/blackberry_mediaservice.json
src/plugins/directshow/directshow.json
src/plugins/directshow/directshow_camera.json
src/plugins/gstreamer/audiodecoder/audiodecoder.json
src/plugins/gstreamer/camerabin/camerabin.json
src/plugins/gstreamer/gstreamer.json
src/plugins/gstreamer/mediacapture/mediacapture.json
src/plugins/gstreamer/mediacapture/mediacapturecamera.json
src/plugins/gstreamer/mediaplayer/mediaplayer.json
src/plugins/qt7/qt7.json
src/plugins/v4l/v4l.json
src/plugins/wmf/wmf.json
tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.json
tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.json
tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.json
tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.json

index e23e32a..1b4a13f 100644 (file)
@@ -127,7 +127,12 @@ void QMediaPluginLoader::loadMetadata()
             qDebug() << "QMediaPluginLoader: Inserted index " << i << " into metadata: " << jsonobj;
 #endif
 
-        QJsonArray arr = jsonobj.value(QStringLiteral("Keys")).toArray();
+        QJsonArray arr = jsonobj.value(QStringLiteral("Services")).toArray();
+        // Preserve compatibility with older plugins (made before 5.1) in which
+        // services were declared in the 'Keys' property
+        if (arr.isEmpty())
+            arr = jsonobj.value(QStringLiteral("Keys")).toArray();
+
         foreach (QJsonValue value, arr) {
             QString key = value.toString();
 
index c4a27ea..f371ebf 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.mediaplayer"]
+    "Keys": ["androidmultimedia"],
+    "Services": ["org.qt-project.qt.mediaplayer"]
 }
index d963a2e..4c7673d 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.audiosource"]
+    "Keys": ["audiocapture"],
+    "Services": ["org.qt-project.qt.audiosource"]
 }
index d3a58c7..e4310b6 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.camera"]
+    "Keys": ["avfoundationcamera"],
+    "Services": ["org.qt-project.qt.camera"]
 }
index c4a27ea..5626ede 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.mediaplayer"]
+    "Keys": ["avfoundationmediaplayer"],
+    "Services": ["org.qt-project.qt.mediaplayer"]
 }
index 54c1c9f..2a59cc7 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.camera", "org.qt-project.qt.mediaplayer"]
+    "Keys": ["blackberrymultimedia"],
+    "Services": ["org.qt-project.qt.camera", "org.qt-project.qt.mediaplayer"]
 }
index 54c1c9f..b1783b5 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.camera", "org.qt-project.qt.mediaplayer"]
+    "Keys": ["directshow"],
+    "Services": ["org.qt-project.qt.camera", "org.qt-project.qt.mediaplayer"]
 }
index d3a58c7..c37ce2c 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.camera"]
+    "Keys": ["directshow"],
+    "Services": ["org.qt-project.qt.camera"]
 }
index 3cc81dc..4314f2e 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.audiodecode"]
+    "Keys": ["gstreameraudiodecode"],
+    "Services": ["org.qt-project.qt.audiodecode"]
 }
index d3a58c7..3246b46 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.camera"]
+    "Keys": ["gstreamercamerabin"],
+    "Services": ["org.qt-project.qt.camera"]
 }
index 3f6ccda..0656cce 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.audiosource", "org.qt-project.qt.camera", "org.qt-project.qt.audiodecode"]
+    "Keys": ["gstreamer"],
+    "Services": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.audiosource", "org.qt-project.qt.camera", "org.qt-project.qt.audiodecode"]
 }
index d963a2e..68ca3f5 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.audiosource"]
+    "Keys": ["gstreamermediacapture"],
+    "Services": ["org.qt-project.qt.audiosource"]
 }
index b312383..af9f357 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.audiosource", "org.qt-project.qt.camera"]
+    "Keys": ["gstreamermediacapture"]
+    "Services": ["org.qt-project.qt.audiosource", "org.qt-project.qt.camera"]
 }
index c4a27ea..bd1a7e6 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.mediaplayer"]
+    "Keys": ["gstreamermediaplayer"],
+    "Services": ["org.qt-project.qt.mediaplayer"]
 }
index c4a27ea..b4cebad 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.mediaplayer"]
+    "Keys": ["qt7"],
+    "Services": ["org.qt-project.qt.mediaplayer"]
 }
index f87f329..467fd52 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.radio"]
+    "Keys": ["v4l"],
+    "Services": ["org.qt-project.qt.radio"]
 }
index b350cef..e707364 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.audiodecode"]
+    "Keys": ["windowsmediafoundation"],
+    "Services": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.audiodecode"]
 }
index ec05f3e..15d8ed5 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.radio"]
+    "Keys": ["mockserviceplugin2"],
+    "Services": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.radio"]
 }
index 58bbc4d..591a02e 100644 (file)
@@ -1,3 +1,4 @@
 {
-    "Keys": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.audiosource"]
+    "Keys": ["mockserviceplugin3"],
+    "Services": ["org.qt-project.qt.mediaplayer", "org.qt-project.qt.audiosource"]
 }