Mercurial > libavcodec.hg
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; |