From e2d4654e2010f9dbc2f5798319e6170a5da033f1 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 18 Aug 2022 14:36:30 +0200 Subject: [PATCH] filter/ReplayGain: invoke the MixerListener after volume change This ensures that Partition::OnMixerVolumeChanged() invokes MixerMemento::InvalidateHardwareVolume(), clearing the cached volume level. Closes https://github.com/MusicPlayerDaemon/MPD/issues/1526 --- NEWS | 2 ++ src/filter/plugins/ReplayGainFilterPlugin.cxx | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 23f2c41ff..4c36c9b5d 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,8 @@ ver 0.23.9 (not yet released) - cdio_paranoia: add options "mode" and "skip" * decoder - ffmpeg: support FFmpeg 5.1 +* filter + - replay gain: fix delayed volume display with handler=mixer * output - pipewire: set app icon * fix bogus volume levels with multiple partitions diff --git a/src/filter/plugins/ReplayGainFilterPlugin.cxx b/src/filter/plugins/ReplayGainFilterPlugin.cxx index 3c2f6b351..e89f4af69 100644 --- a/src/filter/plugins/ReplayGainFilterPlugin.cxx +++ b/src/filter/plugins/ReplayGainFilterPlugin.cxx @@ -23,6 +23,8 @@ #include "ReplayGainInfo.hxx" #include "ReplayGainConfig.hxx" #include "mixer/MixerControl.hxx" +#include "mixer/MixerInternal.hxx" +#include "mixer/Listener.hxx" #include "pcm/AudioFormat.hxx" #include "pcm/Volume.hxx" #include "util/ConstBuffer.hxx" @@ -171,9 +173,11 @@ ReplayGainFilter::Update() try { mixer_set_volume(mixer, _volume); - /* TODO: emit this idle event only for the - current partition */ - idle_add(IDLE_MIXER); + /* invoke the mixer's listener manually, just + in case the mixer implementation didn't do + that already (this depends on the + implementation) */ + mixer->listener.OnMixerVolumeChanged(*mixer, _volume); } catch (...) { LogError(std::current_exception(), "Failed to update hardware mixer");