Mercurial > libavcodec.hg
comparison h264.c @ 4389:3afddc65631b libavcodec
check num_reorder_frames for validity
increase delayed_pic buffer size (one temporary is used and a terminating NULL is assumed by most code so it has to be 18 large)
author | michael |
---|---|
date | Tue, 23 Jan 2007 13:36:56 +0000 |
parents | 3451831c6962 |
children | 789336787fcb |
comparison
equal
deleted
inserted
replaced
4388:3451831c6962 | 4389:3afddc65631b |
---|---|
328 unsigned int ref_count[2]; ///< counts frames or fields, depending on current mb mode | 328 unsigned int ref_count[2]; ///< counts frames or fields, depending on current mb mode |
329 Picture *short_ref[32]; | 329 Picture *short_ref[32]; |
330 Picture *long_ref[32]; | 330 Picture *long_ref[32]; |
331 Picture default_ref_list[2][32]; | 331 Picture default_ref_list[2][32]; |
332 Picture ref_list[2][48]; ///< 0..15: frame refs, 16..47: mbaff field refs | 332 Picture ref_list[2][48]; ///< 0..15: frame refs, 16..47: mbaff field refs |
333 Picture *delayed_pic[16]; //FIXME size? | 333 Picture *delayed_pic[18]; //FIXME size? |
334 Picture *delayed_output_pic; | 334 Picture *delayed_output_pic; |
335 | 335 |
336 /** | 336 /** |
337 * memory management control operations buffer. | 337 * memory management control operations buffer. |
338 */ | 338 */ |
7670 get_bits1(&s->gb); /* low_delay_hrd_flag */ | 7670 get_bits1(&s->gb); /* low_delay_hrd_flag */ |
7671 get_bits1(&s->gb); /* pic_struct_present_flag */ | 7671 get_bits1(&s->gb); /* pic_struct_present_flag */ |
7672 | 7672 |
7673 sps->bitstream_restriction_flag = get_bits1(&s->gb); | 7673 sps->bitstream_restriction_flag = get_bits1(&s->gb); |
7674 if(sps->bitstream_restriction_flag){ | 7674 if(sps->bitstream_restriction_flag){ |
7675 unsigned int num_reorder_frames; | |
7675 get_bits1(&s->gb); /* motion_vectors_over_pic_boundaries_flag */ | 7676 get_bits1(&s->gb); /* motion_vectors_over_pic_boundaries_flag */ |
7676 get_ue_golomb(&s->gb); /* max_bytes_per_pic_denom */ | 7677 get_ue_golomb(&s->gb); /* max_bytes_per_pic_denom */ |
7677 get_ue_golomb(&s->gb); /* max_bits_per_mb_denom */ | 7678 get_ue_golomb(&s->gb); /* max_bits_per_mb_denom */ |
7678 get_ue_golomb(&s->gb); /* log2_max_mv_length_horizontal */ | 7679 get_ue_golomb(&s->gb); /* log2_max_mv_length_horizontal */ |
7679 get_ue_golomb(&s->gb); /* log2_max_mv_length_vertical */ | 7680 get_ue_golomb(&s->gb); /* log2_max_mv_length_vertical */ |
7680 sps->num_reorder_frames = get_ue_golomb(&s->gb); | 7681 num_reorder_frames= get_ue_golomb(&s->gb); |
7681 get_ue_golomb(&s->gb); /* max_dec_frame_buffering */ | 7682 get_ue_golomb(&s->gb); /*max_dec_frame_buffering*/ |
7683 | |
7684 if(num_reorder_frames > 16 /*max_dec_frame_buffering || max_dec_frame_buffering > 16*/){ | |
7685 av_log(h->s.avctx, AV_LOG_ERROR, "illegal num_reorder_frames %d\n", num_reorder_frames); | |
7686 return -1; | |
7687 } | |
7688 | |
7689 sps->num_reorder_frames= num_reorder_frames; | |
7682 } | 7690 } |
7683 | 7691 |
7684 return 0; | 7692 return 0; |
7685 } | 7693 } |
7686 | 7694 |