mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
h264: dont report rows as finished after a missing slice
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
a42d15a3a0
commit
644092c8e8
@ -4226,7 +4226,7 @@ static void decode_finish_row(H264Context *h)
|
||||
|
||||
ff_h264_draw_horiz_band(h, top, height);
|
||||
|
||||
if (h->droppable)
|
||||
if (h->droppable || h->er.error_occurred)
|
||||
return;
|
||||
|
||||
ff_thread_report_progress(&h->cur_pic_ptr->tf, top + height - 1,
|
||||
@ -4257,6 +4257,16 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg)
|
||||
avctx->codec_id != AV_CODEC_ID_H264 ||
|
||||
(CONFIG_GRAY && (h->flags & CODEC_FLAG_GRAY));
|
||||
|
||||
if (!(h->avctx->active_thread_type & FF_THREAD_SLICE)) {
|
||||
const int start_i = av_clip(h->resync_mb_x + h->resync_mb_y * h->mb_width, 0, h->mb_num - 1);
|
||||
if (start_i) {
|
||||
int prev_status = h->er.error_status_table[h->er.mb_index2xy[start_i - 1]];
|
||||
prev_status &= ~ VP_START;
|
||||
if (prev_status != (ER_MV_END | ER_DC_END | ER_AC_END))
|
||||
h->er.error_occurred = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (h->pps.cabac) {
|
||||
/* realign */
|
||||
align_get_bits(&h->gb);
|
||||
|
Loading…
Reference in New Issue
Block a user