From ac61d43720393803cb3f6bc5c74aea588e1ca68d Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 26 Oct 2015 16:29:07 +0100 Subject: [PATCH] output/Command: flush the mixer cache when enabling/disabling output Fixes mixer lag (http://bugs.musicpd.org/view.php?id=4425). --- NEWS | 2 ++ src/output/OutputCommand.cxx | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/NEWS b/NEWS index 7b5d6df07..ee3c318b3 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ ver 0.19.11 (not yet released) - ffmpeg: fix crash due to wrong avio_alloc_context() call * encoder - flac: fix crash with 32 bit playback +* mixer + - fix mixer lag after enabling/disabling output ver 0.19.10 (2015/06/21) * input diff --git a/src/output/OutputCommand.cxx b/src/output/OutputCommand.cxx index 6afb70cf1..e6b8a8e7f 100644 --- a/src/output/OutputCommand.cxx +++ b/src/output/OutputCommand.cxx @@ -30,6 +30,7 @@ #include "Internal.hxx" #include "PlayerControl.hxx" #include "mixer/MixerControl.hxx" +#include "mixer/Volume.hxx" #include "Idle.hxx" extern unsigned audio_output_state_version; @@ -47,6 +48,11 @@ audio_output_enable_index(MultipleOutputs &outputs, unsigned idx) ao.enabled = true; idle_add(IDLE_OUTPUT); + if (ao.mixer != nullptr) { + InvalidateHardwareVolume(); + idle_add(IDLE_MIXER); + } + ao.player_control->UpdateAudio(); ++audio_output_state_version; @@ -70,6 +76,7 @@ audio_output_disable_index(MultipleOutputs &outputs, unsigned idx) Mixer *mixer = ao.mixer; if (mixer != nullptr) { mixer_close(mixer); + InvalidateHardwareVolume(); idle_add(IDLE_MIXER); } @@ -94,6 +101,7 @@ audio_output_toggle_index(MultipleOutputs &outputs, unsigned idx) Mixer *mixer = ao.mixer; if (mixer != nullptr) { mixer_close(mixer); + InvalidateHardwareVolume(); idle_add(IDLE_MIXER); } }