diff --git a/libobs/audio-monitoring/win32/wasapi-output.c b/libobs/audio-monitoring/win32/wasapi-output.c index ec4259594..55c17d79e 100644 --- a/libobs/audio-monitoring/win32/wasapi-output.c +++ b/libobs/audio-monitoring/win32/wasapi-output.c @@ -30,7 +30,6 @@ ACTUALLY_DEFINE_GUID(IID_IAudioRenderClient, 0xF294ACFC, 0x3146, 0x4483, 0xA7, struct audio_monitor { obs_source_t *source; - IMMDevice *device; IAudioClient *client; IAudioRenderClient *render; @@ -222,7 +221,6 @@ static inline void audio_monitor_free(struct audio_monitor *monitor) if (monitor->client) monitor->client->lpVtbl->Stop(monitor->client); - safe_release(monitor->device); safe_release(monitor->client); safe_release(monitor->render); audio_resampler_destroy(monitor->resampler); @@ -290,14 +288,15 @@ static bool audio_monitor_init(struct audio_monitor *monitor, return false; } + IMMDevice *device = NULL; if (strcmp(id, "default") == 0) { - hr = immde->lpVtbl->GetDefaultAudioEndpoint( - immde, eRender, eConsole, &monitor->device); + hr = immde->lpVtbl->GetDefaultAudioEndpoint(immde, eRender, + eConsole, &device); } else { wchar_t w_id[512]; os_utf8_to_wcs(id, 0, w_id, 512); - hr = immde->lpVtbl->GetDevice(immde, w_id, &monitor->device); + hr = immde->lpVtbl->GetDevice(immde, w_id, &device); } if (FAILED(hr)) { @@ -308,9 +307,9 @@ static bool audio_monitor_init(struct audio_monitor *monitor, /* ------------------------------------------ * * Init client */ - hr = monitor->device->lpVtbl->Activate(monitor->device, - &IID_IAudioClient, CLSCTX_ALL, - NULL, (void **)&monitor->client); + hr = device->lpVtbl->Activate(device, &IID_IAudioClient, CLSCTX_ALL, + NULL, (void **)&monitor->client); + device->lpVtbl->Release(device); if (FAILED(hr)) { warn("%s: Failed to activate device: %08lX", __FUNCTION__, hr); goto fail;