Browse Source

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
tags/v0.5
Loren Merritt 21 years ago
parent
commit
1b2dcdc1e0
1 changed files with 10 additions and 6 deletions
  1. +10
    -6
      libavcodec/h264.c

+ 10
- 6
libavcodec/h264.c View File

@@ -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;
}


Loading…
Cancel
Save