* fix the trivial resampler

git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@300 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
Lennart Poettering 2004-11-21 15:22:59 +00:00
parent f2b11dbef8
commit 92f73a741f
2 changed files with 9 additions and 9 deletions

View file

@ -4,9 +4,9 @@
- make most buffer sizes dependant on the sample type - make most buffer sizes dependant on the sample type
- limit all resources - limit all resources
- commenting - commenting
- polish for starting polypaudio as root/system-wide instance
** later *** ** later ***
- polish for starting polypaudio as root/system-wide instance
- per-channel volume - per-channel volume
- improve module-oss-mmap latency measurement - improve module-oss-mmap latency measurement
- module-tunnel: improve latency calculation - module-tunnel: improve latency calculation

View file

@ -310,7 +310,7 @@ fail:
static void trivial_run(struct pa_resampler *r, const struct pa_memchunk *in, struct pa_memchunk *out) { static void trivial_run(struct pa_resampler *r, const struct pa_memchunk *in, struct pa_memchunk *out) {
size_t fz; size_t fz;
unsigned nsamples; unsigned nframes;
struct impl_trivial *i; struct impl_trivial *i;
assert(r && in && out && r->impl_data); assert(r && in && out && r->impl_data);
i = r->impl_data; i = r->impl_data;
@ -318,22 +318,22 @@ static void trivial_run(struct pa_resampler *r, const struct pa_memchunk *in, st
fz = r->i_fz; fz = r->i_fz;
assert(fz == r->o_fz); assert(fz == r->o_fz);
nsamples = in->length/fz; nframes = in->length/fz;
if (r->i_ss.rate == r->o_ss.rate) { if (r->i_ss.rate == r->o_ss.rate) {
/* In case there's no diefference in sample types, do nothing */ /* In case there's no diefference in sample types, do nothing */
*out = *in; *out = *in;
pa_memblock_ref(in->memblock); pa_memblock_ref(out->memblock);
i->o_counter += nsamples; i->o_counter += nframes;
} else { } else {
/* Do real resampling */ /* Do real resampling */
size_t l; size_t l;
unsigned o_index; unsigned o_index;
/* The length of the new memory block rounded up */ /* The length of the new memory block rounded up */
l = ((nsamples * r->o_ss.rate + r->i_ss.rate - 1) / r->i_ss.rate) * fz; l = ((nframes * r->o_ss.rate + r->i_ss.rate - 1) / r->i_ss.rate) * fz;
out->index = 0; out->index = 0;
out->memblock = pa_memblock_new(l, r->memblock_stat); out->memblock = pa_memblock_new(l, r->memblock_stat);
@ -345,13 +345,13 @@ static void trivial_run(struct pa_resampler *r, const struct pa_memchunk *in, st
assert(j >= i->i_counter); assert(j >= i->i_counter);
j = j - i->i_counter; j = j - i->i_counter;
if (j >= nsamples) if (j >= nframes)
break; break;
assert(o_index*fz < out->memblock->length); assert(o_index*fz < out->memblock->length);
memcpy((uint8_t*) out->memblock->data + fz*o_index, memcpy((uint8_t*) out->memblock->data + fz*o_index,
(uint8_t*) in->memblock->data + fz*j, fz); (uint8_t*) in->memblock->data + in->index + fz*j, fz);
} }
@ -362,7 +362,7 @@ static void trivial_run(struct pa_resampler *r, const struct pa_memchunk *in, st
while (i->o_counter >= r->o_ss.rate) while (i->o_counter >= r->o_ss.rate)
i->o_counter -= r->o_ss.rate; i->o_counter -= r->o_ss.rate;
i->i_counter += nsamples; i->i_counter += nframes;
while (i->i_counter >= r->i_ss.rate) while (i->i_counter >= r->i_ss.rate)
i->i_counter -= r->i_ss.rate; i->i_counter -= r->i_ss.rate;