From 26482ae716ba0966e75b4a8e8df76529baae3d54 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 6 May 2013 00:27:58 +0200 Subject: [PATCH] h264_sei/decode_picture_timing: do not depend on h->sps being set Signed-off-by: Michael Niedermayer --- libavcodec/h264_sei.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/libavcodec/h264_sei.c b/libavcodec/h264_sei.c index be6cb58316..5f68a139a3 100644 --- a/libavcodec/h264_sei.c +++ b/libavcodec/h264_sei.c @@ -45,11 +45,18 @@ void ff_h264_reset_sei(H264Context *h) { } static int decode_picture_timing(H264Context *h){ - if(h->sps.nal_hrd_parameters_present_flag || h->sps.vcl_hrd_parameters_present_flag){ - h->sei_cpb_removal_delay = get_bits_long(&h->gb, h->sps.cpb_removal_delay_length); - h->sei_dpb_output_delay = get_bits_long(&h->gb, h->sps.dpb_output_delay_length); + SPS *sps = &h->sps; + int i; + + for (i = 0; ilog2_max_frame_num && h->sps_buffers[i]) + sps = h->sps_buffers[i]; + + if(sps->nal_hrd_parameters_present_flag || sps->vcl_hrd_parameters_present_flag){ + h->sei_cpb_removal_delay = get_bits_long(&h->gb, sps->cpb_removal_delay_length); + h->sei_dpb_output_delay = get_bits_long(&h->gb, sps->dpb_output_delay_length); } - if(h->sps.pic_struct_present_flag){ + if(sps->pic_struct_present_flag){ unsigned int i, num_clock_ts; h->sei_pic_struct = get_bits(&h->gb, 4); h->sei_ct_type = 0; @@ -83,8 +90,8 @@ static int decode_picture_timing(H264Context *h){ } } } - if(h->sps.time_offset_length > 0) - skip_bits(&h->gb, h->sps.time_offset_length); /* time_offset */ + if(sps->time_offset_length > 0) + skip_bits(&h->gb, sps->time_offset_length); /* time_offset */ } } -- GitLab