fix 8- and 24-bit FLAC decoding
authorMichael Donaghy <md401@cam.ac.uk>
Tue, 12 Jun 2007 07:59:43 +0000 (07:59 +0000)
committerGuillaume Poirier <gpoirier@mplayerhq.hu>
Tue, 12 Jun 2007 07:59:43 +0000 (07:59 +0000)
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

index 1016ed4..b629a91 100644 (file)
@@ -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: