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