diff --git a/libavcodec/error_resilience.c b/libavcodec/error_resilience.c index ca2287198b..68bc10ac31 100644 --- a/libavcodec/error_resilience.c +++ b/libavcodec/error_resilience.c @@ -917,19 +917,20 @@ void ff_er_frame_end(ERContext *s) return; } linesize = s->cur_pic.f->linesize; - for (mb_x = 0; mb_x < s->mb_width; mb_x++) { - int status = s->error_status_table[mb_x + (s->mb_height - 1) * s->mb_stride]; - if (status != 0x7F) - break; - } - if ( mb_x == s->mb_width - && s->avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO + if ( s->avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO && (FFALIGN(s->avctx->height, 16)&16) - && atomic_load(&s->error_count) == 3 * s->mb_width * (s->avctx->skip_top + s->avctx->skip_bottom + 1) - ) { - av_log(s->avctx, AV_LOG_DEBUG, "ignoring last missing slice\n"); - return; + && atomic_load(&s->error_count) == 3 * s->mb_width * (s->avctx->skip_top + s->avctx->skip_bottom + 1)) { + for (mb_x = 0; mb_x < s->mb_width; mb_x++) { + int status = s->error_status_table[mb_x + (s->mb_height - 1) * s->mb_stride]; + if (status != 0x7F) + break; + } + + if (mb_x == s->mb_width) { + av_log(s->avctx, AV_LOG_DEBUG, "ignoring last missing slice\n"); + return; + } } if (s->last_pic.f) {