comparison ratecontrol.c @ 2637:ef44d24680d1 libavcodec

switch to native time bases
author michael
date Sat, 30 Apr 2005 21:43:59 +0000
parents 511e3afc43e1
children ef2149182f1c
comparison
equal deleted inserted replaced
2636:2344c6713011 2637:ef44d24680d1
164 rcc->frame_count[rce.pict_type] ++; 164 rcc->frame_count[rce.pict_type] ++;
165 165
166 bits= rce.i_tex_bits + rce.p_tex_bits; 166 bits= rce.i_tex_bits + rce.p_tex_bits;
167 167
168 q= get_qscale(s, &rce, rcc->pass1_wanted_bits/rcc->pass1_rc_eq_output_sum, i); 168 q= get_qscale(s, &rce, rcc->pass1_wanted_bits/rcc->pass1_rc_eq_output_sum, i);
169 rcc->pass1_wanted_bits+= s->bit_rate/(s->avctx->frame_rate / (double)s->avctx->frame_rate_base); 169 rcc->pass1_wanted_bits+= s->bit_rate/(1/av_q2d(s->avctx->time_base)); //FIXME missbehaves a little for variable fps
170 } 170 }
171 } 171 }
172 172
173 } 173 }
174 174
197 return rce->qscale * (double)(rce->i_tex_bits + rce->p_tex_bits+1)/ bits; 197 return rce->qscale * (double)(rce->i_tex_bits + rce->p_tex_bits+1)/ bits;
198 } 198 }
199 199
200 int ff_vbv_update(MpegEncContext *s, int frame_size){ 200 int ff_vbv_update(MpegEncContext *s, int frame_size){
201 RateControlContext *rcc= &s->rc_context; 201 RateControlContext *rcc= &s->rc_context;
202 const double fps= (double)s->avctx->frame_rate / (double)s->avctx->frame_rate_base; 202 const double fps= 1/av_q2d(s->avctx->time_base);
203 const int buffer_size= s->avctx->rc_buffer_size; 203 const int buffer_size= s->avctx->rc_buffer_size;
204 const double min_rate= s->avctx->rc_min_rate/fps; 204 const double min_rate= s->avctx->rc_min_rate/fps;
205 const double max_rate= s->avctx->rc_max_rate/fps; 205 const double max_rate= s->avctx->rc_max_rate/fps;
206 206
207 //printf("%d %f %d %f %f\n", buffer_size, rcc->buffer_index, frame_size, min_rate, max_rate); 207 //printf("%d %f %d %f %f\n", buffer_size, rcc->buffer_index, frame_size, min_rate, max_rate);
398 RateControlContext *rcc= &s->rc_context; 398 RateControlContext *rcc= &s->rc_context;
399 int qmin, qmax; 399 int qmin, qmax;
400 double bits; 400 double bits;
401 const int pict_type= rce->new_pict_type; 401 const int pict_type= rce->new_pict_type;
402 const double buffer_size= s->avctx->rc_buffer_size; 402 const double buffer_size= s->avctx->rc_buffer_size;
403 const double fps= (double)s->avctx->frame_rate / (double)s->avctx->frame_rate_base; 403 const double fps= 1/av_q2d(s->avctx->time_base);
404 const double min_rate= s->avctx->rc_min_rate / fps; 404 const double min_rate= s->avctx->rc_min_rate / fps;
405 const double max_rate= s->avctx->rc_max_rate / fps; 405 const double max_rate= s->avctx->rc_max_rate / fps;
406 406
407 get_qminmax(&qmin, &qmax, s, pict_type); 407 get_qminmax(&qmin, &qmax, s, pict_type);
408 408
629 Picture * const pic= &s->current_picture; 629 Picture * const pic= &s->current_picture;
630 emms_c(); 630 emms_c();
631 631
632 get_qminmax(&qmin, &qmax, s, pict_type); 632 get_qminmax(&qmin, &qmax, s, pict_type);
633 633
634 fps= (double)s->avctx->frame_rate / (double)s->avctx->frame_rate_base; 634 fps= 1/av_q2d(s->avctx->time_base);
635 //printf("input_pic_num:%d pic_num:%d frame_rate:%d\n", s->input_picture_number, s->picture_number, s->frame_rate); 635 //printf("input_pic_num:%d pic_num:%d frame_rate:%d\n", s->input_picture_number, s->picture_number, s->frame_rate);
636 /* update predictors */ 636 /* update predictors */
637 if(picture_number>2){ 637 if(picture_number>2){
638 const int last_var= s->last_pict_type == I_TYPE ? rcc->last_mb_var_sum : rcc->last_mc_mb_var_sum; 638 const int last_var= s->last_pict_type == I_TYPE ? rcc->last_mb_var_sum : rcc->last_mc_mb_var_sum;
639 update_predictor(&rcc->pred[s->last_pict_type], rcc->last_qscale, sqrt(last_var), s->frame_bits); 639 update_predictor(&rcc->pred[s->last_pict_type], rcc->last_qscale, sqrt(last_var), s->frame_bits);
755 static int init_pass2(MpegEncContext *s) 755 static int init_pass2(MpegEncContext *s)
756 { 756 {
757 RateControlContext *rcc= &s->rc_context; 757 RateControlContext *rcc= &s->rc_context;
758 AVCodecContext *a= s->avctx; 758 AVCodecContext *a= s->avctx;
759 int i; 759 int i;
760 double fps= (double)s->avctx->frame_rate / (double)s->avctx->frame_rate_base; 760 double fps= 1/av_q2d(s->avctx->time_base);
761 double complexity[5]={0,0,0,0,0}; // aproximate bits at quant=1 761 double complexity[5]={0,0,0,0,0}; // aproximate bits at quant=1
762 double avg_quantizer[5]; 762 double avg_quantizer[5];
763 uint64_t const_bits[5]={0,0,0,0,0}; // quantizer idependant bits 763 uint64_t const_bits[5]={0,0,0,0,0}; // quantizer idependant bits
764 uint64_t available_bits[5]; 764 uint64_t available_bits[5];
765 uint64_t all_const_bits; 765 uint64_t all_const_bits;