From fc7d5b055d98306af0c882282902a23e963f026d Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 22 Nov 2013 22:50:29 +0100 Subject: PcmResampleLibsamplerate: clip 24 bit data Using pcm_resample_lsr_32() for 24 bit samples works, but may cause 24 bit overflows. This commit makes 24 bit a special case with explicit clipping. --- src/pcm/PcmResample.cxx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/pcm/PcmResample.cxx') diff --git a/src/pcm/PcmResample.cxx b/src/pcm/PcmResample.cxx index df37826ba..01f269ea9 100644 --- a/src/pcm/PcmResample.cxx +++ b/src/pcm/PcmResample.cxx @@ -155,8 +155,19 @@ PcmResampler::Resample24(unsigned channels, unsigned src_rate, unsigned dest_rate, size_t *dest_size_r, Error &error_r) { +#ifdef HAVE_LIBSAMPLERATE + if (pcm_resample_lsr_enabled()) + return pcm_resample_lsr_24(this, channels, + src_rate, src_buffer, src_size, + dest_rate, dest_size_r, + error_r); +#else + (void)error_r; +#endif + /* reuse the 32 bit code - the resampler code doesn't care if the upper 8 bits are actually used */ - return Resample32(channels, src_rate, src_buffer, src_size, - dest_rate, dest_size_r, error_r); + return pcm_resample_fallback_32(this, channels, + src_rate, src_buffer, src_size, + dest_rate, dest_size_r); } -- cgit v1.2.3