From 5cf4ce9318acfcd3698b10e173315ad681d39560 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 8 Sep 2011 23:47:32 +0200 Subject: [PATCH] pcm_format: fix 32-to-24 bit conversion (the "silence" bug) D'oh, we were reading 16 bit integers instead of 32 bit integers! That caused silence when trying to play a 32 bit input file on a 24 bit sound card (e.g. USB sound chips with 24 bit packed samples). --- NEWS | 1 + src/pcm_format.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 17e558af9..ea128337e 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,5 @@ ver 0.16.5 (2010/??/??) +* pcm_format: fix 32-to-24 bit conversion (the "silence" bug) ver 0.16.4 (2011/09/01) diff --git a/src/pcm_format.c b/src/pcm_format.c index 3fd76a987..1e4b8d705 100644 --- a/src/pcm_format.c +++ b/src/pcm_format.c @@ -143,7 +143,7 @@ pcm_convert_16_to_24(int32_t *out, const int16_t *in, } static void -pcm_convert_32_to_24(int32_t *out, const int16_t *in, +pcm_convert_32_to_24(int32_t *out, const int32_t *in, unsigned num_samples) { while (num_samples > 0) { @@ -197,7 +197,7 @@ pcm_convert_to_24(struct pcm_buffer *buffer, *dest_size_r = num_samples * sizeof(*dest); dest = pcm_buffer_get(buffer, *dest_size_r); - pcm_convert_32_to_24(dest, (const int16_t *)src, + pcm_convert_32_to_24(dest, (const int32_t *)src, num_samples); return dest; }