summaryrefslogtreecommitdiffstats
path: root/src/multimedia/qmediapluginloader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/qmediapluginloader.cpp')
-rw-r--r--src/multimedia/qmediapluginloader.cpp34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/multimedia/qmediapluginloader.cpp b/src/multimedia/qmediapluginloader.cpp
index bd3c525f4..78ba3207f 100644
--- a/src/multimedia/qmediapluginloader.cpp
+++ b/src/multimedia/qmediapluginloader.cpp
@@ -68,11 +68,11 @@ QStringList QMediaPluginLoader::keys() const
QObject* QMediaPluginLoader::instance(QString const &key)
{
if (!m_metadata.contains(key))
- return 0;
+ return nullptr;
int idx = m_metadata.value(key).first().value(QStringLiteral("index")).toDouble();
if (idx < 0)
- return 0;
+ return nullptr;
return m_factoryLoader->instance(idx);
}
@@ -82,6 +82,7 @@ QList<QObject*> QMediaPluginLoader::instances(QString const &key)
if (!m_metadata.contains(key))
return QList<QObject*>();
+ QList<QString> keys;
QList<QObject *> objects;
const auto list = m_metadata.value(key);
for (const QJsonObject &jsonobj : list) {
@@ -91,10 +92,39 @@ QList<QObject*> QMediaPluginLoader::instances(QString const &key)
QObject *object = m_factoryLoader->instance(idx);
if (!objects.contains(object)) {
+ QJsonArray arr = jsonobj.value(QStringLiteral("Keys")).toArray();
+ keys.append(!arr.isEmpty() ? arr.at(0).toString() : QStringLiteral(""));
objects.append(object);
}
}
+ static const bool showDebug = qEnvironmentVariableIntValue("QT_DEBUG_PLUGINS");
+ static const QStringList preferredPlugins =
+ qEnvironmentVariable("QT_MULTIMEDIA_PREFERRED_PLUGINS").split(QLatin1Char(','), QString::SkipEmptyParts);
+ for (int i = preferredPlugins.size() - 1; i >= 0; --i) {
+ auto name = preferredPlugins[i];
+ bool found = false;
+ for (int j = 0; j < keys.size(); ++j) {
+ if (!keys[j].startsWith(name))
+ continue;
+
+ auto obj = objects[j];
+ objects.removeAt(j);
+ objects.prepend(obj);
+ auto k = keys[j];
+ keys.removeAt(j);
+ keys.prepend(k);
+ found = true;
+ break;
+ }
+
+ if (showDebug && !found)
+ qWarning() << "QMediaPluginLoader: pattern" << name << "did not match any loaded plugin";
+ }
+
+ if (showDebug)
+ qDebug() << "QMediaPluginLoader: loaded plugins for key" << key << ":" << keys;
+
return objects;
}