aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-02-24 01:44:27 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2016-02-24 03:22:31 +0100
commit10fa50c156ead31423e0f787c2152aeab841c2f3 (patch)
tree4137fac987358edc12f0e466661ee3844fcc56e5
parent4170a44bbc7b8dfbe9fe2fa28557fce90d998887 (diff)
downloadffmpeg-10fa50c156ead31423e0f787c2152aeab841c2f3.tar.gz
avcodec/mpeg12dec: Fix missing slice handling without padding
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavcodec/mpeg12dec.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c
index 4bdb32a7f7..f6089e4eb4 100644
--- a/libavcodec/mpeg12dec.c
+++ b/libavcodec/mpeg12dec.c
@@ -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);