diff --git a/libavcodec/h264.c b/libavcodec/h264.c index c77d9ba69d..f8a8b9454a 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -4352,12 +4352,11 @@ static int decode_residual(H264Context *h, GetBitContext *gb, DCTELEM *block, in level_code= (prefix<s.avctx, AV_LOG_ERROR, "prefix too large at %d %d\n", s->mb_x, s->mb_y); - return -1; + level_code= (15<=16) + level_code += (1<<(prefix-3))-4096; } if(trailing_ones < 3) level_code += 2; @@ -4375,11 +4374,10 @@ static int decode_residual(H264Context *h, GetBitContext *gb, DCTELEM *block, in prefix = get_level_prefix(gb); if(prefix<15){ level_code = (prefix<s.avctx, AV_LOG_ERROR, "prefix too large at %d %d\n", s->mb_x, s->mb_y); - return -1; + level_code = (15<=16) + level_code += (1<<(prefix-3))-4096; } mask= -(level_code&1); level[i]= (((2+level_code)>>1) ^ mask) - mask;