# HG changeset patch # User lorenm # Date 1104834407 0 # Node ID 9d780478f8a50da704f975dc0c2f6e07eef83221 # Parent 26778a857b5b05473e249a727b58e296b76c0ec3 reduce stutter if we learn too late that the stream contains B-frames. diff -r 26778a857b5b -r 9d780478f8a5 h264.c --- a/h264.c Tue Jan 04 01:12:48 2005 +0000 +++ b/h264.c Tue Jan 04 10:26:47 2005 +0000 @@ -6111,22 +6111,26 @@ 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; + h->delayed_pic[0] = cur; } - if(!s->low_delay && (!prev || out == prev)) - h->delayed_pic[0] = cur; *pict= *(AVFrame*)out; }