diff options
author | Christian Stromme <christian.stromme@theqtcompany.com> | 2016-04-19 14:53:24 +0200 |
---|---|---|
committer | Christian Stromme <christian.stromme@qt.io> | 2016-05-20 10:54:32 +0000 |
commit | 3c5bbb0dac7bed3199ddddc88c0175d5a2ac1036 (patch) | |
tree | 51b9987225bf224637b87c3dd20558a3cca95811 /src/plugins/pulseaudio | |
parent | 49461f9cffa5439e536a844ec3a0134c252141e6 (diff) |
Improve QAudioDeviceInfo::defaultDevice().
The previous implementation of QAudioDeviceInfo::defaultXDevice() would
always report the first available device as the "default" one, making
the order, in which devices were listed, a hidden requirement when
implementing audio plugins. To make it easier and more reliable to
retrieve the default device, all new plugins should implement the new
QAudioSystemPluginExtension interface as well as the QAudioSystemPlugin.
Devices will be chosen in the following order (first match wins):
default plugin -> default device
-> first available device
plugins -> default device
-> first available device
Task-number: QTBUG-51292
Change-Id: I8ace78858976fe7c60a2c4a117ef15c4e1bb177f
Reviewed-by: Yoann Lopes <yoann.lopes@qt.io>
Diffstat (limited to 'src/plugins/pulseaudio')
-rw-r--r-- | src/plugins/pulseaudio/qpulseaudioengine.cpp | 13 | ||||
-rw-r--r-- | src/plugins/pulseaudio/qpulseaudioengine.h | 3 | ||||
-rw-r--r-- | src/plugins/pulseaudio/qpulseaudioplugin.cpp | 5 | ||||
-rw-r--r-- | src/plugins/pulseaudio/qpulseaudioplugin.h | 7 |
4 files changed, 17 insertions, 11 deletions
diff --git a/src/plugins/pulseaudio/qpulseaudioengine.cpp b/src/plugins/pulseaudio/qpulseaudioengine.cpp index 19ba7472f..eb8e2bf9d 100644 --- a/src/plugins/pulseaudio/qpulseaudioengine.cpp +++ b/src/plugins/pulseaudio/qpulseaudioengine.cpp @@ -338,14 +338,6 @@ void QPulseAudioEngine::updateDevices() pa_operation_unref(operation); unlock(); - - // Swap the default output to index 0 - m_sinks.removeOne(m_defaultSink); - m_sinks.prepend(m_defaultSink); - - // Swap the default input to index 0 - m_sources.removeOne(m_defaultSource); - m_sources.prepend(m_defaultSource); } void QPulseAudioEngine::onContextFailed() @@ -369,4 +361,9 @@ QList<QByteArray> QPulseAudioEngine::availableDevices(QAudio::Mode mode) const return mode == QAudio::AudioOutput ? m_sinks : m_sources; } +QByteArray QPulseAudioEngine::defaultDevice(QAudio::Mode mode) const +{ + return (mode == QAudio::AudioOutput) ? m_defaultSink : m_defaultSource; +} + QT_END_NAMESPACE diff --git a/src/plugins/pulseaudio/qpulseaudioengine.h b/src/plugins/pulseaudio/qpulseaudioengine.h index 5eb96bf00..912df5242 100644 --- a/src/plugins/pulseaudio/qpulseaudioengine.h +++ b/src/plugins/pulseaudio/qpulseaudioengine.h @@ -53,7 +53,7 @@ #include <QtCore/qmap.h> #include <QtCore/qbytearray.h> -#include <qaudiosystemplugin.h> +#include <QtMultimedia/qaudiosystemplugin.h> #include <pulse/pulseaudio.h> #include "qpulsehelpers.h" #include <qaudioformat.h> @@ -91,6 +91,7 @@ public: } QList<QByteArray> availableDevices(QAudio::Mode mode) const; + QByteArray defaultDevice(QAudio::Mode mode) const; Q_SIGNALS: void contextFailed(); diff --git a/src/plugins/pulseaudio/qpulseaudioplugin.cpp b/src/plugins/pulseaudio/qpulseaudioplugin.cpp index 2b7b22089..6b3019279 100644 --- a/src/plugins/pulseaudio/qpulseaudioplugin.cpp +++ b/src/plugins/pulseaudio/qpulseaudioplugin.cpp @@ -53,6 +53,11 @@ QPulseAudioPlugin::QPulseAudioPlugin(QObject *parent) { } +QByteArray QPulseAudioPlugin::defaultDevice(QAudio::Mode mode) const +{ + return m_pulseEngine->defaultDevice(mode); +} + QList<QByteArray> QPulseAudioPlugin::availableDevices(QAudio::Mode mode) const { return m_pulseEngine->availableDevices(mode); diff --git a/src/plugins/pulseaudio/qpulseaudioplugin.h b/src/plugins/pulseaudio/qpulseaudioplugin.h index 4bad509e9..120d57df5 100644 --- a/src/plugins/pulseaudio/qpulseaudioplugin.h +++ b/src/plugins/pulseaudio/qpulseaudioplugin.h @@ -40,22 +40,25 @@ #ifndef QPULSEAUDIOPLUGIN_H #define QPULSEAUDIOPLUGIN_H -#include <qaudiosystemplugin.h> +#include <QtMultimedia/qaudiosystemplugin.h> +#include <QtMultimedia/private/qaudiosystempluginext_p.h> QT_BEGIN_NAMESPACE class QPulseAudioEngine; -class QPulseAudioPlugin : public QAudioSystemPlugin +class QPulseAudioPlugin : public QAudioSystemPlugin, public QAudioSystemPluginExtension { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.qt.audiosystemfactory/5.0" FILE "pulseaudio.json") + Q_INTERFACES(QAudioSystemPluginExtension) public: QPulseAudioPlugin(QObject *parent = 0); ~QPulseAudioPlugin() {} + QByteArray defaultDevice(QAudio::Mode mode) const; QList<QByteArray> availableDevices(QAudio::Mode mode) const; QAbstractAudioInput *createInput(const QByteArray &device); QAbstractAudioOutput *createOutput(const QByteArray &device); |