From 5907656bbbeefbdba3c7a64e38ff98efe438e16e Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 10 Mar 2021 17:47:14 +0100 Subject: [PATCH] output/wasapi: stop the IAudioClient while paused Instead of generating silence, do nothing, don't waste CPU time. --- .../plugins/wasapi/WasapiOutputPlugin.cxx | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/output/plugins/wasapi/WasapiOutputPlugin.cxx b/src/output/plugins/wasapi/WasapiOutputPlugin.cxx index 7092deb92..f393f8871 100644 --- a/src/output/plugins/wasapi/WasapiOutputPlugin.cxx +++ b/src/output/plugins/wasapi/WasapiOutputPlugin.cxx @@ -366,7 +366,12 @@ try { IAudioClient if we're paused */ continue; - break; + /* stop the IAudioClient while paused; it will + be restarted as soon as we're asked to + resume playback */ + Stop(client); + started = false; + continue; case Status::PLAY: break; @@ -400,18 +405,12 @@ try { } }; - if (current_state == Status::PLAY) { - const UINT32 write_size = write_in_frames * frame_size; - UINT32 new_data_size = 0; - new_data_size = spsc_buffer.pop(data, write_size); - std::fill_n(data + new_data_size, - write_size - new_data_size, 0); - InterruptWaiter(); - } else { - mode = AUDCLNT_BUFFERFLAGS_SILENT; - FormatDebug(wasapi_output_domain, - "Working thread paused"); - } + const UINT32 write_size = write_in_frames * frame_size; + UINT32 new_data_size = 0; + new_data_size = spsc_buffer.pop(data, write_size); + std::fill_n(data + new_data_size, + write_size - new_data_size, 0); + InterruptWaiter(); } } catch (...) { error.ptr = std::current_exception();