summaryrefslogtreecommitdiff
path: root/libavcodec/flac.c
diff options
context:
space:
mode:
authorMichael Donaghy <md401@cam.ac.uk>2007-06-12 07:59:43 +0000
committerGuillaume Poirier <gpoirier@mplayerhq.hu>2007-06-12 07:59:43 +0000
commit3cce801a0bcbfa849b3d348bb106bf606c0834b2 (patch)
tree5785942068cf4037b4fb841d2d63e5880bbaeeee /libavcodec/flac.c
parentea23327b9ccb576f14a64336bee22e70444df501 (diff)
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
Diffstat (limited to 'libavcodec/flac.c')
-rw-r--r--libavcodec/flac.c17
1 files 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: