From 32c6ef3fd6ca5580e1693af97d427f859170dfc2 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 31 Oct 2019 00:48:19 +0100 Subject: [PATCH] [AFV, Ref T739 register device also based on process --- src/blackmisc/audio/audiodeviceinfo.cpp | 8 ++++++++ src/blackmisc/audio/audiodeviceinfo.h | 3 +++ src/blackmisc/audio/audiodeviceinfolist.cpp | 10 +++++----- src/blackmisc/audio/audiodeviceinfolist.h | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/blackmisc/audio/audiodeviceinfo.cpp b/src/blackmisc/audio/audiodeviceinfo.cpp index 2f098647d..81174558e 100644 --- a/src/blackmisc/audio/audiodeviceinfo.cpp +++ b/src/blackmisc/audio/audiodeviceinfo.cpp @@ -45,6 +45,14 @@ namespace BlackMisc stringCompare(device.getMachineName(), this->getMachineName(), Qt::CaseInsensitive); } + bool CAudioDeviceInfo::matchesNameTypeMachineProcess(const CAudioDeviceInfo &device) const + { + return device.getType() == this->getType() && + device.getIdentifier().getProcessId() == this->getIdentifier().getProcessId() && + stringCompare(device.getName(), this->getName(), Qt::CaseInsensitive) && + stringCompare(device.getMachineName(), this->getMachineName(), 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 ea9fe0d74..125f1d830 100644 --- a/src/blackmisc/audio/audiodeviceinfo.h +++ b/src/blackmisc/audio/audiodeviceinfo.h @@ -85,6 +85,9 @@ namespace BlackMisc //! Matching name, type and machine bool matchesNameTypeMachineName(const CAudioDeviceInfo &device) const; + //! Matching name, type and machine and process + bool matchesNameTypeMachineProcess(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 8550256f3..09b9062b2 100644 --- a/src/blackmisc/audio/audiodeviceinfolist.cpp +++ b/src/blackmisc/audio/audiodeviceinfolist.cpp @@ -74,11 +74,11 @@ namespace BlackMisc return devices; } - CAudioDeviceInfo CAudioDeviceInfoList::findRegisteredDevice(const CAudioDeviceInfo &device) const + CAudioDeviceInfo CAudioDeviceInfoList::findRegisteredDeviceOrDefault(const CAudioDeviceInfo &device) const { for (const CAudioDeviceInfo &d : *this) { - if (device.matchesNameTypeMachineName(d)) { return d; } + if (device.matchesNameTypeMachineProcess(d)) { return d; } } return {}; } @@ -101,7 +101,7 @@ namespace BlackMisc void CAudioDeviceInfoList::unRegisterDevice(const CAudioDeviceInfo &device) { if (!device.isValid()) { return; } - const CAudioDeviceInfo registeredDevice = this->findRegisteredDevice(device); + const CAudioDeviceInfo registeredDevice = this->findRegisteredDeviceOrDefault(device); if (registeredDevice.isValid()) { this->remove(registeredDevice); @@ -123,7 +123,7 @@ namespace BlackMisc bool CAudioDeviceInfoList::isRegisteredDevice(const CAudioDeviceInfo &device) const { - return this->findRegisteredDevice(device).isValid(); + return this->findRegisteredDeviceOrDefault(device).isValid(); } int CAudioDeviceInfoList::count(CAudioDeviceInfo::DeviceType type) const @@ -149,7 +149,7 @@ namespace BlackMisc if (compareDevices.size() != this->size()) { return false; } for (const CAudioDeviceInfo &d : *this) { - if (!compareDevices.findRegisteredDevice(d).isValid()) { return false; } + if (!compareDevices.findRegisteredDeviceOrDefault(d).isValid()) { return false; } } return true; } diff --git a/src/blackmisc/audio/audiodeviceinfolist.h b/src/blackmisc/audio/audiodeviceinfolist.h index 811f5e021..5e3218291 100644 --- a/src/blackmisc/audio/audiodeviceinfolist.h +++ b/src/blackmisc/audio/audiodeviceinfolist.h @@ -57,7 +57,7 @@ namespace BlackMisc CAudioDeviceInfoList findByHostName(const QString &hostName) const; //! Find registered device - CAudioDeviceInfo findRegisteredDevice(const CAudioDeviceInfo &device) const; + CAudioDeviceInfo findRegisteredDeviceOrDefault(const CAudioDeviceInfo &device) const; //! Register device void registerDevice(const CAudioDeviceInfo &device);