mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-05 13:29:57 -05:00
resamplers: Optimize trivial resampler
This improves the performance of a typical s16 2ch resampling by 88%.
This commit is contained in:
parent
61890ae20d
commit
8539fe9765
1 changed files with 11 additions and 1 deletions
|
|
@ -1376,6 +1376,7 @@ static void trivial_resample(pa_resampler *r, const pa_memchunk *input, unsigned
|
||||||
pa_assert(input);
|
pa_assert(input);
|
||||||
pa_assert(output);
|
pa_assert(output);
|
||||||
pa_assert(out_n_frames);
|
pa_assert(out_n_frames);
|
||||||
|
pa_assert(r->i_ss.channels == r->o_ss.channels);
|
||||||
|
|
||||||
fz = r->w_sz * r->o_ss.channels;
|
fz = r->w_sz * r->o_ss.channels;
|
||||||
|
|
||||||
|
|
@ -1391,8 +1392,17 @@ static void trivial_resample(pa_resampler *r, const pa_memchunk *input, unsigned
|
||||||
|
|
||||||
pa_assert_fp(o_index * fz < pa_memblock_get_length(output->memblock));
|
pa_assert_fp(o_index * fz < pa_memblock_get_length(output->memblock));
|
||||||
|
|
||||||
|
/* Directly assign some common sample sizes, use memcpy as fallback */
|
||||||
|
if (r->w_sz == 2) {
|
||||||
|
for (unsigned c = 0; c < r->o_ss.channels; c++)
|
||||||
|
((uint16_t *) dst)[o_index+c] = ((uint16_t *) src)[i_index+c];
|
||||||
|
} else if (r->w_sz == 4) {
|
||||||
|
for (unsigned c = 0; c < r->o_ss.channels; c++)
|
||||||
|
((uint32_t *) dst)[o_index+c] = ((uint32_t *) src)[i_index+c];
|
||||||
|
} else {
|
||||||
memcpy((uint8_t *) dst + fz * o_index, (uint8_t *) src + fz * i_index, (int) fz);
|
memcpy((uint8_t *) dst + fz * o_index, (uint8_t *) src + fz * i_index, (int) fz);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pa_memblock_release(input->memblock);
|
pa_memblock_release(input->memblock);
|
||||||
pa_memblock_release(output->memblock);
|
pa_memblock_release(output->memblock);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue