Mercurial > libavcodec.hg
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); |