From 541ce76fb633e96b64a4ede76df26edbf7eba405 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 13 Oct 2019 00:14:52 +0200 Subject: [PATCH] [AFV] Ref T730, check for same device --- src/blackcore/afv/clients/afvclient.cpp | 15 ++++++++++++++- src/blackcore/afv/clients/afvclient.h | 1 + src/blackmisc/audio/audiodeviceinfo.cpp | 8 ++++++++ src/blackmisc/audio/audiodeviceinfo.h | 3 +++ src/blackmisc/audio/audiodeviceinfolist.cpp | 12 +++++------- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/blackcore/afv/clients/afvclient.cpp b/src/blackcore/afv/clients/afvclient.cpp index ec8a42b09..8a954ea26 100644 --- a/src/blackcore/afv/clients/afvclient.cpp +++ b/src/blackcore/afv/clients/afvclient.cpp @@ -59,6 +59,8 @@ namespace BlackCore connect(m_connection, &CClientConnection::audioReceived, this, &CAfvClient::audioOutDataAvailable); connect(m_voiceServerPositionTimer, &QTimer::timeout, this, &CAfvClient::onPositionUpdateTimer); + m_updateTimer.stop(); // not used + // deferred init - use BlackMisc:: singleShot to call in correct thread, "myself" NOT needed BlackMisc::singleShot(1000, this, [ = ] { @@ -264,7 +266,6 @@ namespace BlackCore m_connection->setReceiveAudio(false); // stop input/output - m_updateTimer.stop(); m_input->stop(); m_output->stop(); CLogMessage(this).info(u"Client stopped"); @@ -910,6 +911,18 @@ namespace BlackCore return nullDevice; } + bool CAfvClient::usesSameDevices(const CAudioDeviceInfo &inputDevice, const CAudioDeviceInfo &outputDevice) + { + QMutexLocker lock(&m_mutex); + if (!m_output || !m_input) { return false; } + const CAudioDeviceInfo i = m_input->device(); + const CAudioDeviceInfo o = m_output->device(); + lock.unlock(); + + return i.matchesNameTypeHostName(inputDevice) && + o.matchesNameTypeHostName(outputDevice); + } + CAfvClient::ConnectionStatus CAfvClient::getConnectionStatus() const { return m_connection->isConnected() ? Connected : Disconnected; diff --git a/src/blackcore/afv/clients/afvclient.h b/src/blackcore/afv/clients/afvclient.h index c7f06f4a5..9a5c99fdb 100644 --- a/src/blackcore/afv/clients/afvclient.h +++ b/src/blackcore/afv/clients/afvclient.h @@ -209,6 +209,7 @@ namespace BlackCore //! @{ const BlackMisc::Audio::CAudioDeviceInfo &getInputDevice() const; const BlackMisc::Audio::CAudioDeviceInfo &getOutputDevice() const; + bool usesSameDevices(const BlackMisc::Audio::CAudioDeviceInfo &inputDevice, const BlackMisc::Audio::CAudioDeviceInfo &outputDevice); //! @} //! Callsigns currently received diff --git a/src/blackmisc/audio/audiodeviceinfo.cpp b/src/blackmisc/audio/audiodeviceinfo.cpp index 184478b18..a2d893391 100644 --- a/src/blackmisc/audio/audiodeviceinfo.cpp +++ b/src/blackmisc/audio/audiodeviceinfo.cpp @@ -7,6 +7,7 @@ */ #include "blackmisc/audio/audiodeviceinfo.h" +#include "blackmisc/stringutils.h" #include #include @@ -26,6 +27,13 @@ namespace BlackMisc m_deviceName(name), m_hostName(QHostInfo::localHostName()) { } + bool CAudioDeviceInfo::matchesNameTypeHostName(const CAudioDeviceInfo &device) const + { + return device.getType() == this->getType() && + stringCompare(device.getName(), this->getName(), Qt::CaseInsensitive) && + stringCompare(device.getHostName(), this->getHostName(), Qt::CaseInsensitive); + } + CAudioDeviceInfo::DeviceType CAudioDeviceInfo::fromQtMode(QAudio::Mode m) { switch (m) diff --git a/src/blackmisc/audio/audiodeviceinfo.h b/src/blackmisc/audio/audiodeviceinfo.h index dda18be38..b8028c657 100644 --- a/src/blackmisc/audio/audiodeviceinfo.h +++ b/src/blackmisc/audio/audiodeviceinfo.h @@ -67,6 +67,9 @@ namespace BlackMisc //! Is this a default device? bool isDefault() const { return m_deviceName == "default"; } + //! Mathcing name, type and machine + bool matchesNameTypeHostName(const CAudioDeviceInfo &device) const; + //! Convert the Qt type static DeviceType fromQtMode(QAudio::Mode m); diff --git a/src/blackmisc/audio/audiodeviceinfolist.cpp b/src/blackmisc/audio/audiodeviceinfolist.cpp index ce70faa05..704e72f87 100644 --- a/src/blackmisc/audio/audiodeviceinfolist.cpp +++ b/src/blackmisc/audio/audiodeviceinfolist.cpp @@ -76,13 +76,11 @@ namespace BlackMisc CAudioDeviceInfo CAudioDeviceInfoList::findRegisteredDevice(const CAudioDeviceInfo &device) const { - CAudioDeviceInfoList devices = device.isInputDevice() ? this->getInputDevices() : this->getOutputDevices(); - if (devices.isEmpty()) { return {}; } - - devices = devices.findByHostName(device.getHostName()); - if (devices.isEmpty()) { return {}; } - - return devices.findByName(device.getName()); + for (const CAudioDeviceInfo &d : *this) + { + if (device.matchesNameTypeHostName(d)) { return d; } + } + return {}; } void CAudioDeviceInfoList::registerDevice(const CAudioDeviceInfo &device)