diff options
author | Max Kellermann <max@musicpd.org> | 2021-03-10 17:47:14 +0100 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2021-03-10 17:48:49 +0100 |
commit | 5907656bbbeefbdba3c7a64e38ff98efe438e16e (patch) | |
tree | 05137bf6a0a8e934a0bdb56ad676c684d01620f9 /src/output | |
parent | 2ac2bd26f85d08c0b3156409e421aea5bf71e2f3 (diff) |
output/wasapi: stop the IAudioClient while paused
Instead of generating silence, do nothing, don't waste CPU time.
Diffstat (limited to 'src/output')
-rw-r--r-- | src/output/plugins/wasapi/WasapiOutputPlugin.cxx | 25 |
1 files 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(); |