mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-24 12:09:55 +00:00
Correctly reset SEI variables.
Patch by Ivan Schreter, schreter gmx net Originally committed as revision 17651 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
92971e91ec
commit
03831f462e
@ -2161,6 +2161,18 @@ static av_cold void common_init(H264Context *h){
|
||||
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 @@ static av_cold int decode_init(AVCodecContext *avctx){
|
||||
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 @@ static void flush_dpb(AVCodecContext *avctx){
|
||||
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 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size){
|
||||
h->current_slice = 0;
|
||||
if (!s->first_field)
|
||||
s->current_picture_ptr= NULL;
|
||||
reset_sei(h);
|
||||
}
|
||||
|
||||
for(;;){
|
||||
@ -7744,10 +7751,6 @@ static int decode_frame(AVCodecContext *avctx,
|
||||
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. */
|
||||
|
Loading…
Reference in New Issue
Block a user