Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dosbox-staging/dosbox-staging.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkcgen <kcgen@users.noreply.github.com>2022-09-02 09:54:30 +0300
committerkcgen <kcgen@users.noreply.github.com>2022-09-02 09:54:30 +0300
commit3260acf105c2bc3cadd002ca164e21da5d4e0639 (patch)
treeccc49c9502241588e832c07ac668df6fc2dfe31b
parent7f5cc50dcf0c15e7cec9262ac7c1830b494027f5 (diff)
Clear the channel's resampler when disabling the channelkc/cdda-pop-1
-rw-r--r--include/mixer.h1
-rw-r--r--src/hardware/mixer.cpp16
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) {