[FFmpeg-cvslog] h264_slice: Fix return of incomplete frames from decoder

John Stebbins git at videolan.org
Thu Jun 28 22:37:39 EEST 2018


ffmpeg | branch: master | John Stebbins <jstebbins at jetheaddev.com> | Wed Jun 27 15:12:24 2018 -0700| [08b1d1d8122517d07f2335437cde0aeedc50143f] | committer: Michael Niedermayer

h264_slice: Fix return of incomplete frames from decoder

When not using libavformat for demuxing, AVCodecContext.has_b_frames
gets set too late causing the recovery frame heuristic in h264_refs to
incorrectly flag an early frame as recovered.

This patch sets has_b_frames earlier to prevent improperly flagging the
frame as recovered.

Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=08b1d1d8122517d07f2335437cde0aeedc50143f
---

 libavcodec/h264_slice.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index d71ddbe9ba..ede9a1a6ea 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -1407,6 +1407,11 @@ static int h264_field_start(H264Context *h, const H264SliceContext *sl,
 
     sps = h->ps.sps;
 
+    if (sps && sps->bitstream_restriction_flag &&
+        h->avctx->has_b_frames < sps->num_reorder_frames) {
+        h->avctx->has_b_frames = sps->num_reorder_frames;
+    }
+
     last_pic_droppable   = h->droppable;
     last_pic_structure   = h->picture_structure;
     h->droppable         = (nal->ref_idc == 0);



More information about the ffmpeg-cvslog mailing list