From aed1103ce67031f1109e3782597f98bf5f156764 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 27 Oct 2019 02:51:48 +0100 Subject: [PATCH] [AFV] Ref T739, default device handling * renamed some device list functions * improved default device handling --- src/blackmisc/audio/audiodeviceinfo.cpp | 20 +++++++++ src/blackmisc/audio/audiodeviceinfo.h | 14 ++----- src/blackmisc/audio/audiodeviceinfolist.cpp | 45 +++++++++++++++------ src/blackmisc/audio/audiodeviceinfolist.h | 9 ++++- src/blacksound/audioutilities.cpp | 6 +-- 5 files changed, 66 insertions(+), 28 deletions(-) diff --git a/src/blackmisc/audio/audiodeviceinfo.cpp b/src/blackmisc/audio/audiodeviceinfo.cpp index a2d893391..b8f2cc137 100644 --- a/src/blackmisc/audio/audiodeviceinfo.cpp +++ b/src/blackmisc/audio/audiodeviceinfo.cpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace BlackMisc { @@ -27,6 +28,15 @@ namespace BlackMisc m_deviceName(name), m_hostName(QHostInfo::localHostName()) { } + bool CAudioDeviceInfo::isDefault() const + { + if (m_deviceName.isEmpty()) { return false; } + if (m_deviceName == "default") { return true; } + if (this->isInputDevice() && m_deviceName == QAudioDeviceInfo::defaultInputDevice().deviceName()) { return true; } + if (this->isOutputDevice() && m_deviceName == QAudioDeviceInfo::defaultOutputDevice().deviceName()) { return true; } + return false; + } + bool CAudioDeviceInfo::matchesNameTypeHostName(const CAudioDeviceInfo &device) const { return device.getType() == this->getType() && @@ -45,6 +55,16 @@ namespace BlackMisc return Unknown; } + CAudioDeviceInfo CAudioDeviceInfo::getDefaultOutputDevice() + { + return CAudioDeviceInfo(OutputDevice, QAudioDeviceInfo::defaultOutputDevice().deviceName()); + } + + CAudioDeviceInfo CAudioDeviceInfo::getDefaultInputDevice() + { + return CAudioDeviceInfo(InputDevice, QAudioDeviceInfo::defaultInputDevice().deviceName()); + } + QString CAudioDeviceInfo::convertToQString(bool i18n) const { Q_UNUSED(i18n) diff --git a/src/blackmisc/audio/audiodeviceinfo.h b/src/blackmisc/audio/audiodeviceinfo.h index b8028c657..936bdb539 100644 --- a/src/blackmisc/audio/audiodeviceinfo.h +++ b/src/blackmisc/audio/audiodeviceinfo.h @@ -62,10 +62,10 @@ namespace BlackMisc bool isOutputDevice() const { return this->getType() == OutputDevice; } //! Valid audio device object? - bool isValid() const { return !m_deviceName.isEmpty() && (m_deviceName != Unknown); } + bool isValid() const { return !m_deviceName.isEmpty() && (m_type != Unknown); } //! Is this a default device? - bool isDefault() const { return m_deviceName == "default"; } + bool isDefault() const; //! Mathcing name, type and machine bool matchesNameTypeHostName(const CAudioDeviceInfo &device) const; @@ -74,16 +74,10 @@ namespace BlackMisc static DeviceType fromQtMode(QAudio::Mode m); //! Default output device - static CAudioDeviceInfo getDefaultOutputDevice() - { - return CAudioDeviceInfo(OutputDevice, "default"); - } + static CAudioDeviceInfo getDefaultOutputDevice(); //! Default input device - static CAudioDeviceInfo getDefaultInputDevice() - { - return CAudioDeviceInfo(InputDevice, "default"); - } + static CAudioDeviceInfo getDefaultInputDevice(); //! \copydoc BlackMisc::Mixin::String::toQString QString convertToQString(bool i18n = false) const; diff --git a/src/blackmisc/audio/audiodeviceinfolist.cpp b/src/blackmisc/audio/audiodeviceinfolist.cpp index f14e0c10f..faa73b24c 100644 --- a/src/blackmisc/audio/audiodeviceinfolist.cpp +++ b/src/blackmisc/audio/audiodeviceinfolist.cpp @@ -178,6 +178,27 @@ namespace BlackMisc return i; } + CAudioDeviceInfoList CAudioDeviceInfoList::allInputDevicesPlusDefault() + { + CAudioDeviceInfoList i = allInputDevices(); + i.push_back(CAudioDeviceInfoList::defaultInputDevice()); + return i; + } + + CAudioDeviceInfoList CAudioDeviceInfoList::allOutputDevicesPlusDefault() + { + CAudioDeviceInfoList o = allOutputDevices(); + o.push_back(CAudioDeviceInfoList::defaultOutputDevice()); + return o; + } + + CAudioDeviceInfoList CAudioDeviceInfoList::allDevicesPlusDefault() + { + CAudioDeviceInfoList i = allInputDevicesPlusDefault(); + i.push_back(allOutputDevicesPlusDefault()); + return i; + } + QList CAudioDeviceInfoList::allQtInputDevices() { const QList devices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput); @@ -190,26 +211,24 @@ namespace BlackMisc return devices; } - QAudioDeviceInfo CAudioDeviceInfoList::defaultInputDevice() + QAudioDeviceInfo CAudioDeviceInfoList::defaultQtInputDevice() { return QAudioDeviceInfo::defaultInputDevice(); - - /** - const QList devices = allQtInputDevices(); - if (devices.isEmpty()) { return devices.front(); } - return QAudioDeviceInfo(); - **/ } - QAudioDeviceInfo CAudioDeviceInfoList::defaultOutputDevice() + QAudioDeviceInfo CAudioDeviceInfoList::defaultQtOutputDevice() { return QAudioDeviceInfo::defaultOutputDevice(); + } - /** - const QList devices = allQtOutputDevices(); - if (devices.isEmpty()) { return devices.front(); } - return QAudioDeviceInfo(); - **/ + CAudioDeviceInfo CAudioDeviceInfoList::defaultInputDevice() + { + return CAudioDeviceInfo(CAudioDeviceInfo::InputDevice, defaultQtInputDevice().deviceName()); + } + + CAudioDeviceInfo CAudioDeviceInfoList::defaultOutputDevice() + { + return CAudioDeviceInfo(CAudioDeviceInfo::OutputDevice, defaultQtOutputDevice().deviceName()); } } // namespace diff --git a/src/blackmisc/audio/audiodeviceinfolist.h b/src/blackmisc/audio/audiodeviceinfolist.h index 8c19cfe94..0f6931bbf 100644 --- a/src/blackmisc/audio/audiodeviceinfolist.h +++ b/src/blackmisc/audio/audiodeviceinfolist.h @@ -86,10 +86,15 @@ namespace BlackMisc static CAudioDeviceInfoList allInputDevices(); static CAudioDeviceInfoList allOutputDevices(); static CAudioDeviceInfoList allDevices(); + static CAudioDeviceInfoList allInputDevicesPlusDefault(); + static CAudioDeviceInfoList allOutputDevicesPlusDefault(); + static CAudioDeviceInfoList allDevicesPlusDefault(); static QList allQtInputDevices(); static QList allQtOutputDevices(); - static QAudioDeviceInfo defaultInputDevice(); - static QAudioDeviceInfo defaultOutputDevice(); + static QAudioDeviceInfo defaultQtInputDevice(); + static QAudioDeviceInfo defaultQtOutputDevice(); + static CAudioDeviceInfo defaultInputDevice(); + static CAudioDeviceInfo defaultOutputDevice(); //! @} }; } //namespace diff --git a/src/blacksound/audioutilities.cpp b/src/blacksound/audioutilities.cpp index a2edae2af..b8dc070c5 100644 --- a/src/blacksound/audioutilities.cpp +++ b/src/blacksound/audioutilities.cpp @@ -86,8 +86,8 @@ namespace BlackSound { if (device.isDefault() || !device.isValid()) { - if (device.getType() == CAudioDeviceInfo::InputDevice) { return CAudioDeviceInfoList::defaultInputDevice(); } - else { return CAudioDeviceInfoList::defaultOutputDevice(); } + if (device.getType() == CAudioDeviceInfo::InputDevice) { return CAudioDeviceInfoList::defaultQtInputDevice(); } + else { return CAudioDeviceInfoList::defaultQtOutputDevice(); } } const QList allQtDevices = @@ -157,7 +157,7 @@ namespace BlackSound QAudioDeviceInfo getHighestCompatibleOutputDevice(const CAudioDeviceInfo &device, QAudioFormat &format) { - if (device.isDefault()) { return CAudioDeviceInfoList::defaultOutputDevice(); } + if (device.isDefault()) { return CAudioDeviceInfoList::defaultQtOutputDevice(); } const QList allQtDevices = CAudioDeviceInfoList::allQtOutputDevices(); QList supportedDevices;