From 1b2dcdc1e06a0053329986adc26fcbc19548d7be Mon Sep 17 00:00:00 2001 From: Loren Merritt <lorenm@u.washington.edu> Date: Tue, 4 Jan 2005 10:26:47 +0000 Subject: [PATCH] reduce stutter if we learn too late that the stream contains B-frames. Originally committed as revision 3801 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/h264.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/libavcodec/h264.c b/libavcodec/h264.c index bf29af60538..a5b48b16925 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -6111,22 +6111,26 @@ static int decode_frame(AVCodecContext *avctx, Picture *prev = h->delayed_pic[0]; Picture *out; - if(cur->pict_type == B_TYPE + if(s->low_delay + && (cur->pict_type == B_TYPE || (!h->sps.gaps_in_frame_num_allowed_flag - && prev && cur->poc - prev->poc > 2)){ + && prev && cur->poc - prev->poc > 2))){ s->low_delay = 0; s->avctx->has_b_frames = 1; + if(prev && prev->poc > cur->poc) + // too late to display this frame + cur = prev; } if(s->low_delay || !prev || cur->pict_type == B_TYPE) out = cur; - else{ + else out = prev; - if(prev->reference == 1) + if(s->low_delay || !prev || out == prev){ + if(prev && prev->reference == 1) prev->reference = 0; - } - if(!s->low_delay && (!prev || out == prev)) h->delayed_pic[0] = cur; + } *pict= *(AVFrame*)out; } -- GitLab