avcodec/mpeg12dec: Fix missing slice handling without padding
authorMichael Niedermayer <michael@niedermayer.cc>
Wed, 24 Feb 2016 00:44:27 +0000 (01:44 +0100)
committerMichael Niedermayer <michael@niedermayer.cc>
Wed, 24 Feb 2016 02:22:31 +0000 (03:22 +0100)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/mpeg12dec.c

index 4bdb32a..f6089e4 100644 (file)
@@ -1871,6 +1871,7 @@ static int mpeg_decode_slice(MpegEncContext *s, int mb_y,
 
         if (++s->mb_x >= s->mb_width) {
             const int mb_size = 16 >> s->avctx->lowres;
+            int left;
 
             ff_mpeg_draw_horiz_band(s, mb_size * (s->mb_y >> field_pic), mb_size);
             ff_mpv_report_decode_progress(s);
@@ -1910,12 +1911,13 @@ static int mpeg_decode_slice(MpegEncContext *s, int mb_y,
             // in cases where the slice is completely outside the visible
             // area, we detect this here instead of running into the end expecting
             // more data
+            left = get_bits_left(&s->gb);
             if (s->mb_y >= ((s->height + 15) >> 4) &&
                 !s->progressive_sequence &&
-                get_bits_left(&s->gb) <= 8 &&
-                get_bits_left(&s->gb) >= 0 &&
+                left <= 25 &&
+                left >= 0 &&
                 s->mb_skip_run == -1 &&
-                show_bits(&s->gb, 8) == 0)
+                (!left || show_bits(&s->gb, left) == 0))
                 goto eos;
 
             ff_init_block_index(s);