From a5a15beac2eedeccbb11e4f2f28878f5df00c38b Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 2 Mar 2009 16:41:10 +0100 Subject: pcm_convert: added 32 bit support All PCM sub libraries have 32 bit support now. Add support to the glue function pcm_convert(). --- src/pcm_convert.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src') diff --git a/src/pcm_convert.c b/src/pcm_convert.c index dbef443dd..cf4676489 100644 --- a/src/pcm_convert.c +++ b/src/pcm_convert.c @@ -123,6 +123,43 @@ pcm_convert_24(struct pcm_convert_state *state, return buf; } +static const int32_t * +pcm_convert_32(struct pcm_convert_state *state, + const struct audio_format *src_format, + const void *src_buffer, size_t src_size, + const struct audio_format *dest_format, + size_t *dest_size_r) +{ + const int32_t *buf; + size_t len; + + assert(dest_format->bits == 32); + + buf = pcm_convert_to_32(&state->format_buffer, src_format->bits, + src_buffer, src_size, &len); + if (!buf) + g_error("pcm_convert_to_32() failed"); + + if (src_format->channels != dest_format->channels) { + buf = pcm_convert_channels_32(&state->channels_buffer, + dest_format->channels, + src_format->channels, + buf, len, &len); + if (!buf) + g_error("pcm_convert_channels_32() failed"); + } + + if (src_format->sample_rate != dest_format->sample_rate) + buf = pcm_resample_32(&state->resample, + dest_format->channels, + src_format->sample_rate, buf, len, + dest_format->sample_rate, + &len); + + *dest_size_r = len; + return buf; +} + const void * pcm_convert(struct pcm_convert_state *state, const struct audio_format *src_format, @@ -141,6 +178,11 @@ pcm_convert(struct pcm_convert_state *state, src_format, src, src_size, dest_format, dest_size_r); + case 32: + return pcm_convert_32(state, + src_format, src, src_size, + dest_format, dest_size_r); + default: g_error("cannot convert to %u bit\n", dest_format->bits); return 0; -- cgit v1.2.3