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..d265646 100755 --- a/os/windows/AudioOutputWASAPI.cpp +++ b/os/windows/AudioOutputWASAPI.cpp @@ -216,8 +216,21 @@ void AudioOutputWASAPI::ActuallySetCurrentDevice(std::string deviceID){ if(deviceID=="default"){ isDefaultDevice=true; - res=enumerator->GetDefaultAudioEndpoint(eRender, eCommunications, &device); + + IMMDevice* tempDevice; + res = enumerator->GetDefaultAudioEndpoint(eRender, eCommunications, &tempDevice); CHECK_RES(res, "GetDefaultAudioEndpoint"); + + wchar_t* tempDevID; + res = tempDevice->GetId(&tempDevID); + CHECK_RES(res, "get default device id"); + + res = enumerator->GetDevice(tempDevID, &device); + CHECK_RES(res, "GetDeviceByID"); + + CoTaskMemFree(tempDevID); + SafeRelease(&tempDevice); + }else{ IMMDeviceCollection *deviceCollection = NULL; @@ -245,9 +258,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");