2 * Rate control for video encoders
4 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 * Rate control for video encoders.
28 #include "mpegvideo.h"
30 #undef NDEBUG // allways check asserts, the speed effect is far too small to disable them
34 #define M_E 2.718281828
37 static int init_pass2(MpegEncContext
*s
);
38 static double get_qscale(MpegEncContext
*s
, RateControlEntry
*rce
, double rate_factor
, int frame_num
);
40 void ff_write_pass1_stats(MpegEncContext
*s
){
41 snprintf(s
->avctx
->stats_out
, 256, "in:%d out:%d type:%d q:%d itex:%d ptex:%d mv:%d misc:%d fcode:%d bcode:%d mc-var:%d var:%d icount:%d;\n",
42 s
->current_picture_ptr
->display_picture_number
, s
->current_picture_ptr
->coded_picture_number
, s
->pict_type
,
43 s
->current_picture
.quality
, s
->i_tex_bits
, s
->p_tex_bits
, s
->mv_bits
, s
->misc_bits
,
44 s
->f_code
, s
->b_code
, s
->current_picture
.mc_mb_var_sum
, s
->current_picture
.mb_var_sum
, s
->i_count
);
47 int ff_rate_control_init(MpegEncContext
*s
)
49 RateControlContext
*rcc
= &s
->rc_context
;
54 rcc
->pred
[i
].coeff
= FF_QP2LAMBDA
* 7.0;
55 rcc
->pred
[i
].count
= 1.0;
57 rcc
->pred
[i
].decay
= 0.4;
62 rcc
->frame_count
[i
]= 1; // 1 is better cuz of 1/0 and such
63 rcc
->last_qscale_for
[i
]=FF_QP2LAMBDA
* 5;
65 rcc
->buffer_index
= s
->avctx
->rc_initial_buffer_occupancy
;
67 if(s
->flags
&CODEC_FLAG_PASS2
){
71 /* find number of pics */
72 p
= s
->avctx
->stats_in
;
77 if(i
<=0 || i
>=INT_MAX
/ sizeof(RateControlEntry
))
79 rcc
->entry
= (RateControlEntry
*)av_mallocz(i
*sizeof(RateControlEntry
));
82 /* init all to skipped p frames (with b frames we might have a not encoded frame at the end FIXME) */
83 for(i
=0; i
<rcc
->num_entries
; i
++){
84 RateControlEntry
*rce
= &rcc
->entry
[i
];
85 rce
->pict_type
= rce
->new_pict_type
=P_TYPE
;
86 rce
->qscale
= rce
->new_qscale
=FF_QP2LAMBDA
* 2;
87 rce
->misc_bits
= s
->mb_num
+ 10;
88 rce
->mb_var_sum
= s
->mb_num
*100;
92 p
= s
->avctx
->stats_in
;
93 for(i
=0; i
<rcc
->num_entries
- s
->max_b_frames
; i
++){
94 RateControlEntry
*rce
;
101 (*next
)=0; //sscanf in unbelieavle slow on looong strings //FIXME copy / dont write
104 e
= sscanf(p
, " in:%d ", &picture_number
);
106 assert(picture_number
>= 0);
107 assert(picture_number
< rcc
->num_entries
);
108 rce
= &rcc
->entry
[picture_number
];
110 e
+=sscanf(p
, " in:%*d out:%*d type:%d q:%f itex:%d ptex:%d mv:%d misc:%d fcode:%d bcode:%d mc-var:%d var:%d icount:%d",
111 &rce
->pict_type
, &rce
->qscale
, &rce
->i_tex_bits
, &rce
->p_tex_bits
, &rce
->mv_bits
, &rce
->misc_bits
,
112 &rce
->f_code
, &rce
->b_code
, &rce
->mc_mb_var_sum
, &rce
->mb_var_sum
, &rce
->i_count
);
114 av_log(s
->avctx
, AV_LOG_ERROR
, "statistics are damaged at line %d, parser out=%d\n", i
, e
);
120 if(init_pass2(s
) < 0) return -1;
123 if(!(s
->flags
&CODEC_FLAG_PASS2
)){
125 rcc
->short_term_qsum
=0.001;
126 rcc
->short_term_qcount
=0.001;
128 rcc
->pass1_rc_eq_output_sum
= 0.001;
129 rcc
->pass1_wanted_bits
=0.001;
131 /* init stuff with the user specified complexity */
132 if(s
->avctx
->rc_initial_cplx
){
133 for(i
=0; i
<60*30; i
++){
134 double bits
= s
->avctx
->rc_initial_cplx
* (i
/10000.0 + 1.0)*s
->mb_num
;
135 RateControlEntry rce
;
138 if (i
%((s
->gop_size
+3)/4)==0) rce
.pict_type
= I_TYPE
;
139 else if(i
%(s
->max_b_frames
+1)) rce
.pict_type
= B_TYPE
;
140 else rce
.pict_type
= P_TYPE
;
142 rce
.new_pict_type
= rce
.pict_type
;
143 rce
.mc_mb_var_sum
= bits
*s
->mb_num
/100000;
144 rce
.mb_var_sum
= s
->mb_num
;
145 rce
.qscale
= FF_QP2LAMBDA
* 2;
150 if(s
->pict_type
== I_TYPE
){
151 rce
.i_count
= s
->mb_num
;
152 rce
.i_tex_bits
= bits
;
156 rce
.i_count
= 0; //FIXME we do know this approx
158 rce
.p_tex_bits
= bits
*0.9;
159 rce
.mv_bits
= bits
*0.1;
161 rcc
->i_cplx_sum
[rce
.pict_type
] += rce
.i_tex_bits
*rce
.qscale
;
162 rcc
->p_cplx_sum
[rce
.pict_type
] += rce
.p_tex_bits
*rce
.qscale
;
163 rcc
->mv_bits_sum
[rce
.pict_type
] += rce
.mv_bits
;
164 rcc
->frame_count
[rce
.pict_type
] ++;
166 bits
= rce
.i_tex_bits
+ rce
.p_tex_bits
;
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
/(1/av_q2d(s
->avctx
->time_base
)); //FIXME missbehaves a little for variable fps
178 void ff_rate_control_uninit(MpegEncContext
*s
)
180 RateControlContext
*rcc
= &s
->rc_context
;
183 av_freep(&rcc
->entry
);
186 static inline double qp2bits(RateControlEntry
*rce
, double qp
){
188 av_log(NULL
, AV_LOG_ERROR
, "qp<=0.0\n");
190 return rce
->qscale
* (double)(rce
->i_tex_bits
+ rce
->p_tex_bits
+1)/ qp
;
193 static inline double bits2qp(RateControlEntry
*rce
, double bits
){
195 av_log(NULL
, AV_LOG_ERROR
, "bits<0.9\n");
197 return rce
->qscale
* (double)(rce
->i_tex_bits
+ rce
->p_tex_bits
+1)/ bits
;
200 int ff_vbv_update(MpegEncContext
*s
, int frame_size
){
201 RateControlContext
*rcc
= &s
->rc_context
;
202 const double fps
= 1/av_q2d(s
->avctx
->time_base
);
203 const int buffer_size
= s
->avctx
->rc_buffer_size
;
204 const double min_rate
= s
->avctx
->rc_min_rate
/fps
;
205 const double max_rate
= s
->avctx
->rc_max_rate
/fps
;
207 //printf("%d %f %d %f %f\n", buffer_size, rcc->buffer_index, frame_size, min_rate, max_rate);
211 rcc
->buffer_index
-= frame_size
;
212 if(rcc
->buffer_index
< 0){
213 av_log(s
->avctx
, AV_LOG_ERROR
, "rc buffer underflow\n");
214 rcc
->buffer_index
= 0;
217 left
= buffer_size
- rcc
->buffer_index
- 1;
218 rcc
->buffer_index
+= clip(left
, min_rate
, max_rate
);
220 if(rcc
->buffer_index
> buffer_size
){
221 int stuffing
= ceil((rcc
->buffer_index
- buffer_size
)/8);
223 if(stuffing
< 4 && s
->codec_id
== CODEC_ID_MPEG4
)
225 rcc
->buffer_index
-= 8*stuffing
;
227 if(s
->avctx
->debug
& FF_DEBUG_RC
)
228 av_log(s
->avctx
, AV_LOG_DEBUG
, "stuffing %d bytes\n", stuffing
);
237 * modifies the bitrate curve from pass1 for one frame
239 static double get_qscale(MpegEncContext
*s
, RateControlEntry
*rce
, double rate_factor
, int frame_num
){
240 RateControlContext
*rcc
= &s
->rc_context
;
241 AVCodecContext
*a
= s
->avctx
;
243 const int pict_type
= rce
->new_pict_type
;
244 const double mb_num
= s
->mb_num
;
247 double const_values
[]={
250 rce
->i_tex_bits
*rce
->qscale
,
251 rce
->p_tex_bits
*rce
->qscale
,
252 (rce
->i_tex_bits
+ rce
->p_tex_bits
)*(double)rce
->qscale
,
254 rce
->pict_type
== B_TYPE
? (rce
->f_code
+ rce
->b_code
)*0.5 : rce
->f_code
,
256 rce
->mc_mb_var_sum
/mb_num
,
257 rce
->mb_var_sum
/mb_num
,
258 rce
->pict_type
== I_TYPE
,
259 rce
->pict_type
== P_TYPE
,
260 rce
->pict_type
== B_TYPE
,
261 rcc
->qscale_sum
[pict_type
] / (double)rcc
->frame_count
[pict_type
],
263 /* rcc->last_qscale_for[I_TYPE],
264 rcc->last_qscale_for[P_TYPE],
265 rcc->last_qscale_for[B_TYPE],
266 rcc->next_non_b_qscale,*/
267 rcc
->i_cplx_sum
[I_TYPE
] / (double)rcc
->frame_count
[I_TYPE
],
268 rcc
->i_cplx_sum
[P_TYPE
] / (double)rcc
->frame_count
[P_TYPE
],
269 rcc
->p_cplx_sum
[P_TYPE
] / (double)rcc
->frame_count
[P_TYPE
],
270 rcc
->p_cplx_sum
[B_TYPE
] / (double)rcc
->frame_count
[B_TYPE
],
271 (rcc
->i_cplx_sum
[pict_type
] + rcc
->p_cplx_sum
[pict_type
]) / (double)rcc
->frame_count
[pict_type
],
274 static const char *const_names
[]={
301 static double (*func1
[])(void *, double)={
306 static const char *func1_names
[]={
312 bits
= ff_eval(s
->avctx
->rc_eq
, const_values
, const_names
, func1
, func1_names
, NULL
, NULL
, rce
);
314 rcc
->pass1_rc_eq_output_sum
+= bits
;
316 if(bits
<0.0) bits
=0.0;
317 bits
+= 1.0; //avoid 1/0 issues
320 for(i
=0; i
<s
->avctx
->rc_override_count
; i
++){
321 RcOverride
*rco
= s
->avctx
->rc_override
;
322 if(rco
[i
].start_frame
> frame_num
) continue;
323 if(rco
[i
].end_frame
< frame_num
) continue;
326 bits
= qp2bits(rce
, rco
[i
].qscale
); //FIXME move at end to really force it?
328 bits
*= rco
[i
].quality_factor
;
331 q
= bits2qp(rce
, bits
);
334 if (pict_type
==I_TYPE
&& s
->avctx
->i_quant_factor
<0.0)
335 q
= -q
*s
->avctx
->i_quant_factor
+ s
->avctx
->i_quant_offset
;
336 else if(pict_type
==B_TYPE
&& s
->avctx
->b_quant_factor
<0.0)
337 q
= -q
*s
->avctx
->b_quant_factor
+ s
->avctx
->b_quant_offset
;
342 static double get_diff_limited_q(MpegEncContext
*s
, RateControlEntry
*rce
, double q
){
343 RateControlContext
*rcc
= &s
->rc_context
;
344 AVCodecContext
*a
= s
->avctx
;
345 const int pict_type
= rce
->new_pict_type
;
346 const double last_p_q
= rcc
->last_qscale_for
[P_TYPE
];
347 const double last_non_b_q
= rcc
->last_qscale_for
[rcc
->last_non_b_pict_type
];
349 if (pict_type
==I_TYPE
&& (a
->i_quant_factor
>0.0 || rcc
->last_non_b_pict_type
==P_TYPE
))
350 q
= last_p_q
*ABS(a
->i_quant_factor
) + a
->i_quant_offset
;
351 else if(pict_type
==B_TYPE
&& a
->b_quant_factor
>0.0)
352 q
= last_non_b_q
* a
->b_quant_factor
+ a
->b_quant_offset
;
354 /* last qscale / qdiff stuff */
355 if(rcc
->last_non_b_pict_type
==pict_type
|| pict_type
!=I_TYPE
){
356 double last_q
= rcc
->last_qscale_for
[pict_type
];
357 const int maxdiff
= FF_QP2LAMBDA
* a
->max_qdiff
;
359 if (q
> last_q
+ maxdiff
) q
= last_q
+ maxdiff
;
360 else if(q
< last_q
- maxdiff
) q
= last_q
- maxdiff
;
363 rcc
->last_qscale_for
[pict_type
]= q
; //Note we cant do that after blurring
365 if(pict_type
!=B_TYPE
)
366 rcc
->last_non_b_pict_type
= pict_type
;
372 * gets the qmin & qmax for pict_type
374 static void get_qminmax(int *qmin_ret
, int *qmax_ret
, MpegEncContext
*s
, int pict_type
){
375 int qmin
= s
->avctx
->lmin
;
376 int qmax
= s
->avctx
->lmax
;
378 assert(qmin
<= qmax
);
380 if(pict_type
==B_TYPE
){
381 qmin
= (int)(qmin
*ABS(s
->avctx
->b_quant_factor
)+s
->avctx
->b_quant_offset
+ 0.5);
382 qmax
= (int)(qmax
*ABS(s
->avctx
->b_quant_factor
)+s
->avctx
->b_quant_offset
+ 0.5);
383 }else if(pict_type
==I_TYPE
){
384 qmin
= (int)(qmin
*ABS(s
->avctx
->i_quant_factor
)+s
->avctx
->i_quant_offset
+ 0.5);
385 qmax
= (int)(qmax
*ABS(s
->avctx
->i_quant_factor
)+s
->avctx
->i_quant_offset
+ 0.5);
388 qmin
= clip(qmin
, 1, FF_LAMBDA_MAX
);
389 qmax
= clip(qmax
, 1, FF_LAMBDA_MAX
);
391 if(qmax
<qmin
) qmax
= qmin
;
397 static double modify_qscale(MpegEncContext
*s
, RateControlEntry
*rce
, double q
, int frame_num
){
398 RateControlContext
*rcc
= &s
->rc_context
;
401 const int pict_type
= rce
->new_pict_type
;
402 const double buffer_size
= s
->avctx
->rc_buffer_size
;
403 const double fps
= 1/av_q2d(s
->avctx
->time_base
);
404 const double min_rate
= s
->avctx
->rc_min_rate
/ fps
;
405 const double max_rate
= s
->avctx
->rc_max_rate
/ fps
;
407 get_qminmax(&qmin
, &qmax
, s
, pict_type
);
410 if(s
->avctx
->rc_qmod_freq
&& frame_num
%s
->avctx
->rc_qmod_freq
==0 && pict_type
==P_TYPE
)
411 q
*= s
->avctx
->rc_qmod_amp
;
413 bits
= qp2bits(rce
, q
);
414 //printf("q:%f\n", q);
415 /* buffer overflow/underflow protection */
417 double expected_size
= rcc
->buffer_index
;
421 double d
= 2*(buffer_size
- expected_size
)/buffer_size
;
423 else if(d
<0.0001) d
=0.0001;
424 q
*= pow(d
, 1.0/s
->avctx
->rc_buffer_aggressivity
);
426 q_limit
= bits2qp(rce
, FFMAX((min_rate
- buffer_size
+ rcc
->buffer_index
)*3, 1));
428 if(s
->avctx
->debug
&FF_DEBUG_RC
){
429 av_log(s
->avctx
, AV_LOG_DEBUG
, "limiting QP %f -> %f\n", q
, q_limit
);
436 double d
= 2*expected_size
/buffer_size
;
438 else if(d
<0.0001) d
=0.0001;
439 q
/= pow(d
, 1.0/s
->avctx
->rc_buffer_aggressivity
);
441 q_limit
= bits2qp(rce
, FFMAX(rcc
->buffer_index
/3, 1));
443 if(s
->avctx
->debug
&FF_DEBUG_RC
){
444 av_log(s
->avctx
, AV_LOG_DEBUG
, "limiting QP %f -> %f\n", q
, q_limit
);
450 //printf("q:%f max:%f min:%f size:%f index:%d bits:%f agr:%f\n", q,max_rate, min_rate, buffer_size, rcc->buffer_index, bits, s->avctx->rc_buffer_aggressivity);
451 if(s
->avctx
->rc_qsquish
==0.0 || qmin
==qmax
){
453 else if(q
>qmax
) q
=qmax
;
455 double min2
= log(qmin
);
456 double max2
= log(qmax
);
459 q
= (q
- min2
)/(max2
-min2
) - 0.5;
461 q
= 1.0/(1.0 + exp(q
));
462 q
= q
*(max2
-min2
) + min2
;
470 //----------------------------------
473 static double predict_size(Predictor
*p
, double q
, double var
)
475 return p
->coeff
*var
/ (q
*p
->count
);
479 static double predict_qp(Predictor *p, double size, double var)
481 //printf("coeff:%f, count:%f, var:%f, size:%f//\n", p->coeff, p->count, var, size);
482 return p->coeff*var / (size*p->count);
486 static void update_predictor(Predictor
*p
, double q
, double var
, double size
)
488 double new_coeff
= size
*q
/ (var
+ 1);
494 p
->coeff
+= new_coeff
;
497 static void adaptive_quantization(MpegEncContext
*s
, double q
){
499 const float lumi_masking
= s
->avctx
->lumi_masking
/ (128.0*128.0);
500 const float dark_masking
= s
->avctx
->dark_masking
/ (128.0*128.0);
501 const float temp_cplx_masking
= s
->avctx
->temporal_cplx_masking
;
502 const float spatial_cplx_masking
= s
->avctx
->spatial_cplx_masking
;
503 const float p_masking
= s
->avctx
->p_masking
;
504 const float border_masking
= s
->avctx
->border_masking
;
507 float cplx_tab
[s
->mb_num
];
508 float bits_tab
[s
->mb_num
];
509 const int qmin
= s
->avctx
->mb_lmin
;
510 const int qmax
= s
->avctx
->mb_lmax
;
511 Picture
* const pic
= &s
->current_picture
;
512 const int mb_width
= s
->mb_width
;
513 const int mb_height
= s
->mb_height
;
515 for(i
=0; i
<s
->mb_num
; i
++){
516 const int mb_xy
= s
->mb_index2xy
[i
];
517 float temp_cplx
= sqrt(pic
->mc_mb_var
[mb_xy
]); //FIXME merge in pow()
518 float spat_cplx
= sqrt(pic
->mb_var
[mb_xy
]);
519 const int lumi
= pic
->mb_mean
[mb_xy
];
520 float bits
, cplx
, factor
;
521 int mb_x
= mb_xy
% s
->mb_stride
;
522 int mb_y
= mb_xy
/ s
->mb_stride
;
524 float mb_factor
= 0.0;
526 if(spat_cplx
< q
/3) spat_cplx
= q
/3; //FIXME finetune
527 if(temp_cplx
< q
/3) temp_cplx
= q
/3; //FIXME finetune
529 if(spat_cplx
< 4) spat_cplx
= 4; //FIXME finetune
530 if(temp_cplx
< 4) temp_cplx
= 4; //FIXME finetune
532 if((s
->mb_type
[mb_xy
]&CANDIDATE_MB_TYPE_INTRA
)){//FIXME hq mode
534 factor
= 1.0 + p_masking
;
537 factor
= pow(temp_cplx
, - temp_cplx_masking
);
539 factor
*=pow(spat_cplx
, - spatial_cplx_masking
);
542 factor
*= (1.0 - (lumi
-128)*(lumi
-128)*lumi_masking
);
544 factor
*= (1.0 - (lumi
-128)*(lumi
-128)*dark_masking
);
546 if(mb_x
< mb_width
/5){
547 mb_distance
= mb_width
/5 - mb_x
;
548 mb_factor
= (float)mb_distance
/ (float)(mb_width
/5);
549 }else if(mb_x
> 4*mb_width
/5){
550 mb_distance
= mb_x
- 4*mb_width
/5;
551 mb_factor
= (float)mb_distance
/ (float)(mb_width
/5);
553 if(mb_y
< mb_height
/5){
554 mb_distance
= mb_height
/5 - mb_y
;
555 mb_factor
= FFMAX(mb_factor
, (float)mb_distance
/ (float)(mb_height
/5));
556 }else if(mb_y
> 4*mb_height
/5){
557 mb_distance
= mb_y
- 4*mb_height
/5;
558 mb_factor
= FFMAX(mb_factor
, (float)mb_distance
/ (float)(mb_height
/5));
561 factor
*= 1.0 - border_masking
*mb_factor
;
563 if(factor
<0.00001) factor
= 0.00001;
572 /* handle qmin/qmax cliping */
573 if(s
->flags
&CODEC_FLAG_NORMALIZE_AQP
){
574 float factor
= bits_sum
/cplx_sum
;
575 for(i
=0; i
<s
->mb_num
; i
++){
576 float newq
= q
*cplx_tab
[i
]/bits_tab
[i
];
580 bits_sum
-= bits_tab
[i
];
581 cplx_sum
-= cplx_tab
[i
]*q
/qmax
;
583 else if(newq
< qmin
){
584 bits_sum
-= bits_tab
[i
];
585 cplx_sum
-= cplx_tab
[i
]*q
/qmin
;
588 if(bits_sum
< 0.001) bits_sum
= 0.001;
589 if(cplx_sum
< 0.001) cplx_sum
= 0.001;
592 for(i
=0; i
<s
->mb_num
; i
++){
593 const int mb_xy
= s
->mb_index2xy
[i
];
594 float newq
= q
*cplx_tab
[i
]/bits_tab
[i
];
597 if(s
->flags
&CODEC_FLAG_NORMALIZE_AQP
){
598 newq
*= bits_sum
/cplx_sum
;
601 intq
= (int)(newq
+ 0.5);
603 if (intq
> qmax
) intq
= qmax
;
604 else if(intq
< qmin
) intq
= qmin
;
605 //if(i%s->mb_width==0) printf("\n");
606 //printf("%2d%3d ", intq, ff_sqrt(s->mc_mb_var[i]));
607 s
->lambda_table
[mb_xy
]= intq
;
610 //FIXME rd or at least approx for dquant
612 float ff_rate_estimate_qscale(MpegEncContext
*s
)
616 float br_compensation
;
620 int picture_number
= s
->picture_number
;
622 RateControlContext
*rcc
= &s
->rc_context
;
623 AVCodecContext
*a
= s
->avctx
;
624 RateControlEntry local_rce
, *rce
;
628 const int pict_type
= s
->pict_type
;
629 Picture
* const pic
= &s
->current_picture
;
632 get_qminmax(&qmin
, &qmax
, s
, pict_type
);
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);
636 /* update predictors */
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
;
639 update_predictor(&rcc
->pred
[s
->last_pict_type
], rcc
->last_qscale
, sqrt(last_var
), s
->frame_bits
);
642 if(s
->flags
&CODEC_FLAG_PASS2
){
643 assert(picture_number
>=0);
644 assert(picture_number
<rcc
->num_entries
);
645 rce
= &rcc
->entry
[picture_number
];
646 wanted_bits
= rce
->expected_bits
;
649 wanted_bits
= (uint64_t)(s
->bit_rate
*(double)picture_number
/fps
);
652 diff
= s
->total_bits
- wanted_bits
;
653 br_compensation
= (a
->bit_rate_tolerance
- diff
)/a
->bit_rate_tolerance
;
654 if(br_compensation
<=0.0) br_compensation
=0.001;
656 var
= pict_type
== I_TYPE
? pic
->mb_var_sum
: pic
->mc_mb_var_sum
;
658 short_term_q
= 0; /* avoid warning */
659 if(s
->flags
&CODEC_FLAG_PASS2
){
660 if(pict_type
!=I_TYPE
)
661 assert(pict_type
== rce
->new_pict_type
);
663 q
= rce
->new_qscale
/ br_compensation
;
664 //printf("%f %f %f last:%d var:%d type:%d//\n", q, rce->new_qscale, br_compensation, s->frame_bits, var, pict_type);
667 rce
->new_pict_type
= pict_type
;
668 rce
->mc_mb_var_sum
= pic
->mc_mb_var_sum
;
669 rce
->mb_var_sum
= pic
-> mb_var_sum
;
670 rce
->qscale
= FF_QP2LAMBDA
* 2;
671 rce
->f_code
= s
->f_code
;
672 rce
->b_code
= s
->b_code
;
675 bits
= predict_size(&rcc
->pred
[pict_type
], rce
->qscale
, sqrt(var
));
676 if(pict_type
== I_TYPE
){
677 rce
->i_count
= s
->mb_num
;
678 rce
->i_tex_bits
= bits
;
682 rce
->i_count
= 0; //FIXME we do know this approx
684 rce
->p_tex_bits
= bits
*0.9;
686 rce
->mv_bits
= bits
*0.1;
688 rcc
->i_cplx_sum
[pict_type
] += rce
->i_tex_bits
*rce
->qscale
;
689 rcc
->p_cplx_sum
[pict_type
] += rce
->p_tex_bits
*rce
->qscale
;
690 rcc
->mv_bits_sum
[pict_type
] += rce
->mv_bits
;
691 rcc
->frame_count
[pict_type
] ++;
693 bits
= rce
->i_tex_bits
+ rce
->p_tex_bits
;
694 rate_factor
= rcc
->pass1_wanted_bits
/rcc
->pass1_rc_eq_output_sum
* br_compensation
;
696 q
= get_qscale(s
, rce
, rate_factor
, picture_number
);
700 q
= get_diff_limited_q(s
, rce
, q
);
704 if(pict_type
==P_TYPE
|| s
->intra_only
){ //FIXME type dependant blur like in 2-pass
705 rcc
->short_term_qsum
*=a
->qblur
;
706 rcc
->short_term_qcount
*=a
->qblur
;
708 rcc
->short_term_qsum
+= q
;
709 rcc
->short_term_qcount
++;
711 q
= short_term_q
= rcc
->short_term_qsum
/rcc
->short_term_qcount
;
716 q
= modify_qscale(s
, rce
, q
, picture_number
);
718 rcc
->pass1_wanted_bits
+= s
->bit_rate
/fps
;
723 if(s
->avctx
->debug
&FF_DEBUG_RC
){
724 av_log(s
->avctx
, AV_LOG_DEBUG
, "%c qp:%d<%2.1f<%d %d want:%d total:%d comp:%f st_q:%2.2f size:%d var:%d/%d br:%d fps:%d\n",
725 av_get_pict_type_char(pict_type
), qmin
, q
, qmax
, picture_number
, (int)wanted_bits
/1000, (int)s
->total_bits
/1000,
726 br_compensation
, short_term_q
, s
->frame_bits
, pic
->mb_var_sum
, pic
->mc_mb_var_sum
, s
->bit_rate
/1000, (int)fps
731 else if(q
>qmax
) q
=qmax
;
733 if(s
->adaptive_quant
)
734 adaptive_quantization(s
, q
);
739 rcc
->last_mc_mb_var_sum
= pic
->mc_mb_var_sum
;
740 rcc
->last_mb_var_sum
= pic
->mb_var_sum
;
743 static int mvsum
=0, texsum
=0;
745 texsum
+= s
->i_tex_bits
+ s
->p_tex_bits
;
746 printf("%d %d//\n\n", mvsum
, texsum
);
752 //----------------------------------------------
755 static int init_pass2(MpegEncContext
*s
)
757 RateControlContext
*rcc
= &s
->rc_context
;
758 AVCodecContext
*a
= s
->avctx
;
760 double fps
= 1/av_q2d(s
->avctx
->time_base
);
761 double complexity
[5]={0,0,0,0,0}; // aproximate bits at quant=1
762 double avg_quantizer
[5];
763 uint64_t const_bits
[5]={0,0,0,0,0}; // quantizer idependant bits
764 uint64_t available_bits
[5];
765 uint64_t all_const_bits
;
766 uint64_t all_available_bits
= (uint64_t)(s
->bit_rate
*(double)rcc
->num_entries
/fps
);
767 double rate_factor
=0;
769 //int last_i_frame=-10000000;
770 const int filter_size
= (int)(a
->qblur
*4) | 1;
771 double expected_bits
;
772 double *qscale
, *blured_qscale
;
774 /* find complexity & const_bits & decide the pict_types */
775 for(i
=0; i
<rcc
->num_entries
; i
++){
776 RateControlEntry
*rce
= &rcc
->entry
[i
];
778 rce
->new_pict_type
= rce
->pict_type
;
779 rcc
->i_cplx_sum
[rce
->pict_type
] += rce
->i_tex_bits
*rce
->qscale
;
780 rcc
->p_cplx_sum
[rce
->pict_type
] += rce
->p_tex_bits
*rce
->qscale
;
781 rcc
->mv_bits_sum
[rce
->pict_type
] += rce
->mv_bits
;
782 rcc
->frame_count
[rce
->pict_type
] ++;
784 complexity
[rce
->new_pict_type
]+= (rce
->i_tex_bits
+ rce
->p_tex_bits
)*(double)rce
->qscale
;
785 const_bits
[rce
->new_pict_type
]+= rce
->mv_bits
+ rce
->misc_bits
;
787 all_const_bits
= const_bits
[I_TYPE
] + const_bits
[P_TYPE
] + const_bits
[B_TYPE
];
789 if(all_available_bits
< all_const_bits
){
790 av_log(s
->avctx
, AV_LOG_ERROR
, "requested bitrate is to low\n");
794 /* find average quantizers */
795 avg_quantizer
[P_TYPE
]=0;
796 for(step
=256*256; step
>0.0000001; step
*=0.5){
797 double expected_bits
=0;
798 avg_quantizer
[P_TYPE
]+= step
;
800 avg_quantizer
[I_TYPE
]= avg_quantizer
[P_TYPE
]*ABS(s
->avctx
->i_quant_factor
) + s
->avctx
->i_quant_offset
;
801 avg_quantizer
[B_TYPE
]= avg_quantizer
[P_TYPE
]*ABS(s
->avctx
->b_quant_factor
) + s
->avctx
->b_quant_offset
;
805 + complexity
[I_TYPE
]/avg_quantizer
[I_TYPE
]
806 + complexity
[P_TYPE
]/avg_quantizer
[P_TYPE
]
807 + complexity
[B_TYPE
]/avg_quantizer
[B_TYPE
];
809 if(expected_bits
< all_available_bits
) avg_quantizer
[P_TYPE
]-= step
;
810 //printf("%f %lld %f\n", expected_bits, all_available_bits, avg_quantizer[P_TYPE]);
812 //printf("qp_i:%f, qp_p:%f, qp_b:%f\n", avg_quantizer[I_TYPE],avg_quantizer[P_TYPE],avg_quantizer[B_TYPE]);
815 available_bits
[i
]= const_bits
[i
] + complexity
[i
]/avg_quantizer
[i
];
817 //printf("%lld %lld %lld %lld\n", available_bits[I_TYPE], available_bits[P_TYPE], available_bits[B_TYPE], all_available_bits);
819 qscale
= av_malloc(sizeof(double)*rcc
->num_entries
);
820 blured_qscale
= av_malloc(sizeof(double)*rcc
->num_entries
);
822 for(step
=256*256; step
>0.0000001; step
*=0.5){
826 rcc
->buffer_index
= s
->avctx
->rc_buffer_size
/2;
829 for(i
=0; i
<rcc
->num_entries
; i
++){
830 qscale
[i
]= get_qscale(s
, &rcc
->entry
[i
], rate_factor
, i
);
832 assert(filter_size
%2==1);
834 /* fixed I/B QP relative to P mode */
835 for(i
=rcc
->num_entries
-1; i
>=0; i
--){
836 RateControlEntry
*rce
= &rcc
->entry
[i
];
838 qscale
[i
]= get_diff_limited_q(s
, rce
, qscale
[i
]);
842 for(i
=0; i
<rcc
->num_entries
; i
++){
843 RateControlEntry
*rce
= &rcc
->entry
[i
];
844 const int pict_type
= rce
->new_pict_type
;
846 double q
=0.0, sum
=0.0;
848 for(j
=0; j
<filter_size
; j
++){
849 int index
= i
+j
-filter_size
/2;
851 double coeff
= a
->qblur
==0 ? 1.0 : exp(-d
*d
/(a
->qblur
* a
->qblur
));
853 if(index
< 0 || index
>= rcc
->num_entries
) continue;
854 if(pict_type
!= rcc
->entry
[index
].new_pict_type
) continue;
855 q
+= qscale
[index
] * coeff
;
858 blured_qscale
[i
]= q
/sum
;
861 /* find expected bits */
862 for(i
=0; i
<rcc
->num_entries
; i
++){
863 RateControlEntry
*rce
= &rcc
->entry
[i
];
865 rce
->new_qscale
= modify_qscale(s
, rce
, blured_qscale
[i
], i
);
866 bits
= qp2bits(rce
, rce
->new_qscale
) + rce
->mv_bits
+ rce
->misc_bits
;
867 //printf("%d %f\n", rce->new_bits, blured_qscale[i]);
868 bits
+= 8*ff_vbv_update(s
, bits
);
870 rce
->expected_bits
= expected_bits
;
871 expected_bits
+= bits
;
874 // printf("%f %d %f\n", expected_bits, (int)all_available_bits, rate_factor);
875 if(expected_bits
> all_available_bits
) rate_factor
-= step
;
878 av_free(blured_qscale
);
880 if(abs(expected_bits
/all_available_bits
- 1.0) > 0.01 ){
881 av_log(s
->avctx
, AV_LOG_ERROR
, "Error: 2pass curve failed to converge\n");