From 15c2b15ba1cbd91191a8d1087da414e3ebc407be Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 9 Dec 1999 09:21:56 +0000 Subject: [PATCH] Abramo Bagnara Thu, 09 Dec 1999 09:56:47 +0100 Rate plugin is now ready for optimizations (I've verified reading asm generated that loop unrolling is not fully satisfactory, I'll try another solution later today). --- src/pcm/plugin/rate.c | 50 +++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/src/pcm/plugin/rate.c b/src/pcm/plugin/rate.c index 85814d7e..ed38bf18 100644 --- a/src/pcm/plugin/rate.c +++ b/src/pcm/plugin/rate.c @@ -56,38 +56,42 @@ static void mix(struct rate_private_data *data, int voices, { unsigned int pos; signed int val; - signed short *S1, *S2; + signed short S1, S2; int voice; + signed short *src, *dst; + int size; - pos = data->pos; - S1 = data->last_S1; - S2 = data->last_S2; - if (pos >> SHIFT) { - src_ptr += ((pos >> SHIFT) - 1) * voices; pos &= MASK; - for (voice = 0; voice < voices; ++voice) { - S1[voice] = S2[voice]; - S2[voice] = src_ptr[voice]; - } - } - while (dst_size-- > 0) { + for (voice = 0; voice < voices; ++voice) { + pos = data->pos; + S1 = data->last_S1[voice]; + S2 = data->last_S2[voice]; + src = src_ptr + voice; + dst = dst_ptr + voice; + size = dst_size; if (pos >> SHIFT) { - src_ptr += (pos >> SHIFT) * voices; pos &= MASK; - for (voice = 0; voice < voices; ++voice) { - S1[voice] = S2[voice]; - S2[voice] = src_ptr[voice]; - } + src += ((pos >> SHIFT) - 1) * voices; + pos &= MASK; + S1 = S2; + S2 = *src; } - - for (voice = 0; voice < voices; ++voice) { - val = S1[voice] + ((S2[voice] - S1[voice]) * (signed int)pos) / BITS; + while (size-- > 0) { + if (pos >> SHIFT) { + src += (pos >> SHIFT) * voices; + pos &= MASK; + S1 = S2; + S2 = *src; + } + val = S1 + ((S2 - S1) * (signed int)pos) / BITS; if (val < -32768) val = -32768; else if (val > 32767) val = 32767; - *dst_ptr++ = val; + *dst = val; + dst += voices; + pos += data->pitch; } - - pos += data->pitch; + data->last_S1[voice] = S1; + data->last_S2[voice] = S2; } data->pos = pos; } -- 2.47.1