From a8b6721bedce381c855728e98f409ef5dabef304 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 24 Oct 2013 23:11:41 +0200 Subject: [PATCH] avcodec/h264: do not trust last_pic_droppable when marking pictures as done This simplifies the code and fixes a deadlock Fixes Ticket2927 Signed-off-by: Michael Niedermayer (cherry picked from commit 29ffeef5e73b8f41ff3a3f2242d356759c66f91f) Conflicts: libavcodec/h264.c --- libavcodec/h264.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavcodec/h264.c b/libavcodec/h264.c index acc42eeb95..4f5ca99e9a 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -3364,7 +3364,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0) assert(h0->cur_pic_ptr->f.reference != DELAYED_PIC_REF); /* Mark old field/frame as completed */ - if (!last_pic_droppable && h0->cur_pic_ptr->owner2 == h0) { + if (h0->cur_pic_ptr->owner2 == h0) { ff_thread_report_progress(&h0->cur_pic_ptr->f, INT_MAX, last_pic_structure == PICT_BOTTOM_FIELD); } @@ -3373,7 +3373,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0) if (!FIELD_PICTURE || h->picture_structure == last_pic_structure) { /* Previous field is unmatched. Don't display it, but let it * remain for reference if marked as such. */ - if (!last_pic_droppable && last_pic_structure != PICT_FRAME) { + if (last_pic_structure != PICT_FRAME) { ff_thread_report_progress(&h0->cur_pic_ptr->f, INT_MAX, last_pic_structure == PICT_TOP_FIELD); } @@ -3383,7 +3383,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0) * different frame_nums. Consider this field first in * pair. Throw away previous field except for reference * purposes. */ - if (!last_pic_droppable && last_pic_structure != PICT_FRAME) { + if (last_pic_structure != PICT_FRAME) { ff_thread_report_progress(&h0->cur_pic_ptr->f, INT_MAX, last_pic_structure == PICT_TOP_FIELD); }