summaryrefslogtreecommitdiff
path: root/libavcodec/diracdec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-01-12 23:32:58 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2016-01-13 18:56:49 +0100
commit39fb3f18c52dd2be3a4c13fe6cce97bfb87f43c8 (patch)
tree0b4bcd9b3a09e3f84f0439038a3ad06376679805 /libavcodec/diracdec.c
parentbbd977162590db4b29a5532e3e7102e054ff3ae0 (diff)
avcodec/diracdec: Handle the 0 vlc case at the top of coeff_unpack_golomb()
decoding changes from 17 to 20 fps Reviewed-by; Rostislav Pehlivanov <atomnuker@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/diracdec.c')
-rw-r--r--libavcodec/diracdec.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/libavcodec/diracdec.c b/libavcodec/diracdec.c
index bbe6d87bc9..942376bb3c 100644
--- a/libavcodec/diracdec.c
+++ b/libavcodec/diracdec.c
@@ -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;
}