From f76448fbaf13aeb51d9da6e0051469c02d7d72f3 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 13 Oct 2019 01:44:50 +0200 Subject: [PATCH] [AFV] Ref T730, changed to "startedAudio" signal, relayed from CAfvClient (and not like before emitted in context) Since start can be async (in another thread) it was possible the "old" signal was emitted too early --- src/blackcore/context/contextaudio.cpp | 14 ++++++------- src/blackcore/context/contextaudio.h | 4 ++-- .../audiodevicevolumesetupcomponent.cpp | 21 +++++++------------ .../audiodevicevolumesetupcomponent.h | 2 +- 4 files changed, 17 insertions(+), 24 deletions(-) diff --git a/src/blackcore/context/contextaudio.cpp b/src/blackcore/context/contextaudio.cpp index 40c364f02..fc523390a 100644 --- a/src/blackcore/context/contextaudio.cpp +++ b/src/blackcore/context/contextaudio.cpp @@ -46,11 +46,12 @@ namespace BlackCore Q_ASSERT_X(m_voiceClient->owner() == this, Q_FUNC_INFO, "Wrong owner"); Q_ASSERT_X(!CThreadUtils::isApplicationThread(m_voiceClient->thread()), Q_FUNC_INFO, "Must NOT be in main thread"); - connect(m_voiceClient, &CAfvClient::outputVolumePeakVU, this, &IContextAudio::outputVolumePeakVU); - connect(m_voiceClient, &CAfvClient::inputVolumePeakVU, this, &IContextAudio::inputVolumePeakVU); - connect(m_voiceClient, &CAfvClient::receivingCallsignsChanged, this, &IContextAudio::receivingCallsignsChanged); - connect(m_voiceClient, &CAfvClient::updatedFromOwnAircraftCockpit, this, &IContextAudio::updatedFromOwnAircraftCockpit); - connect(m_voiceClient, &CAfvClient::ptt, this, &IContextAudio::ptt); + connect(m_voiceClient, &CAfvClient::outputVolumePeakVU, this, &IContextAudio::outputVolumePeakVU, Qt::QueuedConnection); + connect(m_voiceClient, &CAfvClient::inputVolumePeakVU, this, &IContextAudio::inputVolumePeakVU, Qt::QueuedConnection); + connect(m_voiceClient, &CAfvClient::receivingCallsignsChanged, this, &IContextAudio::receivingCallsignsChanged, Qt::QueuedConnection); + connect(m_voiceClient, &CAfvClient::updatedFromOwnAircraftCockpit, this, &IContextAudio::updatedFromOwnAircraftCockpit, Qt::QueuedConnection); + connect(m_voiceClient, &CAfvClient::startedAudio, this, &IContextAudio::startedAudio, Qt::QueuedConnection); + connect(m_voiceClient, &CAfvClient::ptt, this, &IContextAudio::ptt, Qt::QueuedConnection); const CSettings as = m_audioSettings.getThreadLocal(); this->setVoiceOutputVolume(as.getOutVolume()); @@ -190,8 +191,7 @@ namespace BlackCore if (!inputDevice.getName().isEmpty()) { m_inputDeviceSetting.setAndSave(inputDevice.getName()); } if (!outputDevice.getName().isEmpty()) { m_outputDeviceSetting.setAndSave(outputDevice.getName()); } - m_voiceClient->restartWithNewDevices(inputDevice, outputDevice); - emit this->changedSelectedAudioDevices(this->getCurrentAudioDevices()); + m_voiceClient->startAudio(inputDevice, outputDevice); } void IContextAudio::setVoiceOutputVolume(int volume) diff --git a/src/blackcore/context/contextaudio.h b/src/blackcore/context/contextaudio.h index 424700c4d..38d3b06d7 100644 --- a/src/blackcore/context/contextaudio.h +++ b/src/blackcore/context/contextaudio.h @@ -166,8 +166,8 @@ namespace BlackCore //! Changed audio devices (e.g. device enabled/disable) void changedAudioDevices(const BlackMisc::Audio::CAudioDeviceInfoList &devices); - //! Changed slection of audio devices - void changedSelectedAudioDevices(const BlackMisc::Audio::CAudioDeviceInfoList &devices); + //! Audio started with + void startedAudio(const BlackMisc::Audio::CAudioDeviceInfo &input, const BlackMisc::Audio::CAudioDeviceInfo &output); //! VU levels @{ void inputVolumePeakVU(double value); diff --git a/src/blackgui/components/audiodevicevolumesetupcomponent.cpp b/src/blackgui/components/audiodevicevolumesetupcomponent.cpp index 4394cec70..dc8a1c693 100644 --- a/src/blackgui/components/audiodevicevolumesetupcomponent.cpp +++ b/src/blackgui/components/audiodevicevolumesetupcomponent.cpp @@ -109,7 +109,7 @@ namespace BlackGui // context c = connect(sGui->getIContextAudio(), &IContextAudio::changedAudioDevices, this, &CAudioDeviceVolumeSetupComponent::onAudioDevicesChanged, Qt::QueuedConnection); Q_ASSERT(c); - c = connect(sGui->getIContextAudio(), &IContextAudio::changedSelectedAudioDevices, this, &CAudioDeviceVolumeSetupComponent::onCurrentAudioDevicesChanged, Qt::QueuedConnection); + c = connect(sGui->getIContextAudio(), &IContextAudio::startedAudio, this, &CAudioDeviceVolumeSetupComponent::onAudioStarted, Qt::QueuedConnection); Q_ASSERT(c); c = connect(sGui->getIContextAudio(), &IContextAudio::outputVolumePeakVU, this, &CAudioDeviceVolumeSetupComponent::onOutputVU, Qt::QueuedConnection); @@ -193,6 +193,7 @@ namespace BlackGui void CAudioDeviceVolumeSetupComponent::setTransmitReceiveInUiFromVoiceClient() { + if (!this->hasAudio()) { return; } const bool com1Enabled = sGui->getIContextAudio()->isEnabledComUnit(CComSystem::Com1); const bool com2Enabled = sGui->getIContextAudio()->isEnabledComUnit(CComSystem::Com2); @@ -218,7 +219,8 @@ namespace BlackGui { if (!this->hasAudio()) { return; } this->onAudioDevicesChanged(sGui->getIContextAudio()->getAudioDevices()); - this->onCurrentAudioDevicesChanged(sGui->getIContextAudio()->getCurrentAudioDevices()); + const CAudioDeviceInfoList currentDevices = sGui->getIContextAudio()->getCurrentAudioDevices(); + this->onAudioStarted(currentDevices.getInputDevices().frontOrDefault(), currentDevices.getOutputDevices().frontOrDefault()); } bool CAudioDeviceVolumeSetupComponent::hasAudio() const @@ -306,19 +308,10 @@ namespace BlackGui sGui->getIContextAudio()->setCurrentAudioDevices(in, out); } - void CAudioDeviceVolumeSetupComponent::onCurrentAudioDevicesChanged(const CAudioDeviceInfoList &devices) + void CAudioDeviceVolumeSetupComponent::onAudioStarted(const CAudioDeviceInfo &input, const CAudioDeviceInfo &output) { - for (auto &device : devices) - { - if (device.getType() == CAudioDeviceInfo::InputDevice) - { - ui->cb_SetupAudioInputDevice->setCurrentText(device.toQString(true)); - } - else if (device.getType() == CAudioDeviceInfo::OutputDevice) - { - ui->cb_SetupAudioOutputDevice->setCurrentText(device.toQString(true)); - } - } + ui->cb_SetupAudioInputDevice->setCurrentText(input.toQString(true)); + ui->cb_SetupAudioOutputDevice->setCurrentText(output.toQString(true)); } void CAudioDeviceVolumeSetupComponent::onAudioDevicesChanged(const CAudioDeviceInfoList &devices) diff --git a/src/blackgui/components/audiodevicevolumesetupcomponent.h b/src/blackgui/components/audiodevicevolumesetupcomponent.h index d0e63cec8..68a2b17ca 100644 --- a/src/blackgui/components/audiodevicevolumesetupcomponent.h +++ b/src/blackgui/components/audiodevicevolumesetupcomponent.h @@ -71,7 +71,7 @@ namespace BlackGui void onAudioDeviceSelected(int index); //! Current audio devices changed - void onCurrentAudioDevicesChanged(const BlackMisc::Audio::CAudioDeviceInfoList &devices); + void onAudioStarted(const BlackMisc::Audio::CAudioDeviceInfo &input, const BlackMisc::Audio::CAudioDeviceInfo &output); //! Audio devices changed void onAudioDevicesChanged(const BlackMisc::Audio::CAudioDeviceInfoList &devices);