From: Stephan <40370954+stephan49@users.noreply.github.com> Date: Sat, 14 Dec 2024 21:25:11 -0500 Subject: PipeWire: stop log spam from RequestProcess events Fixes an issue where PipeWire error logs are continuously created whenever there is audio playing or if the "keep audio device alive" setting is enabled. This issue has appeared ever since PipeWire v1.2.4 introduced a change that forwards RequestProcess events. Thus it affects Kodi 21.2 on Trixie testing. Pipewire v1.2.4 change: https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/c6ae68b9326f235aa6ee11b62b8e6a9126bb2e22 Origin: upstream, https://github.com/xbmc/xbmc/pull/26441 Bug: https://github.com/xbmc/xbmc/issues/26122 --- xbmc/cores/AudioEngine/Sinks/pipewire/AESinkPipewire.cpp | 3 ++- xbmc/cores/AudioEngine/Sinks/pipewire/PipewireStream.cpp | 5 +++++ xbmc/cores/AudioEngine/Sinks/pipewire/PipewireStream.h | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/xbmc/cores/AudioEngine/Sinks/pipewire/AESinkPipewire.cpp b/xbmc/cores/AudioEngine/Sinks/pipewire/AESinkPipewire.cpp index d06b1ec579..31d515f63a 100644 --- a/xbmc/cores/AudioEngine/Sinks/pipewire/AESinkPipewire.cpp +++ b/xbmc/cores/AudioEngine/Sinks/pipewire/AESinkPipewire.cpp @@ -607,7 +607,8 @@ unsigned int CAESinkPipewire::AddPackets(uint8_t** data, unsigned int frames, un } while (true); - m_stream->TriggerProcess(); + if (m_stream->IsDriving()) + m_stream->TriggerProcess(); return frames; } diff --git a/xbmc/cores/AudioEngine/Sinks/pipewire/PipewireStream.cpp b/xbmc/cores/AudioEngine/Sinks/pipewire/PipewireStream.cpp index 63e4a320d4..dd7e952c0a 100644 --- a/xbmc/cores/AudioEngine/Sinks/pipewire/PipewireStream.cpp +++ b/xbmc/cores/AudioEngine/Sinks/pipewire/PipewireStream.cpp @@ -73,6 +73,11 @@ void CPipewireStream::QueueBuffer(pw_buffer* buffer) pw_stream_queue_buffer(m_stream.get(), buffer); } +bool CPipewireStream::IsDriving() const +{ + return pw_stream_is_driving(m_stream.get()); +} + bool CPipewireStream::TriggerProcess() const { int ret = pw_stream_trigger_process(m_stream.get()); diff --git a/xbmc/cores/AudioEngine/Sinks/pipewire/PipewireStream.h b/xbmc/cores/AudioEngine/Sinks/pipewire/PipewireStream.h index a44274ff7e..494fa948c3 100644 --- a/xbmc/cores/AudioEngine/Sinks/pipewire/PipewireStream.h +++ b/xbmc/cores/AudioEngine/Sinks/pipewire/PipewireStream.h @@ -43,6 +43,8 @@ public: pw_buffer* DequeueBuffer(); void QueueBuffer(pw_buffer* buffer); + bool IsDriving() const; + bool TriggerProcess() const; void Flush(bool drain);