diff options
author | kcgen <kcgen@users.noreply.github.com> | 2022-09-02 09:54:30 +0300 |
---|---|---|
committer | kcgen <kcgen@users.noreply.github.com> | 2022-09-02 09:54:30 +0300 |
commit | 3260acf105c2bc3cadd002ca164e21da5d4e0639 (patch) | |
tree | ccc49c9502241588e832c07ac668df6fc2dfe31b | |
parent | 7f5cc50dcf0c15e7cec9262ac7c1830b494027f5 (diff) |
Clear the channel's resampler when disabling the channelkc/cdda-pop-1
-rw-r--r-- | include/mixer.h | 1 | ||||
-rw-r--r-- | src/hardware/mixer.cpp | 16 |
2 files changed, 17 insertions, 0 deletions
diff --git a/include/mixer.h b/include/mixer.h index 106ffde1b..a17c376b9 100644 --- a/include/mixer.h +++ b/include/mixer.h @@ -242,6 +242,7 @@ private: std::vector<float> &out); void ConfigureResampler(); + void ClearResampler(); void UpdateZOHUpsamplerState(); AudioFrame ApplyCrossfeed(const AudioFrame &frame) const; diff --git a/src/hardware/mixer.cpp b/src/hardware/mixer.cpp index 3317c22b0..535896a37 100644 --- a/src/hardware/mixer.cpp +++ b/src/hardware/mixer.cpp @@ -621,6 +621,10 @@ void MixerChannel::Enable(const bool should_enable) prev_frame = {0.0f, 0.0f}; next_frame = {0.0f, 0.0f}; + + if (do_resampler) { + ClearResampler(); + } } is_enabled = should_enable; @@ -655,6 +659,18 @@ void MixerChannel::ConfigureResampler() // out_rate); } +// Clear the resampler and prime its input queue with zeros +void MixerChannel::ClearResampler() +{ + assert(resampler.state); + speex_resampler_reset_mem(resampler.state); + speex_resampler_skip_zeros(resampler.state); + + // DEBUG_LOG_MSG("%s: Resampler cleared and primed %d-frame input queue", + // name.c_str(), + // speex_resampler_get_input_latency(resampler.state)); +} + void MixerChannel::SetSampleRate(const int rate) { if (rate) { |