From 9e32af2240e51192ccfef9bed57d18814eec2db8 Mon Sep 17 00:00:00 2001 From: Sprite Date: Mon, 7 Sep 2020 06:27:51 +0800 Subject: [PATCH 1/2] Fix default device not respecting ducking rules bug and handle leak --- os/windows/AudioInputWASAPI.cpp | 4 ++-- os/windows/AudioOutputWASAPI.cpp | 19 ++++++++++++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/os/windows/AudioInputWASAPI.cpp b/os/windows/AudioInputWASAPI.cpp index a5ef97f..89dc280 100755 --- a/os/windows/AudioInputWASAPI.cpp +++ b/os/windows/AudioInputWASAPI.cpp @@ -248,9 +248,9 @@ void AudioInputWASAPI::ActuallySetCurrentDevice(std::string deviceID){ //device->AddRef(); break; } + SafeRelease(&device); } - if (deviceCollection) - SafeRelease(&deviceCollection); + SafeRelease(&deviceCollection); if (!device) { LOGW("Requested device not found, using default"); diff --git a/os/windows/AudioOutputWASAPI.cpp b/os/windows/AudioOutputWASAPI.cpp index 2dcf763..e8c04b2 100755 --- a/os/windows/AudioOutputWASAPI.cpp +++ b/os/windows/AudioOutputWASAPI.cpp @@ -216,8 +216,20 @@ void AudioOutputWASAPI::ActuallySetCurrentDevice(std::string deviceID){ if(deviceID=="default"){ isDefaultDevice=true; - res=enumerator->GetDefaultAudioEndpoint(eRender, eCommunications, &device); + IMMDevice* temp_device; + res = enumerator->GetDefaultAudioEndpoint(eRender, eCommunications, &temp_device); CHECK_RES(res, "GetDefaultAudioEndpoint"); + + wchar_t* temp_devID; + res = temp_device->GetId(&temp_devID); + CHECK_RES(res, "get default device id"); + + res = enumerator->GetDevice(temp_devID, &device); + CHECK_RES(res, "GetDeviceByID"); + + CoTaskMemFree(temp_devID); + SafeRelease(&temp_device); + }else{ IMMDeviceCollection *deviceCollection = NULL; @@ -245,9 +257,10 @@ void AudioOutputWASAPI::ActuallySetCurrentDevice(std::string deviceID){ this->device=device; break; } + SafeRelease(&device); } - if(deviceCollection) - SafeRelease(&deviceCollection); + SafeRelease(&deviceCollection); + if (!device) { LOGW("Requested device not found, using default"); ActuallySetCurrentDevice("default"); From dc27119ff50a7618e364a23f661cb8a0ceb5d910 Mon Sep 17 00:00:00 2001 From: Sprite Date: Fri, 11 Sep 2020 12:10:54 +0800 Subject: [PATCH 2/2] Fix naming style --- os/windows/AudioOutputWASAPI.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/os/windows/AudioOutputWASAPI.cpp b/os/windows/AudioOutputWASAPI.cpp index e8c04b2..d265646 100755 --- a/os/windows/AudioOutputWASAPI.cpp +++ b/os/windows/AudioOutputWASAPI.cpp @@ -216,19 +216,20 @@ void AudioOutputWASAPI::ActuallySetCurrentDevice(std::string deviceID){ if(deviceID=="default"){ isDefaultDevice=true; - IMMDevice* temp_device; - res = enumerator->GetDefaultAudioEndpoint(eRender, eCommunications, &temp_device); + + IMMDevice* tempDevice; + res = enumerator->GetDefaultAudioEndpoint(eRender, eCommunications, &tempDevice); CHECK_RES(res, "GetDefaultAudioEndpoint"); - wchar_t* temp_devID; - res = temp_device->GetId(&temp_devID); + wchar_t* tempDevID; + res = tempDevice->GetId(&tempDevID); CHECK_RES(res, "get default device id"); - res = enumerator->GetDevice(temp_devID, &device); + res = enumerator->GetDevice(tempDevID, &device); CHECK_RES(res, "GetDeviceByID"); - CoTaskMemFree(temp_devID); - SafeRelease(&temp_device); + CoTaskMemFree(tempDevID); + SafeRelease(&tempDevice); }else{ IMMDeviceCollection *deviceCollection = NULL;