|
|
|
@ -3740,8 +3740,6 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg) |
|
|
|
|
{ |
|
|
|
|
H264Context *h = *(void **)arg; |
|
|
|
|
MpegEncContext *const s = &h->s; |
|
|
|
|
const int part_mask = s->partitioned_frame ? (ER_AC_END | ER_AC_ERROR) |
|
|
|
|
: 0x7F; |
|
|
|
|
int lf_x_start = s->mb_x; |
|
|
|
|
|
|
|
|
|
s->mb_skip_run = -1; |
|
|
|
@ -3787,7 +3785,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg) |
|
|
|
|
if ((s->workaround_bugs & FF_BUG_TRUNCATED) && |
|
|
|
|
h->cabac.bytestream > h->cabac.bytestream_end + 2) { |
|
|
|
|
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x - 1, |
|
|
|
|
s->mb_y, ER_MB_END & part_mask); |
|
|
|
|
s->mb_y, ER_MB_END); |
|
|
|
|
if (s->mb_x >= lf_x_start) |
|
|
|
|
loop_filter(h, lf_x_start, s->mb_x + 1); |
|
|
|
|
return 0; |
|
|
|
@ -3800,7 +3798,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg) |
|
|
|
|
s->mb_x, s->mb_y, |
|
|
|
|
h->cabac.bytestream_end - h->cabac.bytestream); |
|
|
|
|
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, |
|
|
|
|
s->mb_y, ER_MB_ERROR & part_mask); |
|
|
|
|
s->mb_y, ER_MB_ERROR); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -3820,7 +3818,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg) |
|
|
|
|
tprintf(s->avctx, "slice end %d %d\n", |
|
|
|
|
get_bits_count(&s->gb), s->gb.size_in_bits); |
|
|
|
|
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x - 1, |
|
|
|
|
s->mb_y, ER_MB_END & part_mask); |
|
|
|
|
s->mb_y, ER_MB_END); |
|
|
|
|
if (s->mb_x > lf_x_start) |
|
|
|
|
loop_filter(h, lf_x_start, s->mb_x); |
|
|
|
|
return 0; |
|
|
|
@ -3847,7 +3845,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg) |
|
|
|
|
av_log(h->s.avctx, AV_LOG_ERROR, |
|
|
|
|
"error while decoding MB %d %d\n", s->mb_x, s->mb_y); |
|
|
|
|
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, |
|
|
|
|
s->mb_y, ER_MB_ERROR & part_mask); |
|
|
|
|
s->mb_y, ER_MB_ERROR); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -3869,13 +3867,13 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg) |
|
|
|
|
|| get_bits_left(&s->gb) > 0 && !(s->avctx->err_recognition & AV_EF_AGGRESSIVE)) { |
|
|
|
|
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, |
|
|
|
|
s->mb_x - 1, s->mb_y, |
|
|
|
|
ER_MB_END & part_mask); |
|
|
|
|
ER_MB_END); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} else { |
|
|
|
|
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, |
|
|
|
|
s->mb_x, s->mb_y, |
|
|
|
|
ER_MB_END & part_mask); |
|
|
|
|
ER_MB_END); |
|
|
|
|
|
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
@ -3888,14 +3886,14 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg) |
|
|
|
|
if (get_bits_left(&s->gb) == 0) { |
|
|
|
|
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, |
|
|
|
|
s->mb_x - 1, s->mb_y, |
|
|
|
|
ER_MB_END & part_mask); |
|
|
|
|
ER_MB_END); |
|
|
|
|
if (s->mb_x > lf_x_start) |
|
|
|
|
loop_filter(h, lf_x_start, s->mb_x); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} else { |
|
|
|
|
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, |
|
|
|
|
s->mb_y, ER_MB_ERROR & part_mask); |
|
|
|
|
s->mb_y, ER_MB_ERROR); |
|
|
|
|
|
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|