summaryrefslogtreecommitdiff
path: root/src/output
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2021-03-10 17:47:14 +0100
committerMax Kellermann <max@musicpd.org>2021-03-10 17:48:49 +0100
commit5907656bbbeefbdba3c7a64e38ff98efe438e16e (patch)
tree05137bf6a0a8e934a0bdb56ad676c684d01620f9 /src/output
parent2ac2bd26f85d08c0b3156409e421aea5bf71e2f3 (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.cxx25
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();