From 24ebc2ce7fba1477f5da4f961146b0d2c27e5f11 Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Wed, 12 Sep 2018 17:12:55 +0200 Subject: [PATCH] Set the actually opened audio device from vatlib In the past, the optional arguments currentInput and currentOutput were not used. Therefore we never knew which device was actually opened by vatlib. This caused the Audio UI to be completely unsychronized from the reality when loading swiftgui. ref T337 --- src/blackcore/audiodevice.h | 6 ------ src/blackcore/vatsim/audiodevicevatlib.cpp | 22 ++++++--------------- src/blackcore/vatsim/audiodevicevatlib.h | 6 ------ src/blackmisc/audio/audiodeviceinfolist.cpp | 5 +++++ src/blackmisc/audio/audiodeviceinfolist.h | 3 +++ 5 files changed, 14 insertions(+), 28 deletions(-) diff --git a/src/blackcore/audiodevice.h b/src/blackcore/audiodevice.h index 2a9ded0b0..e864630d5 100644 --- a/src/blackcore/audiodevice.h +++ b/src/blackcore/audiodevice.h @@ -37,9 +37,6 @@ namespace BlackCore //! Get available input devices virtual const BlackMisc::Audio::CAudioDeviceInfoList &getInputDevices() const = 0; - //! Default input device - virtual const BlackMisc::Audio::CAudioDeviceInfo &getDefaultInputDevice() const = 0; - //! Current input device virtual const BlackMisc::Audio::CAudioDeviceInfo &getCurrentInputDevice() const = 0; @@ -63,9 +60,6 @@ namespace BlackCore //! Get available output devices virtual const BlackMisc::Audio::CAudioDeviceInfoList &getOutputDevices() const = 0; - //! Default output device - virtual const BlackMisc::Audio::CAudioDeviceInfo &getDefaultOutputDevice() const = 0; - //! Current output device virtual const BlackMisc::Audio::CAudioDeviceInfo &getCurrentOutputDevice() const = 0; diff --git a/src/blackcore/vatsim/audiodevicevatlib.cpp b/src/blackcore/vatsim/audiodevicevatlib.cpp index 00088f20b..052cb1fbf 100644 --- a/src/blackcore/vatsim/audiodevicevatlib.cpp +++ b/src/blackcore/vatsim/audiodevicevatlib.cpp @@ -39,8 +39,9 @@ namespace BlackCore : IAudioInputDevice(parent) { m_inputCodec.reset(Vat_CreateLocalInputCodec(audioService, vatCodecLegacy)); - Vat_GetInputDeviceInfo(m_inputCodec.data(), onInputHardwareDeviceReceived, this, nullptr); - m_currentDevice = getDefaultInputDevice(); + int currentDeviceIndex; + Vat_GetInputDeviceInfo(m_inputCodec.data(), onInputHardwareDeviceReceived, this, ¤tDeviceIndex); + m_currentDevice = m_devices.findByDeviceIndex(currentDeviceIndex); } const CAudioDeviceInfoList &CAudioInputDeviceVatlib::getInputDevices() const @@ -48,12 +49,6 @@ namespace BlackCore return m_devices; } - const CAudioDeviceInfo &CAudioInputDeviceVatlib::getDefaultInputDevice() const - { - static CAudioDeviceInfo info(CAudioDeviceInfo::InputDevice, CAudioDeviceInfo::defaultDeviceIndex(), "default"); - return info; - } - const CAudioDeviceInfo &CAudioInputDeviceVatlib::getCurrentInputDevice() const { return m_currentDevice; @@ -85,8 +80,9 @@ namespace BlackCore : IAudioOutputDevice(parent) { m_outputCodec.reset(Vat_CreateLocalOutputCodec(audioService, vatCodecLegacy)); - Vat_GetOutputDeviceInfo(m_outputCodec.data(), onOutputHardwareDeviceReceived, this, nullptr); - m_currentDevice = getDefaultOutputDevice(); + int currentDeviceIndex; + Vat_GetOutputDeviceInfo(m_outputCodec.data(), onOutputHardwareDeviceReceived, this, ¤tDeviceIndex); + m_currentDevice = m_devices.findByDeviceIndex(currentDeviceIndex); } const CAudioDeviceInfoList &CAudioOutputDeviceVatlib::getOutputDevices() const @@ -94,12 +90,6 @@ namespace BlackCore return m_devices; } - const CAudioDeviceInfo &CAudioOutputDeviceVatlib::getDefaultOutputDevice() const - { - static CAudioDeviceInfo info(CAudioDeviceInfo::OutputDevice, CAudioDeviceInfo::defaultDeviceIndex(), "default"); - return info; - } - const CAudioDeviceInfo &CAudioOutputDeviceVatlib::getCurrentOutputDevice() const { return m_currentDevice; diff --git a/src/blackcore/vatsim/audiodevicevatlib.h b/src/blackcore/vatsim/audiodevicevatlib.h index cb32159b8..f8ca154bf 100644 --- a/src/blackcore/vatsim/audiodevicevatlib.h +++ b/src/blackcore/vatsim/audiodevicevatlib.h @@ -41,9 +41,6 @@ namespace BlackCore //! \copydoc IAudioInputDevice::getInputDevices virtual const BlackMisc::Audio::CAudioDeviceInfoList &getInputDevices() const override; - //! \copydoc IAudioInputDevice::getDefaultInputDevice - virtual const BlackMisc::Audio::CAudioDeviceInfo &getDefaultInputDevice() const override; - //! \copydoc IAudioInputDevice::getCurrentInputDevice virtual const BlackMisc::Audio::CAudioDeviceInfo &getCurrentInputDevice() const override; @@ -87,9 +84,6 @@ namespace BlackCore //! \copydoc IAudioOutputDevice::getOutputDevices virtual const BlackMisc::Audio::CAudioDeviceInfoList &getOutputDevices() const override; - //! \copydoc IAudioOutputDevice::getDefaultOutputDevice - virtual const BlackMisc::Audio::CAudioDeviceInfo &getDefaultOutputDevice() const override; - //! \copydoc IAudioOutputDevice::getCurrentOutputDevice virtual const BlackMisc::Audio::CAudioDeviceInfo &getCurrentOutputDevice() const override; diff --git a/src/blackmisc/audio/audiodeviceinfolist.cpp b/src/blackmisc/audio/audiodeviceinfolist.cpp index b683b8e41..107cc615e 100644 --- a/src/blackmisc/audio/audiodeviceinfolist.cpp +++ b/src/blackmisc/audio/audiodeviceinfolist.cpp @@ -36,6 +36,11 @@ namespace BlackMisc return this->findBy(&CAudioDeviceInfo::getType, CAudioDeviceInfo::InputDevice); } + CAudioDeviceInfo CAudioDeviceInfoList::findByDeviceIndex(int deviceIndex) + { + return this->findBy(&CAudioDeviceInfo::getIndex, deviceIndex).frontOrDefault(); + } + int CAudioDeviceInfoList::count(CAudioDeviceInfo::DeviceType type) const { return std::count_if(this->begin(), this->end(), [type](const CAudioDeviceInfo &device) diff --git a/src/blackmisc/audio/audiodeviceinfolist.h b/src/blackmisc/audio/audiodeviceinfolist.h index 349902ae5..cea5b0b9b 100644 --- a/src/blackmisc/audio/audiodeviceinfolist.h +++ b/src/blackmisc/audio/audiodeviceinfolist.h @@ -44,6 +44,9 @@ namespace BlackMisc //! Get output devices in that list CAudioDeviceInfoList getInputDevices() const; + //! Find device by its index + CAudioDeviceInfo findByDeviceIndex(int deviceIndex); + //! Count (as of type) int count(CAudioDeviceInfo::DeviceType type) const; };