# HG changeset patch # User cehoyos # Date 1235770121 0 # Node ID 8a74ab19d2240e53e834039aaed8e7f3d55e4148 # Parent 520877b559cbe90911787b46e91fee22d8be9433 Correctly reset SEI variables. Patch by Ivan Schreter, schreter gmx net diff -r 520877b559cb -r 8a74ab19d224 h264.c --- 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. */