[AFV] Ref T739, encapsulate defaultXXDevice calls

* based on bug: https://bugreports.qt.io/plugins/servlet/mobile#issue/QTBUG-55631
* approach: avoid calls to default device (did not work out)
* kept encapsulation as it easier allows to text/apply workarounds
This commit is contained in:
Klaus Basan
2019-10-17 01:47:59 +02:00
parent 2dbe8464f4
commit 9959b12b9d
3 changed files with 50 additions and 13 deletions

View File

@@ -141,10 +141,8 @@ namespace BlackMisc
CAudioDeviceInfoList CAudioDeviceInfoList::allInputDevices()
{
const QList<QAudioDeviceInfo> inputDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
CAudioDeviceInfoList devices;
for (const QAudioDeviceInfo &inputDevice : inputDevices)
for (const QAudioDeviceInfo &inputDevice : allQtInputDevices())
{
const CAudioDeviceInfo d(CAudioDeviceInfo::InputDevice, inputDevice.deviceName());
if (! devices.contains(d)) { devices.push_back(d); }
@@ -154,10 +152,8 @@ namespace BlackMisc
CAudioDeviceInfoList CAudioDeviceInfoList::allOutputDevices()
{
const QList<QAudioDeviceInfo> outputDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
CAudioDeviceInfoList devices;
for (const QAudioDeviceInfo &outputDevice : outputDevices)
for (const QAudioDeviceInfo &outputDevice : allQtOutputDevices())
{
const CAudioDeviceInfo d(CAudioDeviceInfo::OutputDevice, outputDevice.deviceName());
if (! devices.contains(d)) { devices.push_back(d); }
@@ -172,5 +168,39 @@ namespace BlackMisc
return i;
}
QList<QAudioDeviceInfo> CAudioDeviceInfoList::allQtInputDevices()
{
const QList<QAudioDeviceInfo> devices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
return devices;
}
QList<QAudioDeviceInfo> CAudioDeviceInfoList::allQtOutputDevices()
{
const QList<QAudioDeviceInfo> devices = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
return devices;
}
QAudioDeviceInfo CAudioDeviceInfoList::defaultInputDevice()
{
return QAudioDeviceInfo::defaultInputDevice();
/**
const QList<QAudioDeviceInfo> devices = allQtInputDevices();
if (devices.isEmpty()) { return devices.front(); }
return QAudioDeviceInfo();
**/
}
QAudioDeviceInfo CAudioDeviceInfoList::defaultOutputDevice()
{
return QAudioDeviceInfo::defaultOutputDevice();
/**
const QList<QAudioDeviceInfo> devices = allQtOutputDevices();
if (devices.isEmpty()) { return devices.front(); }
return QAudioDeviceInfo();
**/
}
} // namespace
} // namespace

View File

@@ -12,12 +12,13 @@
#define BLACKMISC_AUDIO_AUDIODEVICELIST_H
#include "blackmisc/audio/audiodeviceinfo.h"
#include "blackmisc/blackmiscexport.h"
#include "blackmisc/collection.h"
#include "blackmisc/sequence.h"
#include "blackmisc/variant.h"
#include "blackmisc/blackmiscexport.h"
#include <QMetaType>
#include <QAudioDeviceInfo>
#include <QStringList>
namespace BlackMisc
@@ -82,6 +83,10 @@ namespace BlackMisc
static CAudioDeviceInfoList allInputDevices();
static CAudioDeviceInfoList allOutputDevices();
static CAudioDeviceInfoList allDevices();
static QList<QAudioDeviceInfo> allQtInputDevices();
static QList<QAudioDeviceInfo> allQtOutputDevices();
static QAudioDeviceInfo defaultInputDevice();
static QAudioDeviceInfo defaultOutputDevice();
//! @}
};
} //namespace

View File

@@ -7,6 +7,7 @@
*/
#include "audioutilities.h"
#include "blackmisc/audio/audiodeviceinfolist.h"
#include <QStringBuilder>
#include <QAudioInput>
#include <QAudioOutput>
@@ -85,12 +86,13 @@ namespace BlackSound
{
if (device.isDefault() || !device.isValid())
{
if (device.getType() == CAudioDeviceInfo::InputDevice) { return QAudioDeviceInfo::defaultInputDevice(); }
else { return QAudioDeviceInfo::defaultOutputDevice(); }
if (device.getType() == CAudioDeviceInfo::InputDevice) { return CAudioDeviceInfoList::defaultInputDevice(); }
else { return CAudioDeviceInfoList::defaultOutputDevice(); }
}
const QAudio::Mode mode = device.isInputDevice() ? QAudio::AudioInput : QAudio::AudioOutput;
const QList<QAudioDeviceInfo> allQtDevices = QAudioDeviceInfo::availableDevices(mode);
const QList<QAudioDeviceInfo> allQtDevices =
device.isInputDevice() ?
CAudioDeviceInfoList::allQtInputDevices() : CAudioDeviceInfoList::allQtOutputDevices();
// Find the one with lowest latency.
QList<QAudioDeviceInfo> supportedDevices;
@@ -155,8 +157,8 @@ namespace BlackSound
QAudioDeviceInfo getHighestCompatibleOutputDevice(const CAudioDeviceInfo &device, QAudioFormat &format)
{
if (device.isDefault()) { return QAudioDeviceInfo::defaultOutputDevice(); }
const QList<QAudioDeviceInfo> allQtDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
if (device.isDefault()) { return CAudioDeviceInfoList::defaultOutputDevice(); }
const QList<QAudioDeviceInfo> allQtDevices = CAudioDeviceInfoList::allQtOutputDevices();
QList<QAudioDeviceInfo> supportedDevices;
for (const QAudioDeviceInfo &d : allQtDevices)