From 3cce801a0bcbfa849b3d348bb106bf606c0834b2 Mon Sep 17 00:00:00 2001 From: Michael Donaghy Date: Tue, 12 Jun 2007 07:59:43 +0000 Subject: [PATCH] fix 8- and 24-bit FLAC decoding Patch by Michael Donaghy %md401 A cam P ac P uk% Original thread: date: Jun 10, 2007 4:48 PM subject: [FFmpeg-devel] [PATCH] Bugfix: decoding 8- and 24-bit FLAC files Originally committed as revision 9286 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/flac.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/libavcodec/flac.c b/libavcodec/flac.c index 1016ed47f6..b629a91282 100644 --- a/libavcodec/flac.c +++ b/libavcodec/flac.c @@ -568,17 +568,6 @@ static int decode_frame(FLACContext *s, int alloc_data_size) return 0; } -static inline int16_t shift_to_16_bits(int32_t data, int bps) -{ - if (bps == 24) { - return (data >> 8); - } else if (bps == 20) { - return (data >> 4); - } else { - return data; - } -} - static int flac_decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8_t *buf, int buf_size) @@ -684,8 +673,8 @@ static int flac_decode_frame(AVCodecContext *avctx, {\ int a= s->decoded[0][i];\ int b= s->decoded[1][i];\ - *(samples++) = (left ) >> (16 - s->bps);\ - *(samples++) = (right) >> (16 - s->bps);\ + *(samples++) = (left << (24 - s->bps)) >> 8;\ + *(samples++) = (right << (24 - s->bps)) >> 8;\ }\ break; @@ -695,7 +684,7 @@ static int flac_decode_frame(AVCodecContext *avctx, for (j = 0; j < s->blocksize; j++) { for (i = 0; i < s->channels; i++) - *(samples++) = shift_to_16_bits(s->decoded[i][j], s->bps); + *(samples++) = (s->decoded[i][j] << (24 - s->bps)) >> 8; } break; case LEFT_SIDE: