|
|
|
@ -2001,25 +2001,25 @@ intra: |
|
|
|
|
end: |
|
|
|
|
/* per-MB end of slice check */ |
|
|
|
|
next = mpeg4_is_resync(ctx); |
|
|
|
|
if (next) { |
|
|
|
|
if (s->mb_x + s->mb_y*s->mb_width + 1 > next && (s->avctx->err_recognition & AV_EF_AGGRESSIVE)) { |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} else if (s->mb_x + s->mb_y*s->mb_width + 1 >= next) |
|
|
|
|
return SLICE_END; |
|
|
|
|
|
|
|
|
|
if (s->pict_type == AV_PICTURE_TYPE_B) { |
|
|
|
|
const int delta= s->mb_x + 1 == s->mb_width ? 2 : 1; |
|
|
|
|
ff_thread_await_progress(&s->next_picture_ptr->tf, |
|
|
|
|
(s->mb_x + delta >= s->mb_width) |
|
|
|
|
? FFMIN(s->mb_y + 1, s->mb_height - 1) |
|
|
|
|
: s->mb_y, 0); |
|
|
|
|
if (s->next_picture.mbskip_table[xy + delta]) |
|
|
|
|
return SLICE_OK; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (next) { |
|
|
|
|
if (s->mb_x + s->mb_y*s->mb_width + 1 > next && (s->avctx->err_recognition & AV_EF_AGGRESSIVE)) { |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} else if (s->mb_x + s->mb_y*s->mb_width + 1 >= next) |
|
|
|
|
return SLICE_END; |
|
|
|
|
|
|
|
|
|
if (s->pict_type == AV_PICTURE_TYPE_B) { |
|
|
|
|
const int delta = s->mb_x + 1 == s->mb_width ? 2 : 1; |
|
|
|
|
ff_thread_await_progress(&s->next_picture_ptr->tf, |
|
|
|
|
(s->mb_x + delta >= s->mb_width) |
|
|
|
|
? FFMIN(s->mb_y + 1, s->mb_height - 1) |
|
|
|
|
: s->mb_y, 0); |
|
|
|
|
if (s->next_picture.mbskip_table[xy + delta]) |
|
|
|
|
return SLICE_OK; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return SLICE_END; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return SLICE_OK; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|