From 668a300229401fc8381ad8381e975cb9d9d23ea9 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 9 Sep 2003 19:04:22 +0000 Subject: [PATCH] A try to fix the expand function from Takashi --- src/pcm/pcm_rate.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c index 8c71fb72..f2076c15 100644 --- a/src/pcm/pcm_rate.c +++ b/src/pcm/pcm_rate.c @@ -127,14 +127,15 @@ static snd_pcm_uframes_t snd_pcm_rate_expand(const snd_pcm_channel_area_t *dst_a src_frames1 = 0; dst_frames1 = 0; if (states->init) { - new_sample = initial_sample(src, getidx); + sample = initial_sample(src, getidx); src_frames1++; states->init = 0; + old_sample = new_sample = sample; + goto put_sample; } - while (dst_frames1 < dst_frames) { + while (dst_frames1 < dst_frames && src_frames1 < src_frames) { + pos += DIV; if (pos >= get_threshold) { - if (src_frames1 == src_frames) - break; old_sample = new_sample; pos -= get_threshold; goto *get; @@ -147,6 +148,7 @@ static snd_pcm_uframes_t snd_pcm_rate_expand(const snd_pcm_channel_area_t *dst_a src_frames1++; } sample = (((int64_t)old_sample * (int64_t)(get_threshold - pos)) + ((int64_t)new_sample * pos)) / get_threshold; + put_sample: goto *put; #define PUT16_END after_put #include "plugin_ops.h" @@ -154,7 +156,6 @@ static snd_pcm_uframes_t snd_pcm_rate_expand(const snd_pcm_channel_area_t *dst_a after_put: dst += dst_step; dst_frames1++; - pos += DIV; } states->old_sample = old_sample; states->new_sample = new_sample; -- 2.47.1