summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@digia.com>2014-05-20 15:52:54 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-06-05 11:42:16 +0200
commitd71aaca893a27a8a9a6712a59313300b87226a4f (patch)
treed25725984c752a193bcfae9c82ae71c22d2762ef
parenta3a66701722c780457b26d3d446b7bf19cf50804 (diff)
downloadqtmultimedia-d71aaca893a27a8a9a6712a59313300b87226a4f.tar.gz
Improve default audio plugin selection.
When no audio plugin is marked as default, use the first plugin available. Change-Id: Ide8db0fe55f43c4881c24505c1e2821b0fc176f6 Reviewed-by: Dyami Caliri <dyami@dragonframe.com> Reviewed-by: Christian Stromme <christian.stromme@digia.com>
-rw-r--r--src/multimedia/audio/qaudiodevicefactory.cpp27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/multimedia/audio/qaudiodevicefactory.cpp b/src/multimedia/audio/qaudiodevicefactory.cpp
index a36ab3932..50f4a7676 100644
--- a/src/multimedia/audio/qaudiodevicefactory.cpp
+++ b/src/multimedia/audio/qaudiodevicefactory.cpp
@@ -49,6 +49,11 @@
QT_BEGIN_NAMESPACE
+static QString defaultKey()
+{
+ return QStringLiteral("default");
+}
+
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, audioLoader,
(QAudioSystemFactoryInterface_iid, QLatin1String("audio"), Qt::CaseInsensitive))
@@ -137,13 +142,18 @@ QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode)
QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice()
{
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
- QAudioSystemFactoryInterface* plugin = qobject_cast<QAudioSystemFactoryInterface*>(audioLoader()->instance(QLatin1String("default")));
-
+ QAudioSystemFactoryInterface* plugin = qobject_cast<QAudioSystemFactoryInterface*>(audioLoader()->instance(defaultKey()));
if (plugin) {
QList<QByteArray> list = plugin->availableDevices(QAudio::AudioInput);
if (list.size() > 0)
- return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioInput);
+ return QAudioDeviceInfo(defaultKey(), list.at(0), QAudio::AudioInput);
}
+
+ // if no plugin is marked as default or if the default plugin doesn't have any input device,
+ // return the first input available from other plugins.
+ QList<QAudioDeviceInfo> inputDevices = availableDevices(QAudio::AudioInput);
+ if (!inputDevices.isEmpty())
+ return inputDevices.first();
#endif
return QAudioDeviceInfo();
@@ -152,13 +162,18 @@ QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice()
QAudioDeviceInfo QAudioDeviceFactory::defaultOutputDevice()
{
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
- QAudioSystemFactoryInterface* plugin = qobject_cast<QAudioSystemFactoryInterface*>(audioLoader()->instance(QLatin1String("default")));
-
+ QAudioSystemFactoryInterface* plugin = qobject_cast<QAudioSystemFactoryInterface*>(audioLoader()->instance(defaultKey()));
if (plugin) {
QList<QByteArray> list = plugin->availableDevices(QAudio::AudioOutput);
if (list.size() > 0)
- return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioOutput);
+ return QAudioDeviceInfo(defaultKey(), list.at(0), QAudio::AudioOutput);
}
+
+ // if no plugin is marked as default or if the default plugin doesn't have any output device,
+ // return the first output available from other plugins.
+ QList<QAudioDeviceInfo> outputDevices = availableDevices(QAudio::AudioOutput);
+ if (!outputDevices.isEmpty())
+ return outputDevices.first();
#endif
return QAudioDeviceInfo();