From e25db62a59e86a62990de43f554af3baecdd47ff Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Thu, 20 Jun 2013 17:40:11 +0200 Subject: [PATCH] Multimedia plugins now have a unique JSON metadata 'Keys' property. 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 Reviewed-by: Lars Knoll --- src/multimedia/qmediapluginloader.cpp | 7 ++++++- src/plugins/android/mediaplayer/mediaplayer.json | 3 ++- src/plugins/audiocapture/audiocapture.json | 3 ++- src/plugins/avfoundation/camera/avfcamera.json | 3 ++- src/plugins/avfoundation/mediaplayer/avfmediaplayer.json | 3 ++- src/plugins/blackberry/blackberry_mediaservice.json | 3 ++- src/plugins/directshow/directshow.json | 3 ++- src/plugins/directshow/directshow_camera.json | 3 ++- src/plugins/gstreamer/audiodecoder/audiodecoder.json | 3 ++- src/plugins/gstreamer/camerabin/camerabin.json | 3 ++- src/plugins/gstreamer/gstreamer.json | 3 ++- src/plugins/gstreamer/mediacapture/mediacapture.json | 3 ++- src/plugins/gstreamer/mediacapture/mediacapturecamera.json | 3 ++- src/plugins/gstreamer/mediaplayer/mediaplayer.json | 3 ++- src/plugins/qt7/qt7.json | 3 ++- src/plugins/v4l/v4l.json | 3 ++- src/plugins/wmf/wmf.json | 3 ++- .../mockserviceplugin1/mockserviceplugin1.json | 3 ++- .../mockserviceplugin2/mockserviceplugin2.json | 3 ++- .../mockserviceplugin3/mockserviceplugin3.json | 3 ++- .../mockserviceplugin4/mockserviceplugin4.json | 3 ++- 21 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/multimedia/qmediapluginloader.cpp b/src/multimedia/qmediapluginloader.cpp index e23e32a..1b4a13f 100644 --- a/src/multimedia/qmediapluginloader.cpp +++ b/src/multimedia/qmediapluginloader.cpp @@ -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(); diff --git a/src/plugins/android/mediaplayer/mediaplayer.json b/src/plugins/android/mediaplayer/mediaplayer.json index c4a27ea..f371ebf 100644 --- a/src/plugins/android/mediaplayer/mediaplayer.json +++ b/src/plugins/android/mediaplayer/mediaplayer.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.mediaplayer"] + "Keys": ["androidmultimedia"], + "Services": ["org.qt-project.qt.mediaplayer"] } diff --git a/src/plugins/audiocapture/audiocapture.json b/src/plugins/audiocapture/audiocapture.json index d963a2e..4c7673d 100644 --- a/src/plugins/audiocapture/audiocapture.json +++ b/src/plugins/audiocapture/audiocapture.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.audiosource"] + "Keys": ["audiocapture"], + "Services": ["org.qt-project.qt.audiosource"] } diff --git a/src/plugins/avfoundation/camera/avfcamera.json b/src/plugins/avfoundation/camera/avfcamera.json index d3a58c7..e4310b6 100644 --- a/src/plugins/avfoundation/camera/avfcamera.json +++ b/src/plugins/avfoundation/camera/avfcamera.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.camera"] + "Keys": ["avfoundationcamera"], + "Services": ["org.qt-project.qt.camera"] } diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayer.json b/src/plugins/avfoundation/mediaplayer/avfmediaplayer.json index c4a27ea..5626ede 100644 --- a/src/plugins/avfoundation/mediaplayer/avfmediaplayer.json +++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayer.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.mediaplayer"] + "Keys": ["avfoundationmediaplayer"], + "Services": ["org.qt-project.qt.mediaplayer"] } diff --git a/src/plugins/blackberry/blackberry_mediaservice.json b/src/plugins/blackberry/blackberry_mediaservice.json index 54c1c9f..2a59cc7 100644 --- a/src/plugins/blackberry/blackberry_mediaservice.json +++ b/src/plugins/blackberry/blackberry_mediaservice.json @@ -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"] } diff --git a/src/plugins/directshow/directshow.json b/src/plugins/directshow/directshow.json index 54c1c9f..b1783b5 100644 --- a/src/plugins/directshow/directshow.json +++ b/src/plugins/directshow/directshow.json @@ -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"] } diff --git a/src/plugins/directshow/directshow_camera.json b/src/plugins/directshow/directshow_camera.json index d3a58c7..c37ce2c 100644 --- a/src/plugins/directshow/directshow_camera.json +++ b/src/plugins/directshow/directshow_camera.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.camera"] + "Keys": ["directshow"], + "Services": ["org.qt-project.qt.camera"] } diff --git a/src/plugins/gstreamer/audiodecoder/audiodecoder.json b/src/plugins/gstreamer/audiodecoder/audiodecoder.json index 3cc81dc..4314f2e 100644 --- a/src/plugins/gstreamer/audiodecoder/audiodecoder.json +++ b/src/plugins/gstreamer/audiodecoder/audiodecoder.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.audiodecode"] + "Keys": ["gstreameraudiodecode"], + "Services": ["org.qt-project.qt.audiodecode"] } diff --git a/src/plugins/gstreamer/camerabin/camerabin.json b/src/plugins/gstreamer/camerabin/camerabin.json index d3a58c7..3246b46 100644 --- a/src/plugins/gstreamer/camerabin/camerabin.json +++ b/src/plugins/gstreamer/camerabin/camerabin.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.camera"] + "Keys": ["gstreamercamerabin"], + "Services": ["org.qt-project.qt.camera"] } diff --git a/src/plugins/gstreamer/gstreamer.json b/src/plugins/gstreamer/gstreamer.json index 3f6ccda..0656cce 100644 --- a/src/plugins/gstreamer/gstreamer.json +++ b/src/plugins/gstreamer/gstreamer.json @@ -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"] } diff --git a/src/plugins/gstreamer/mediacapture/mediacapture.json b/src/plugins/gstreamer/mediacapture/mediacapture.json index d963a2e..68ca3f5 100644 --- a/src/plugins/gstreamer/mediacapture/mediacapture.json +++ b/src/plugins/gstreamer/mediacapture/mediacapture.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.audiosource"] + "Keys": ["gstreamermediacapture"], + "Services": ["org.qt-project.qt.audiosource"] } diff --git a/src/plugins/gstreamer/mediacapture/mediacapturecamera.json b/src/plugins/gstreamer/mediacapture/mediacapturecamera.json index b312383..af9f357 100644 --- a/src/plugins/gstreamer/mediacapture/mediacapturecamera.json +++ b/src/plugins/gstreamer/mediacapture/mediacapturecamera.json @@ -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"] } diff --git a/src/plugins/gstreamer/mediaplayer/mediaplayer.json b/src/plugins/gstreamer/mediaplayer/mediaplayer.json index c4a27ea..bd1a7e6 100644 --- a/src/plugins/gstreamer/mediaplayer/mediaplayer.json +++ b/src/plugins/gstreamer/mediaplayer/mediaplayer.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.mediaplayer"] + "Keys": ["gstreamermediaplayer"], + "Services": ["org.qt-project.qt.mediaplayer"] } diff --git a/src/plugins/qt7/qt7.json b/src/plugins/qt7/qt7.json index c4a27ea..b4cebad 100644 --- a/src/plugins/qt7/qt7.json +++ b/src/plugins/qt7/qt7.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.mediaplayer"] + "Keys": ["qt7"], + "Services": ["org.qt-project.qt.mediaplayer"] } diff --git a/src/plugins/v4l/v4l.json b/src/plugins/v4l/v4l.json index f87f329..467fd52 100644 --- a/src/plugins/v4l/v4l.json +++ b/src/plugins/v4l/v4l.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.radio"] + "Keys": ["v4l"], + "Services": ["org.qt-project.qt.radio"] } diff --git a/src/plugins/wmf/wmf.json b/src/plugins/wmf/wmf.json index b350cef..e707364 100644 --- a/src/plugins/wmf/wmf.json +++ b/src/plugins/wmf/wmf.json @@ -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"] } diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.json b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.json index c4a27ea..69ff564 100644 --- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.json +++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.mediaplayer"] + "Keys": ["mockserviceplugin1"], + "Services": ["org.qt-project.qt.mediaplayer"] } diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.json b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.json index ec05f3e..15d8ed5 100644 --- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.json +++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.json @@ -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"] } diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.json b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.json index 58bbc4d..591a02e 100644 --- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.json +++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.json @@ -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"] } diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.json b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.json index c4a27ea..d8b8bd7 100644 --- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.json +++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.json @@ -1,3 +1,4 @@ { - "Keys": ["org.qt-project.qt.mediaplayer"] + "Keys": ["mockserviceplugin4"], + "Services": ["org.qt-project.qt.mediaplayer"] } -- 2.7.4