From d71aaca893a27a8a9a6712a59313300b87226a4f Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Tue, 20 May 2014 15:52:54 +0200 Subject: 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 Reviewed-by: Christian Stromme --- src/multimedia/audio/qaudiodevicefactory.cpp | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'src/multimedia') 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 QAudioDeviceFactory::availableDevices(QAudio::Mode mode) QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice() { #if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) - QAudioSystemFactoryInterface* plugin = qobject_cast(audioLoader()->instance(QLatin1String("default"))); - + QAudioSystemFactoryInterface* plugin = qobject_cast(audioLoader()->instance(defaultKey())); if (plugin) { QList 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 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(audioLoader()->instance(QLatin1String("default"))); - + QAudioSystemFactoryInterface* plugin = qobject_cast(audioLoader()->instance(defaultKey())); if (plugin) { QList 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 outputDevices = availableDevices(QAudio::AudioOutput); + if (!outputDevices.isEmpty()) + return outputDevices.first(); #endif return QAudioDeviceInfo(); -- cgit v1.2.3