Mercurial > libavcodec.hg
changeset 9069:8a74ab19d224 libavcodec
Correctly reset SEI variables.
Patch by Ivan Schreter, schreter gmx net
author | cehoyos |
---|---|
date | Fri, 27 Feb 2009 21:28:41 +0000 |
parents | 520877b559cb |
children | 87f496299f09 |
files | h264.c |
diffstat | 1 files changed, 15 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/h264.c Fri Feb 27 15:51:15 2009 +0000 +++ b/h264.c Fri Feb 27 21:28:41 2009 +0000 @@ -2161,6 +2161,18 @@ memset(h->pps.scaling_matrix8, 16, 2*64*sizeof(uint8_t)); } +/** + * Reset SEI values at the beginning of the frame. + * + * @param h H.264 context. + */ +static void reset_sei(H264Context *h) { + h->sei_recovery_frame_cnt = -1; + h->sei_dpb_output_delay = 0; + h->sei_cpb_removal_delay = -1; + h->sei_buffering_period_present = 0; +} + static av_cold int decode_init(AVCodecContext *avctx){ H264Context *h= avctx->priv_data; MpegEncContext * const s = &h->s; @@ -2197,10 +2209,7 @@ h->thread_context[0] = h; h->outputed_poc = INT_MIN; h->prev_poc_msb= 1<<16; - h->sei_recovery_frame_cnt = -1; - h->sei_dpb_output_delay = 0; - h->sei_cpb_removal_delay = -1; - h->sei_buffering_period_present = 0; + reset_sei(h); if(avctx->codec_id == CODEC_ID_H264) avctx->ticks_per_frame = 2; return 0; @@ -3137,10 +3146,7 @@ if(h->s.current_picture_ptr) h->s.current_picture_ptr->reference= 0; h->s.first_field= 0; - h->sei_recovery_frame_cnt = -1; - h->sei_dpb_output_delay = 0; - h->sei_cpb_removal_delay = -1; - h->sei_buffering_period_present = 0; + reset_sei(h); ff_mpeg_flush(avctx); } @@ -7407,6 +7413,7 @@ h->current_slice = 0; if (!s->first_field) s->current_picture_ptr= NULL; + reset_sei(h); } for(;;){ @@ -7744,10 +7751,6 @@ ff_er_frame_end(s); MPV_frame_end(s); - h->sei_recovery_frame_cnt = -1; - h->sei_dpb_output_delay = 0; - h->sei_cpb_removal_delay = -1; - h->sei_buffering_period_present = 0; if (cur->field_poc[0]==INT_MAX || cur->field_poc[1]==INT_MAX) { /* Wait for second field. */