From c8dae95eff60419fdff88d55400b6cbaacac137d Mon Sep 17 00:00:00 2001 From: Max Kellermann <max.kellermann@gmail.com> Date: Sat, 9 Jul 2022 00:59:35 +0200 Subject: [PATCH] output/PipeWire: after Cancel(), refill buffer before resuming playback Deactivate the stream in Cancel(). This fixes stuttering after a manual song change by refilling the whole ring buffer before reactivating the stream. Closes https://github.com/MusicPlayerDaemon/MPD/issues/1354 Upstream-Status: Backport [https://github.com/MusicPlayerDaemon/MPD/commit/c8dae95eff60419fdff88d55400b6cbaacac137d] Signed-off-by: Scott Murray <scott.murray@konsulko.com> --- diff --git a/src/output/plugins/PipeWireOutputPlugin.cxx b/src/output/plugins/PipeWireOutputPlugin.cxx index 0f8550d41..16febe909 100644 --- a/src/output/plugins/PipeWireOutputPlugin.cxx +++ b/src/output/plugins/PipeWireOutputPlugin.cxx @@ -901,6 +901,15 @@ PipeWireOutput::Cancel() noexcept /* clear libpipewire's buffer */ pw_stream_flush(stream, false); drained = true; + + /* pause the PipeWire stream so libpipewire ceases invoking + the "process" callback (we have no data until our Play() + method gets called again); the stream will be resume by + Play() after the ring_buffer has been refilled */ + if (active) { + active = false; + pw_stream_set_active(stream, false); + } } bool -- 2.39.0