]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
fix decoding of takethat.mp3
authormichael <michael@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sat, 3 Feb 2007 12:42:12 +0000 (12:42 +0000)
committermichael <michael@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sat, 3 Feb 2007 12:42:12 +0000 (12:42 +0000)
git-svn-id: file:///var/local/repositories/ffmpeg/trunk@7812 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavcodec/mpegaudiodec.c

index 367400581cdb683ba1041f6b37c4860b4a0ceb62..998efb85eb63bf316fb78cea4fc8747995a8d6f8 100644 (file)
@@ -1747,9 +1747,9 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
         s_index+=4;
     }
     /* skip extension bits */
-    bits_left = end_pos - get_bits_count(&s->gb);
+    bits_left = end_pos2 - get_bits_count(&s->gb);
 //av_log(NULL, AV_LOG_ERROR, "left:%d buf:%p\n", bits_left, s->in_gb.buffer);
-    if (bits_left < 0 || bits_left > 500) {
+    if (bits_left < 0/* || bits_left > 500*/) {
         av_log(NULL, AV_LOG_ERROR, "bits_left=%d\n", bits_left);
         s_index=0;
     }else if(bits_left > 0 && s->error_resilience >= FF_ER_AGGRESSIVE){
@@ -1759,6 +1759,14 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
     memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid)*(576 - s_index));
     skip_bits_long(&s->gb, bits_left);
 
+    i= get_bits_count(&s->gb);
+    if(s->in_gb.buffer && i >= s->gb.size_in_bits){
+        s->gb= s->in_gb;
+        s->in_gb.buffer=NULL;
+        assert((get_bits_count(&s->gb) & 7) == 0);
+        skip_bits_long(&s->gb, i - end_pos);
+    }
+
     return 0;
 }