comparison ratecontrol.c @ 1126:77ccf7fe3bd0 libavcodec

per context frame_rate_base, this should finally fix frame_rate related av sync issues
author michaelni
date Wed, 12 Mar 2003 15:16:19 +0000
parents 1e39f273ecd6
children 6d6003cf89c2
comparison
equal deleted inserted replaced
1125:0980ae063f4e 1126:77ccf7fe3bd0
162 rcc->frame_count[rce.pict_type] ++; 162 rcc->frame_count[rce.pict_type] ++;
163 163
164 bits= rce.i_tex_bits + rce.p_tex_bits; 164 bits= rce.i_tex_bits + rce.p_tex_bits;
165 165
166 q= get_qscale(s, &rce, rcc->pass1_wanted_bits/rcc->pass1_rc_eq_output_sum, i); 166 q= get_qscale(s, &rce, rcc->pass1_wanted_bits/rcc->pass1_rc_eq_output_sum, i);
167 rcc->pass1_wanted_bits+= s->bit_rate/(s->frame_rate / (double)FRAME_RATE_BASE); 167 rcc->pass1_wanted_bits+= s->bit_rate/(s->avctx->frame_rate / (double)s->avctx->frame_rate_base);
168 } 168 }
169 } 169 }
170 170
171 } 171 }
172 172
195 return rce->qscale * (double)(rce->i_tex_bits + rce->p_tex_bits+1)/ bits; 195 return rce->qscale * (double)(rce->i_tex_bits + rce->p_tex_bits+1)/ bits;
196 } 196 }
197 197
198 static void update_rc_buffer(MpegEncContext *s, int frame_size){ 198 static void update_rc_buffer(MpegEncContext *s, int frame_size){
199 RateControlContext *rcc= &s->rc_context; 199 RateControlContext *rcc= &s->rc_context;
200 const double fps= (double)s->frame_rate / FRAME_RATE_BASE; 200 const double fps= (double)s->avctx->frame_rate / (double)s->avctx->frame_rate_base;
201 const double buffer_size= s->avctx->rc_buffer_size; 201 const double buffer_size= s->avctx->rc_buffer_size;
202 const double min_rate= s->avctx->rc_min_rate/fps; 202 const double min_rate= s->avctx->rc_min_rate/fps;
203 const double max_rate= s->avctx->rc_max_rate/fps; 203 const double max_rate= s->avctx->rc_max_rate/fps;
204 204
205 if(buffer_size){ 205 if(buffer_size){
569 Picture * const pic= &s->current_picture; 569 Picture * const pic= &s->current_picture;
570 emms_c(); 570 emms_c();
571 571
572 get_qminmax(&qmin, &qmax, s, pict_type); 572 get_qminmax(&qmin, &qmax, s, pict_type);
573 573
574 fps= (double)s->frame_rate / FRAME_RATE_BASE; 574 fps= (double)s->avctx->frame_rate / (double)s->avctx->frame_rate_base;
575 //printf("input_pic_num:%d pic_num:%d frame_rate:%d\n", s->input_picture_number, s->picture_number, s->frame_rate); 575 //printf("input_pic_num:%d pic_num:%d frame_rate:%d\n", s->input_picture_number, s->picture_number, s->frame_rate);
576 /* update predictors */ 576 /* update predictors */
577 if(picture_number>2){ 577 if(picture_number>2){
578 const int last_var= s->last_pict_type == I_TYPE ? rcc->last_mb_var_sum : rcc->last_mc_mb_var_sum; 578 const int last_var= s->last_pict_type == I_TYPE ? rcc->last_mb_var_sum : rcc->last_mc_mb_var_sum;
579 update_predictor(&rcc->pred[s->last_pict_type], rcc->last_qscale, sqrt(last_var), s->frame_bits); 579 update_predictor(&rcc->pred[s->last_pict_type], rcc->last_qscale, sqrt(last_var), s->frame_bits);
696 696
697 static int init_pass2(MpegEncContext *s) 697 static int init_pass2(MpegEncContext *s)
698 { 698 {
699 RateControlContext *rcc= &s->rc_context; 699 RateControlContext *rcc= &s->rc_context;
700 int i; 700 int i;
701 double fps= (double)s->frame_rate / FRAME_RATE_BASE; 701 double fps= (double)s->avctx->frame_rate / (double)s->avctx->frame_rate_base;
702 double complexity[5]={0,0,0,0,0}; // aproximate bits at quant=1 702 double complexity[5]={0,0,0,0,0}; // aproximate bits at quant=1
703 double avg_quantizer[5]; 703 double avg_quantizer[5];
704 uint64_t const_bits[5]={0,0,0,0,0}; // quantizer idependant bits 704 uint64_t const_bits[5]={0,0,0,0,0}; // quantizer idependant bits
705 uint64_t available_bits[5]; 705 uint64_t available_bits[5];
706 uint64_t all_const_bits; 706 uint64_t all_const_bits;