avcodec/diracdec: Handle the 0 vlc case at the top of coeff_unpack_golomb()
authorMichael Niedermayer <michael@niedermayer.cc>
Tue, 12 Jan 2016 22:32:58 +0000 (23:32 +0100)
committerMichael Niedermayer <michael@niedermayer.cc>
Wed, 13 Jan 2016 17:56:49 +0000 (18:56 +0100)
decoding changes from 17 to 20 fps

Reviewed-by; Rostislav Pehlivanov <atomnuker@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/diracdec.c

index bbe6d87..942376b 100644 (file)
@@ -491,6 +491,12 @@ static inline int coeff_unpack_golomb(GetBitContext *gb, int qfactor, int qoffse
     UPDATE_CACHE(re, gb);
     buf = GET_CACHE(re, gb);
 
+    if (buf & 0x80000000) {
+        LAST_SKIP_BITS(re,gb,1);
+        CLOSE_READER(re, gb);
+        return 0;
+    }
+
     if (buf & 0xAA800000) {
         buf >>= 32 - 8;
         SKIP_BITS(re, gb, ff_interleaved_golomb_vlc_len[buf]);
@@ -516,12 +522,12 @@ static inline int coeff_unpack_golomb(GetBitContext *gb, int qfactor, int qoffse
 
         coeff = ret - 1;
     }
-    if (coeff) {
-        coeff = (coeff * qfactor + qoffset) >> 2;
-        sign  = SHOW_SBITS(re, gb, 1);
-        LAST_SKIP_BITS(re, gb, 1);
-        coeff = (coeff ^ sign) - sign;
-    }
+
+    coeff = (coeff * qfactor + qoffset) >> 2;
+    sign  = SHOW_SBITS(re, gb, 1);
+    LAST_SKIP_BITS(re, gb, 1);
+    coeff = (coeff ^ sign) - sign;
+
     CLOSE_READER(re, gb);
     return coeff;
 }