comparison h264.c @ 2410:9d780478f8a5 libavcodec

reduce stutter if we learn too late that the stream contains B-frames.
author lorenm
date Tue, 04 Jan 2005 10:26:47 +0000
parents 26778a857b5b
children db2cf6005d19
comparison
equal deleted inserted replaced
2409:26778a857b5b 2410:9d780478f8a5
6109 * FIXME doesn't allow for multiple delayed frames */ 6109 * FIXME doesn't allow for multiple delayed frames */
6110 Picture *cur = s->current_picture_ptr; 6110 Picture *cur = s->current_picture_ptr;
6111 Picture *prev = h->delayed_pic[0]; 6111 Picture *prev = h->delayed_pic[0];
6112 Picture *out; 6112 Picture *out;
6113 6113
6114 if(cur->pict_type == B_TYPE 6114 if(s->low_delay
6115 && (cur->pict_type == B_TYPE
6115 || (!h->sps.gaps_in_frame_num_allowed_flag 6116 || (!h->sps.gaps_in_frame_num_allowed_flag
6116 && prev && cur->poc - prev->poc > 2)){ 6117 && prev && cur->poc - prev->poc > 2))){
6117 s->low_delay = 0; 6118 s->low_delay = 0;
6118 s->avctx->has_b_frames = 1; 6119 s->avctx->has_b_frames = 1;
6120 if(prev && prev->poc > cur->poc)
6121 // too late to display this frame
6122 cur = prev;
6119 } 6123 }
6120 6124
6121 if(s->low_delay || !prev || cur->pict_type == B_TYPE) 6125 if(s->low_delay || !prev || cur->pict_type == B_TYPE)
6122 out = cur; 6126 out = cur;
6123 else{ 6127 else
6124 out = prev; 6128 out = prev;
6125 if(prev->reference == 1) 6129 if(s->low_delay || !prev || out == prev){
6130 if(prev && prev->reference == 1)
6126 prev->reference = 0; 6131 prev->reference = 0;
6127 }
6128 if(!s->low_delay && (!prev || out == prev))
6129 h->delayed_pic[0] = cur; 6132 h->delayed_pic[0] = cur;
6133 }
6130 6134
6131 *pict= *(AVFrame*)out; 6135 *pict= *(AVFrame*)out;
6132 } 6136 }
6133 6137
6134 ff_print_debug_info(s, pict); 6138 ff_print_debug_info(s, pict);