mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-31 22:25:33 -04:00
* 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:
parent
f2b11dbef8
commit
92f73a741f
2 changed files with 9 additions and 9 deletions
2
doc/todo
2
doc/todo
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue