From ebd6eec7f6bf062f00757550cf709438256375bf Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 13 Dec 2023 19:10:58 +0100 Subject: [PATCH] win-wasapi: Make reroute target a weak reference --- plugins/win-wasapi/win-wasapi.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/plugins/win-wasapi/win-wasapi.cpp b/plugins/win-wasapi/win-wasapi.cpp index f3cbd03b9..367152d1c 100644 --- a/plugins/win-wasapi/win-wasapi.cpp +++ b/plugins/win-wasapi/win-wasapi.cpp @@ -161,7 +161,7 @@ class WASAPISource { ComPtr capture; obs_source_t *source; - obs_source_t *reroute_target = nullptr; + obs_weak_source_t *reroute_target = nullptr; wstring default_id; string device_id; string device_name; @@ -317,8 +317,8 @@ public: void SetRerouteTarget(obs_source_t *target) { - obs_source_release(reroute_target); - reroute_target = obs_source_get_ref(target); + obs_weak_source_release(reroute_target); + reroute_target = obs_source_get_weak_source(target); } }; @@ -515,7 +515,7 @@ void WASAPISource::Stop() else WaitForSingleObject(captureThread, INFINITE); - obs_source_release(reroute_target); + obs_weak_source_release(reroute_target); } WASAPISource::~WASAPISource() @@ -1148,8 +1148,17 @@ bool WASAPISource::ProcessCaptureData() sampleRate); } - obs_source_output_audio( - reroute_target ? reroute_target : source, &data); + if (reroute_target) { + obs_source_t *target = + obs_weak_source_get_source(reroute_target); + + if (target) { + obs_source_output_audio(target, &data); + obs_source_release(target); + } + } else { + obs_source_output_audio(source, &data); + } capture->ReleaseBuffer(frames); }