diff options
Diffstat (limited to 'src/pcm_convert.c')
-rw-r--r-- | src/pcm_convert.c | 56 |
1 files changed, 27 insertions, 29 deletions
diff --git a/src/pcm_convert.c b/src/pcm_convert.c index 2209249a6..42d72e367 100644 --- a/src/pcm_convert.c +++ b/src/pcm_convert.c @@ -48,12 +48,12 @@ void pcm_convert_deinit(struct pcm_convert_state *state) pcm_buffer_deinit(&state->channels_buffer); } -static size_t -pcm_convert_16(const struct audio_format *src_format, +static const int16_t * +pcm_convert_16(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, - int16_t *dest_buffer, - struct pcm_convert_state *state) + size_t *dest_size_r) { const int16_t *buf; size_t len; @@ -82,18 +82,16 @@ pcm_convert_16(const struct audio_format *src_format, dest_format->sample_rate, &len); - assert(pcm_convert_size(src_format, src_size, dest_format) >= len); - memcpy(dest_buffer, buf, len); - - return len; + *dest_size_r = len; + return buf; } -static size_t -pcm_convert_24(const struct audio_format *src_format, +static const int32_t * +pcm_convert_24(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, - int32_t *dest_buffer, - struct pcm_convert_state *state) + size_t *dest_size_r) { const int32_t *buf; size_t len; @@ -121,30 +119,30 @@ pcm_convert_24(const struct audio_format *src_format, dest_format->sample_rate, &len); - assert(pcm_convert_size(src_format, src_size, dest_format) >= len); - memcpy(dest_buffer, buf, len); - - return len; + *dest_size_r = len; + return buf; } -size_t pcm_convert(const struct audio_format *inFormat, - const void *src, size_t src_size, - const struct audio_format *outFormat, - void *dest, - struct pcm_convert_state *convState) +const void * +pcm_convert(struct pcm_convert_state *state, + const struct audio_format *src_format, + const void *src, size_t src_size, + const struct audio_format *dest_format, + size_t *dest_size_r) { - switch (outFormat->bits) { + switch (dest_format->bits) { case 16: - return pcm_convert_16(inFormat, src, src_size, - outFormat, (int16_t*)dest, - convState); + return pcm_convert_16(state, + src_format, src, src_size, + dest_format, dest_size_r); + case 24: - return pcm_convert_24(inFormat, src, src_size, - outFormat, (int32_t*)dest, - convState); + return pcm_convert_24(state, + src_format, src, src_size, + dest_format, dest_size_r); default: - g_error("cannot convert to %u bit\n", outFormat->bits); + g_error("cannot convert to %u bit\n", dest_format->bits); return 0; } } |