From 5be9641ffe18c482294c99345306c382ba4cf750 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 27 Nov 2004 18:50:29 +0000 Subject: * really fix integer only resampler git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@316 fefdeb5f-60dc-0310-8127-8f9354f1896f --- polyp/resampler.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'polyp') diff --git a/polyp/resampler.c b/polyp/resampler.c index 68c0129a..28e49209 100644 --- a/polyp/resampler.c +++ b/polyp/resampler.c @@ -333,7 +333,7 @@ static void trivial_run(struct pa_resampler *r, const struct pa_memchunk *in, st unsigned o_index; /* The length of the new memory block rounded up */ - l = ((nframes * r->o_ss.rate + r->i_ss.rate - 1) / r->i_ss.rate) * fz; + l = ((((nframes+1) * r->o_ss.rate) / r->i_ss.rate) + 1) * fz; out->index = 0; out->memblock = pa_memblock_new(l, r->memblock_stat); @@ -342,12 +342,11 @@ static void trivial_run(struct pa_resampler *r, const struct pa_memchunk *in, st unsigned j; j = (i->o_counter * r->i_ss.rate / r->o_ss.rate); - j = j > i->i_counter ? j - i->i_counter : 0; if (j >= nframes) break; - + assert(o_index*fz < out->memblock->length); memcpy((uint8_t*) out->memblock->data + fz*o_index, @@ -357,15 +356,15 @@ static void trivial_run(struct pa_resampler *r, const struct pa_memchunk *in, st out->length = o_index*fz; } - - /* Normalize the output counter */ - while (i->o_counter >= r->o_ss.rate) - i->o_counter -= r->o_ss.rate; i->i_counter += nframes; - while (i->i_counter >= r->i_ss.rate) + /* Normalize counters */ + while (i->i_counter >= r->i_ss.rate) { i->i_counter -= r->i_ss.rate; + assert(i->o_counter >= r->o_ss.rate); + i->o_counter -= r->o_ss.rate; + } } static void trivial_free(struct pa_resampler *r) { -- cgit