2 * Rate control for video encoders
4 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
6 * This file is part of FFmpeg.
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 * Rate control for video encoders.
30 #include "ratecontrol.h"
31 #include "mpegvideo.h"
34 #undef NDEBUG // Always check asserts, the speed effect is far too small to disable them.
38 #define M_E 2.718281828
41 static int init_pass2(MpegEncContext
*s
);
42 static double get_qscale(MpegEncContext
*s
, RateControlEntry
*rce
, double rate_factor
, int frame_num
);
44 void ff_write_pass1_stats(MpegEncContext
*s
){
45 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 skipcount:%d hbits:%d;\n",
46 s
->current_picture_ptr
->display_picture_number
, s
->current_picture_ptr
->coded_picture_number
, s
->pict_type
,
47 s
->current_picture
.quality
, s
->i_tex_bits
, s
->p_tex_bits
, s
->mv_bits
, s
->misc_bits
,
48 s
->f_code
, s
->b_code
, s
->current_picture
.mc_mb_var_sum
, s
->current_picture
.mb_var_sum
, s
->i_count
, s
->skip_count
, s
->header_bits
);
51 static inline double qp2bits(RateControlEntry
*rce
, double qp
){
53 av_log(NULL
, AV_LOG_ERROR
, "qp<=0.0\n");
55 return rce
->qscale
* (double)(rce
->i_tex_bits
+ rce
->p_tex_bits
+1)/ qp
;
58 static inline double bits2qp(RateControlEntry
*rce
, double bits
){
60 av_log(NULL
, AV_LOG_ERROR
, "bits<0.9\n");
62 return rce
->qscale
* (double)(rce
->i_tex_bits
+ rce
->p_tex_bits
+1)/ bits
;
65 int ff_rate_control_init(MpegEncContext
*s
)
67 RateControlContext
*rcc
= &s
->rc_context
;
69 const char *error
= NULL
;
70 static const char * const const_names
[]={
97 static double (*func1
[])(void *, double)={
102 static const char * const func1_names
[]={
109 rcc
->rc_eq_eval
= ff_parse(s
->avctx
->rc_eq
? s
->avctx
->rc_eq
: "tex^qComp", const_names
, func1
, func1_names
, NULL
, NULL
, &error
);
110 if (!rcc
->rc_eq_eval
) {
111 av_log(s
->avctx
, AV_LOG_ERROR
, "Error parsing rc_eq \"%s\": %s\n", s
->avctx
->rc_eq
, error
? error
: "");
116 rcc
->pred
[i
].coeff
= FF_QP2LAMBDA
* 7.0;
117 rcc
->pred
[i
].count
= 1.0;
119 rcc
->pred
[i
].decay
= 0.4;
124 rcc
->frame_count
[i
]= 1; // 1 is better because of 1/0 and such
125 rcc
->last_qscale_for
[i
]=FF_QP2LAMBDA
* 5;
127 rcc
->buffer_index
= s
->avctx
->rc_initial_buffer_occupancy
;
129 if(s
->flags
&CODEC_FLAG_PASS2
){
133 /* find number of pics */
134 p
= s
->avctx
->stats_in
;
139 if(i
<=0 || i
>=INT_MAX
/ sizeof(RateControlEntry
))
141 rcc
->entry
= av_mallocz(i
*sizeof(RateControlEntry
));
144 /* init all to skipped p frames (with b frames we might have a not encoded frame at the end FIXME) */
145 for(i
=0; i
<rcc
->num_entries
; i
++){
146 RateControlEntry
*rce
= &rcc
->entry
[i
];
147 rce
->pict_type
= rce
->new_pict_type
=FF_P_TYPE
;
148 rce
->qscale
= rce
->new_qscale
=FF_QP2LAMBDA
* 2;
149 rce
->misc_bits
= s
->mb_num
+ 10;
150 rce
->mb_var_sum
= s
->mb_num
*100;
154 p
= s
->avctx
->stats_in
;
155 for(i
=0; i
<rcc
->num_entries
- s
->max_b_frames
; i
++){
156 RateControlEntry
*rce
;
161 next
= strchr(p
, ';');
163 (*next
)=0; //sscanf in unbelievably slow on looong strings //FIXME copy / do not write
166 e
= sscanf(p
, " in:%d ", &picture_number
);
168 assert(picture_number
>= 0);
169 assert(picture_number
< rcc
->num_entries
);
170 rce
= &rcc
->entry
[picture_number
];
172 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 skipcount:%d hbits:%d",
173 &rce
->pict_type
, &rce
->qscale
, &rce
->i_tex_bits
, &rce
->p_tex_bits
, &rce
->mv_bits
, &rce
->misc_bits
,
174 &rce
->f_code
, &rce
->b_code
, &rce
->mc_mb_var_sum
, &rce
->mb_var_sum
, &rce
->i_count
, &rce
->skip_count
, &rce
->header_bits
);
176 av_log(s
->avctx
, AV_LOG_ERROR
, "statistics are damaged at line %d, parser out=%d\n", i
, e
);
183 if(init_pass2(s
) < 0) return -1;
185 //FIXME maybe move to end
186 if((s
->flags
&CODEC_FLAG_PASS2
) && s
->avctx
->rc_strategy
== FF_RC_STRATEGY_XVID
) {
187 #ifdef CONFIG_LIBXVID
188 return ff_xvid_rate_control_init(s
);
190 av_log(s
->avctx
, AV_LOG_ERROR
, "Xvid ratecontrol requires libavcodec compiled with Xvid support.\n");
196 if(!(s
->flags
&CODEC_FLAG_PASS2
)){
198 rcc
->short_term_qsum
=0.001;
199 rcc
->short_term_qcount
=0.001;
201 rcc
->pass1_rc_eq_output_sum
= 0.001;
202 rcc
->pass1_wanted_bits
=0.001;
204 if(s
->avctx
->qblur
> 1.0){
205 av_log(s
->avctx
, AV_LOG_ERROR
, "qblur too large\n");
208 /* init stuff with the user specified complexity */
209 if(s
->avctx
->rc_initial_cplx
){
210 for(i
=0; i
<60*30; i
++){
211 double bits
= s
->avctx
->rc_initial_cplx
* (i
/10000.0 + 1.0)*s
->mb_num
;
212 RateControlEntry rce
;
215 if (i
%((s
->gop_size
+3)/4)==0) rce
.pict_type
= FF_I_TYPE
;
216 else if(i
%(s
->max_b_frames
+1)) rce
.pict_type
= FF_B_TYPE
;
217 else rce
.pict_type
= FF_P_TYPE
;
219 rce
.new_pict_type
= rce
.pict_type
;
220 rce
.mc_mb_var_sum
= bits
*s
->mb_num
/100000;
221 rce
.mb_var_sum
= s
->mb_num
;
222 rce
.qscale
= FF_QP2LAMBDA
* 2;
227 if(s
->pict_type
== FF_I_TYPE
){
228 rce
.i_count
= s
->mb_num
;
229 rce
.i_tex_bits
= bits
;
233 rce
.i_count
= 0; //FIXME we do know this approx
235 rce
.p_tex_bits
= bits
*0.9;
236 rce
.mv_bits
= bits
*0.1;
238 rcc
->i_cplx_sum
[rce
.pict_type
] += rce
.i_tex_bits
*rce
.qscale
;
239 rcc
->p_cplx_sum
[rce
.pict_type
] += rce
.p_tex_bits
*rce
.qscale
;
240 rcc
->mv_bits_sum
[rce
.pict_type
] += rce
.mv_bits
;
241 rcc
->frame_count
[rce
.pict_type
] ++;
243 bits
= rce
.i_tex_bits
+ rce
.p_tex_bits
;
245 q
= get_qscale(s
, &rce
, rcc
->pass1_wanted_bits
/rcc
->pass1_rc_eq_output_sum
, i
);
246 rcc
->pass1_wanted_bits
+= s
->bit_rate
/(1/av_q2d(s
->avctx
->time_base
)); //FIXME misbehaves a little for variable fps
255 void ff_rate_control_uninit(MpegEncContext
*s
)
257 RateControlContext
*rcc
= &s
->rc_context
;
260 ff_eval_free(rcc
->rc_eq_eval
);
261 av_freep(&rcc
->entry
);
263 #ifdef CONFIG_LIBXVID
264 if((s
->flags
&CODEC_FLAG_PASS2
) && s
->avctx
->rc_strategy
== FF_RC_STRATEGY_XVID
)
265 ff_xvid_rate_control_uninit(s
);
269 int ff_vbv_update(MpegEncContext
*s
, int frame_size
){
270 RateControlContext
*rcc
= &s
->rc_context
;
271 const double fps
= 1/av_q2d(s
->avctx
->time_base
);
272 const int buffer_size
= s
->avctx
->rc_buffer_size
;
273 const double min_rate
= s
->avctx
->rc_min_rate
/fps
;
274 const double max_rate
= s
->avctx
->rc_max_rate
/fps
;
276 //printf("%d %f %d %f %f\n", buffer_size, rcc->buffer_index, frame_size, min_rate, max_rate);
280 rcc
->buffer_index
-= frame_size
;
281 if(rcc
->buffer_index
< 0){
282 av_log(s
->avctx
, AV_LOG_ERROR
, "rc buffer underflow\n");
283 rcc
->buffer_index
= 0;
286 left
= buffer_size
- rcc
->buffer_index
- 1;
287 rcc
->buffer_index
+= av_clip(left
, min_rate
, max_rate
);
289 if(rcc
->buffer_index
> buffer_size
){
290 int stuffing
= ceil((rcc
->buffer_index
- buffer_size
)/8);
292 if(stuffing
< 4 && s
->codec_id
== CODEC_ID_MPEG4
)
294 rcc
->buffer_index
-= 8*stuffing
;
296 if(s
->avctx
->debug
& FF_DEBUG_RC
)
297 av_log(s
->avctx
, AV_LOG_DEBUG
, "stuffing %d bytes\n", stuffing
);
306 * modifies the bitrate curve from pass1 for one frame
308 static double get_qscale(MpegEncContext
*s
, RateControlEntry
*rce
, double rate_factor
, int frame_num
){
309 RateControlContext
*rcc
= &s
->rc_context
;
310 AVCodecContext
*a
= s
->avctx
;
312 const int pict_type
= rce
->new_pict_type
;
313 const double mb_num
= s
->mb_num
;
316 double const_values
[]={
319 rce
->i_tex_bits
*rce
->qscale
,
320 rce
->p_tex_bits
*rce
->qscale
,
321 (rce
->i_tex_bits
+ rce
->p_tex_bits
)*(double)rce
->qscale
,
323 rce
->pict_type
== FF_B_TYPE
? (rce
->f_code
+ rce
->b_code
)*0.5 : rce
->f_code
,
325 rce
->mc_mb_var_sum
/mb_num
,
326 rce
->mb_var_sum
/mb_num
,
327 rce
->pict_type
== FF_I_TYPE
,
328 rce
->pict_type
== FF_P_TYPE
,
329 rce
->pict_type
== FF_B_TYPE
,
330 rcc
->qscale_sum
[pict_type
] / (double)rcc
->frame_count
[pict_type
],
332 /* rcc->last_qscale_for[FF_I_TYPE],
333 rcc->last_qscale_for[FF_P_TYPE],
334 rcc->last_qscale_for[FF_B_TYPE],
335 rcc->next_non_b_qscale,*/
336 rcc
->i_cplx_sum
[FF_I_TYPE
] / (double)rcc
->frame_count
[FF_I_TYPE
],
337 rcc
->i_cplx_sum
[FF_P_TYPE
] / (double)rcc
->frame_count
[FF_P_TYPE
],
338 rcc
->p_cplx_sum
[FF_P_TYPE
] / (double)rcc
->frame_count
[FF_P_TYPE
],
339 rcc
->p_cplx_sum
[FF_B_TYPE
] / (double)rcc
->frame_count
[FF_B_TYPE
],
340 (rcc
->i_cplx_sum
[pict_type
] + rcc
->p_cplx_sum
[pict_type
]) / (double)rcc
->frame_count
[pict_type
],
344 bits
= ff_parse_eval(rcc
->rc_eq_eval
, const_values
, rce
);
346 av_log(s
->avctx
, AV_LOG_ERROR
, "Error evaluating rc_eq \"%s\"\n", s
->avctx
->rc_eq
);
350 rcc
->pass1_rc_eq_output_sum
+= bits
;
352 if(bits
<0.0) bits
=0.0;
353 bits
+= 1.0; //avoid 1/0 issues
356 for(i
=0; i
<s
->avctx
->rc_override_count
; i
++){
357 RcOverride
*rco
= s
->avctx
->rc_override
;
358 if(rco
[i
].start_frame
> frame_num
) continue;
359 if(rco
[i
].end_frame
< frame_num
) continue;
362 bits
= qp2bits(rce
, rco
[i
].qscale
); //FIXME move at end to really force it?
364 bits
*= rco
[i
].quality_factor
;
367 q
= bits2qp(rce
, bits
);
370 if (pict_type
==FF_I_TYPE
&& s
->avctx
->i_quant_factor
<0.0)
371 q
= -q
*s
->avctx
->i_quant_factor
+ s
->avctx
->i_quant_offset
;
372 else if(pict_type
==FF_B_TYPE
&& s
->avctx
->b_quant_factor
<0.0)
373 q
= -q
*s
->avctx
->b_quant_factor
+ s
->avctx
->b_quant_offset
;
379 static double get_diff_limited_q(MpegEncContext
*s
, RateControlEntry
*rce
, double q
){
380 RateControlContext
*rcc
= &s
->rc_context
;
381 AVCodecContext
*a
= s
->avctx
;
382 const int pict_type
= rce
->new_pict_type
;
383 const double last_p_q
= rcc
->last_qscale_for
[FF_P_TYPE
];
384 const double last_non_b_q
= rcc
->last_qscale_for
[rcc
->last_non_b_pict_type
];
386 if (pict_type
==FF_I_TYPE
&& (a
->i_quant_factor
>0.0 || rcc
->last_non_b_pict_type
==FF_P_TYPE
))
387 q
= last_p_q
*FFABS(a
->i_quant_factor
) + a
->i_quant_offset
;
388 else if(pict_type
==FF_B_TYPE
&& a
->b_quant_factor
>0.0)
389 q
= last_non_b_q
* a
->b_quant_factor
+ a
->b_quant_offset
;
392 /* last qscale / qdiff stuff */
393 if(rcc
->last_non_b_pict_type
==pict_type
|| pict_type
!=FF_I_TYPE
){
394 double last_q
= rcc
->last_qscale_for
[pict_type
];
395 const int maxdiff
= FF_QP2LAMBDA
* a
->max_qdiff
;
397 if (q
> last_q
+ maxdiff
) q
= last_q
+ maxdiff
;
398 else if(q
< last_q
- maxdiff
) q
= last_q
- maxdiff
;
401 rcc
->last_qscale_for
[pict_type
]= q
; //Note we cannot do that after blurring
403 if(pict_type
!=FF_B_TYPE
)
404 rcc
->last_non_b_pict_type
= pict_type
;
410 * gets the qmin & qmax for pict_type
412 static void get_qminmax(int *qmin_ret
, int *qmax_ret
, MpegEncContext
*s
, int pict_type
){
413 int qmin
= s
->avctx
->lmin
;
414 int qmax
= s
->avctx
->lmax
;
416 assert(qmin
<= qmax
);
418 if(pict_type
==FF_B_TYPE
){
419 qmin
= (int)(qmin
*FFABS(s
->avctx
->b_quant_factor
)+s
->avctx
->b_quant_offset
+ 0.5);
420 qmax
= (int)(qmax
*FFABS(s
->avctx
->b_quant_factor
)+s
->avctx
->b_quant_offset
+ 0.5);
421 }else if(pict_type
==FF_I_TYPE
){
422 qmin
= (int)(qmin
*FFABS(s
->avctx
->i_quant_factor
)+s
->avctx
->i_quant_offset
+ 0.5);
423 qmax
= (int)(qmax
*FFABS(s
->avctx
->i_quant_factor
)+s
->avctx
->i_quant_offset
+ 0.5);
426 qmin
= av_clip(qmin
, 1, FF_LAMBDA_MAX
);
427 qmax
= av_clip(qmax
, 1, FF_LAMBDA_MAX
);
429 if(qmax
<qmin
) qmax
= qmin
;
435 static double modify_qscale(MpegEncContext
*s
, RateControlEntry
*rce
, double q
, int frame_num
){
436 RateControlContext
*rcc
= &s
->rc_context
;
439 const int pict_type
= rce
->new_pict_type
;
440 const double buffer_size
= s
->avctx
->rc_buffer_size
;
441 const double fps
= 1/av_q2d(s
->avctx
->time_base
);
442 const double min_rate
= s
->avctx
->rc_min_rate
/ fps
;
443 const double max_rate
= s
->avctx
->rc_max_rate
/ fps
;
445 get_qminmax(&qmin
, &qmax
, s
, pict_type
);
448 if(s
->avctx
->rc_qmod_freq
&& frame_num
%s
->avctx
->rc_qmod_freq
==0 && pict_type
==FF_P_TYPE
)
449 q
*= s
->avctx
->rc_qmod_amp
;
451 bits
= qp2bits(rce
, q
);
452 //printf("q:%f\n", q);
453 /* buffer overflow/underflow protection */
455 double expected_size
= rcc
->buffer_index
;
459 double d
= 2*(buffer_size
- expected_size
)/buffer_size
;
461 else if(d
<0.0001) d
=0.0001;
462 q
*= pow(d
, 1.0/s
->avctx
->rc_buffer_aggressivity
);
464 q_limit
= bits2qp(rce
, FFMAX((min_rate
- buffer_size
+ rcc
->buffer_index
)*3, 1));
466 if(s
->avctx
->debug
&FF_DEBUG_RC
){
467 av_log(s
->avctx
, AV_LOG_DEBUG
, "limiting QP %f -> %f\n", q
, q_limit
);
474 double d
= 2*expected_size
/buffer_size
;
476 else if(d
<0.0001) d
=0.0001;
477 q
/= pow(d
, 1.0/s
->avctx
->rc_buffer_aggressivity
);
479 q_limit
= bits2qp(rce
, FFMAX(rcc
->buffer_index
/3, 1));
481 if(s
->avctx
->debug
&FF_DEBUG_RC
){
482 av_log(s
->avctx
, AV_LOG_DEBUG
, "limiting QP %f -> %f\n", q
, q_limit
);
488 //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);
489 if(s
->avctx
->rc_qsquish
==0.0 || qmin
==qmax
){
491 else if(q
>qmax
) q
=qmax
;
493 double min2
= log(qmin
);
494 double max2
= log(qmax
);
497 q
= (q
- min2
)/(max2
-min2
) - 0.5;
499 q
= 1.0/(1.0 + exp(q
));
500 q
= q
*(max2
-min2
) + min2
;
508 //----------------------------------
511 static double predict_size(Predictor
*p
, double q
, double var
)
513 return p
->coeff
*var
/ (q
*p
->count
);
517 static double predict_qp(Predictor *p, double size, double var)
519 //printf("coeff:%f, count:%f, var:%f, size:%f//\n", p->coeff, p->count, var, size);
520 return p->coeff*var / (size*p->count);
524 static void update_predictor(Predictor
*p
, double q
, double var
, double size
)
526 double new_coeff
= size
*q
/ (var
+ 1);
532 p
->coeff
+= new_coeff
;
535 static void adaptive_quantization(MpegEncContext
*s
, double q
){
537 const float lumi_masking
= s
->avctx
->lumi_masking
/ (128.0*128.0);
538 const float dark_masking
= s
->avctx
->dark_masking
/ (128.0*128.0);
539 const float temp_cplx_masking
= s
->avctx
->temporal_cplx_masking
;
540 const float spatial_cplx_masking
= s
->avctx
->spatial_cplx_masking
;
541 const float p_masking
= s
->avctx
->p_masking
;
542 const float border_masking
= s
->avctx
->border_masking
;
545 float cplx_tab
[s
->mb_num
];
546 float bits_tab
[s
->mb_num
];
547 const int qmin
= s
->avctx
->mb_lmin
;
548 const int qmax
= s
->avctx
->mb_lmax
;
549 Picture
* const pic
= &s
->current_picture
;
550 const int mb_width
= s
->mb_width
;
551 const int mb_height
= s
->mb_height
;
553 for(i
=0; i
<s
->mb_num
; i
++){
554 const int mb_xy
= s
->mb_index2xy
[i
];
555 float temp_cplx
= sqrt(pic
->mc_mb_var
[mb_xy
]); //FIXME merge in pow()
556 float spat_cplx
= sqrt(pic
->mb_var
[mb_xy
]);
557 const int lumi
= pic
->mb_mean
[mb_xy
];
558 float bits
, cplx
, factor
;
559 int mb_x
= mb_xy
% s
->mb_stride
;
560 int mb_y
= mb_xy
/ s
->mb_stride
;
562 float mb_factor
= 0.0;
564 if(spat_cplx
< q
/3) spat_cplx
= q
/3; //FIXME finetune
565 if(temp_cplx
< q
/3) temp_cplx
= q
/3; //FIXME finetune
567 if(spat_cplx
< 4) spat_cplx
= 4; //FIXME finetune
568 if(temp_cplx
< 4) temp_cplx
= 4; //FIXME finetune
570 if((s
->mb_type
[mb_xy
]&CANDIDATE_MB_TYPE_INTRA
)){//FIXME hq mode
572 factor
= 1.0 + p_masking
;
575 factor
= pow(temp_cplx
, - temp_cplx_masking
);
577 factor
*=pow(spat_cplx
, - spatial_cplx_masking
);
580 factor
*= (1.0 - (lumi
-128)*(lumi
-128)*lumi_masking
);
582 factor
*= (1.0 - (lumi
-128)*(lumi
-128)*dark_masking
);
584 if(mb_x
< mb_width
/5){
585 mb_distance
= mb_width
/5 - mb_x
;
586 mb_factor
= (float)mb_distance
/ (float)(mb_width
/5);
587 }else if(mb_x
> 4*mb_width
/5){
588 mb_distance
= mb_x
- 4*mb_width
/5;
589 mb_factor
= (float)mb_distance
/ (float)(mb_width
/5);
591 if(mb_y
< mb_height
/5){
592 mb_distance
= mb_height
/5 - mb_y
;
593 mb_factor
= FFMAX(mb_factor
, (float)mb_distance
/ (float)(mb_height
/5));
594 }else if(mb_y
> 4*mb_height
/5){
595 mb_distance
= mb_y
- 4*mb_height
/5;
596 mb_factor
= FFMAX(mb_factor
, (float)mb_distance
/ (float)(mb_height
/5));
599 factor
*= 1.0 - border_masking
*mb_factor
;
601 if(factor
<0.00001) factor
= 0.00001;
610 /* handle qmin/qmax clipping */
611 if(s
->flags
&CODEC_FLAG_NORMALIZE_AQP
){
612 float factor
= bits_sum
/cplx_sum
;
613 for(i
=0; i
<s
->mb_num
; i
++){
614 float newq
= q
*cplx_tab
[i
]/bits_tab
[i
];
618 bits_sum
-= bits_tab
[i
];
619 cplx_sum
-= cplx_tab
[i
]*q
/qmax
;
621 else if(newq
< qmin
){
622 bits_sum
-= bits_tab
[i
];
623 cplx_sum
-= cplx_tab
[i
]*q
/qmin
;
626 if(bits_sum
< 0.001) bits_sum
= 0.001;
627 if(cplx_sum
< 0.001) cplx_sum
= 0.001;
630 for(i
=0; i
<s
->mb_num
; i
++){
631 const int mb_xy
= s
->mb_index2xy
[i
];
632 float newq
= q
*cplx_tab
[i
]/bits_tab
[i
];
635 if(s
->flags
&CODEC_FLAG_NORMALIZE_AQP
){
636 newq
*= bits_sum
/cplx_sum
;
639 intq
= (int)(newq
+ 0.5);
641 if (intq
> qmax
) intq
= qmax
;
642 else if(intq
< qmin
) intq
= qmin
;
643 //if(i%s->mb_width==0) printf("\n");
644 //printf("%2d%3d ", intq, ff_sqrt(s->mc_mb_var[i]));
645 s
->lambda_table
[mb_xy
]= intq
;
649 void ff_get_2pass_fcode(MpegEncContext
*s
){
650 RateControlContext
*rcc
= &s
->rc_context
;
651 int picture_number
= s
->picture_number
;
652 RateControlEntry
*rce
;
654 rce
= &rcc
->entry
[picture_number
];
655 s
->f_code
= rce
->f_code
;
656 s
->b_code
= rce
->b_code
;
659 //FIXME rd or at least approx for dquant
661 float ff_rate_estimate_qscale(MpegEncContext
*s
, int dry_run
)
665 float br_compensation
;
669 int picture_number
= s
->picture_number
;
671 RateControlContext
*rcc
= &s
->rc_context
;
672 AVCodecContext
*a
= s
->avctx
;
673 RateControlEntry local_rce
, *rce
;
677 const int pict_type
= s
->pict_type
;
678 Picture
* const pic
= &s
->current_picture
;
681 #ifdef CONFIG_LIBXVID
682 if((s
->flags
&CODEC_FLAG_PASS2
) && s
->avctx
->rc_strategy
== FF_RC_STRATEGY_XVID
)
683 return ff_xvid_rate_estimate_qscale(s
, dry_run
);
686 get_qminmax(&qmin
, &qmax
, s
, pict_type
);
688 fps
= 1/av_q2d(s
->avctx
->time_base
);
689 //printf("input_pic_num:%d pic_num:%d frame_rate:%d\n", s->input_picture_number, s->picture_number, s->frame_rate);
690 /* update predictors */
691 if(picture_number
>2 && !dry_run
){
692 const int last_var
= s
->last_pict_type
== FF_I_TYPE
? rcc
->last_mb_var_sum
: rcc
->last_mc_mb_var_sum
;
693 update_predictor(&rcc
->pred
[s
->last_pict_type
], rcc
->last_qscale
, sqrt(last_var
), s
->frame_bits
);
696 if(s
->flags
&CODEC_FLAG_PASS2
){
697 assert(picture_number
>=0);
698 assert(picture_number
<rcc
->num_entries
);
699 rce
= &rcc
->entry
[picture_number
];
700 wanted_bits
= rce
->expected_bits
;
705 //FIXME add a dts field to AVFrame and ensure its set and use it here instead of reordering
706 //but the reordering is simpler for now until h.264 b pyramid must be handeld
707 if(s
->pict_type
== FF_B_TYPE
|| s
->low_delay
)
708 dts_pic
= s
->current_picture_ptr
;
710 dts_pic
= s
->last_picture_ptr
;
713 // av_log(NULL, AV_LOG_ERROR, "%Ld %Ld %Ld %d\n", s->current_picture_ptr->pts, s->user_specified_pts, dts_pic->pts, picture_number);
715 if(!dts_pic
|| dts_pic
->pts
== AV_NOPTS_VALUE
)
716 wanted_bits
= (uint64_t)(s
->bit_rate
*(double)picture_number
/fps
);
718 wanted_bits
= (uint64_t)(s
->bit_rate
*(double)dts_pic
->pts
/fps
);
721 diff
= s
->total_bits
- wanted_bits
;
722 br_compensation
= (a
->bit_rate_tolerance
- diff
)/a
->bit_rate_tolerance
;
723 if(br_compensation
<=0.0) br_compensation
=0.001;
725 var
= pict_type
== FF_I_TYPE
? pic
->mb_var_sum
: pic
->mc_mb_var_sum
;
727 short_term_q
= 0; /* avoid warning */
728 if(s
->flags
&CODEC_FLAG_PASS2
){
729 if(pict_type
!=FF_I_TYPE
)
730 assert(pict_type
== rce
->new_pict_type
);
732 q
= rce
->new_qscale
/ br_compensation
;
733 //printf("%f %f %f last:%d var:%d type:%d//\n", q, rce->new_qscale, br_compensation, s->frame_bits, var, pict_type);
736 rce
->new_pict_type
= pict_type
;
737 rce
->mc_mb_var_sum
= pic
->mc_mb_var_sum
;
738 rce
->mb_var_sum
= pic
-> mb_var_sum
;
739 rce
->qscale
= FF_QP2LAMBDA
* 2;
740 rce
->f_code
= s
->f_code
;
741 rce
->b_code
= s
->b_code
;
744 bits
= predict_size(&rcc
->pred
[pict_type
], rce
->qscale
, sqrt(var
));
745 if(pict_type
== FF_I_TYPE
){
746 rce
->i_count
= s
->mb_num
;
747 rce
->i_tex_bits
= bits
;
751 rce
->i_count
= 0; //FIXME we do know this approx
753 rce
->p_tex_bits
= bits
*0.9;
755 rce
->mv_bits
= bits
*0.1;
757 rcc
->i_cplx_sum
[pict_type
] += rce
->i_tex_bits
*rce
->qscale
;
758 rcc
->p_cplx_sum
[pict_type
] += rce
->p_tex_bits
*rce
->qscale
;
759 rcc
->mv_bits_sum
[pict_type
] += rce
->mv_bits
;
760 rcc
->frame_count
[pict_type
] ++;
762 bits
= rce
->i_tex_bits
+ rce
->p_tex_bits
;
763 rate_factor
= rcc
->pass1_wanted_bits
/rcc
->pass1_rc_eq_output_sum
* br_compensation
;
765 q
= get_qscale(s
, rce
, rate_factor
, picture_number
);
771 q
= get_diff_limited_q(s
, rce
, q
);
775 if(pict_type
==FF_P_TYPE
|| s
->intra_only
){ //FIXME type dependent blur like in 2-pass
776 rcc
->short_term_qsum
*=a
->qblur
;
777 rcc
->short_term_qcount
*=a
->qblur
;
779 rcc
->short_term_qsum
+= q
;
780 rcc
->short_term_qcount
++;
782 q
= short_term_q
= rcc
->short_term_qsum
/rcc
->short_term_qcount
;
787 q
= modify_qscale(s
, rce
, q
, picture_number
);
789 rcc
->pass1_wanted_bits
+= s
->bit_rate
/fps
;
794 if(s
->avctx
->debug
&FF_DEBUG_RC
){
795 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",
796 av_get_pict_type_char(pict_type
), qmin
, q
, qmax
, picture_number
, (int)wanted_bits
/1000, (int)s
->total_bits
/1000,
797 br_compensation
, short_term_q
, s
->frame_bits
, pic
->mb_var_sum
, pic
->mc_mb_var_sum
, s
->bit_rate
/1000, (int)fps
802 else if(q
>qmax
) q
=qmax
;
804 if(s
->adaptive_quant
)
805 adaptive_quantization(s
, q
);
811 rcc
->last_mc_mb_var_sum
= pic
->mc_mb_var_sum
;
812 rcc
->last_mb_var_sum
= pic
->mb_var_sum
;
816 static int mvsum
=0, texsum
=0;
818 texsum
+= s
->i_tex_bits
+ s
->p_tex_bits
;
819 printf("%d %d//\n\n", mvsum
, texsum
);
825 //----------------------------------------------
828 static int init_pass2(MpegEncContext
*s
)
830 RateControlContext
*rcc
= &s
->rc_context
;
831 AVCodecContext
*a
= s
->avctx
;
833 double fps
= 1/av_q2d(s
->avctx
->time_base
);
834 double complexity
[5]={0,0,0,0,0}; // aproximate bits at quant=1
835 uint64_t const_bits
[5]={0,0,0,0,0}; // quantizer independent bits
836 uint64_t all_const_bits
;
837 uint64_t all_available_bits
= (uint64_t)(s
->bit_rate
*(double)rcc
->num_entries
/fps
);
838 double rate_factor
=0;
840 //int last_i_frame=-10000000;
841 const int filter_size
= (int)(a
->qblur
*4) | 1;
842 double expected_bits
;
843 double *qscale
, *blurred_qscale
, qscale_sum
;
845 /* find complexity & const_bits & decide the pict_types */
846 for(i
=0; i
<rcc
->num_entries
; i
++){
847 RateControlEntry
*rce
= &rcc
->entry
[i
];
849 rce
->new_pict_type
= rce
->pict_type
;
850 rcc
->i_cplx_sum
[rce
->pict_type
] += rce
->i_tex_bits
*rce
->qscale
;
851 rcc
->p_cplx_sum
[rce
->pict_type
] += rce
->p_tex_bits
*rce
->qscale
;
852 rcc
->mv_bits_sum
[rce
->pict_type
] += rce
->mv_bits
;
853 rcc
->frame_count
[rce
->pict_type
] ++;
855 complexity
[rce
->new_pict_type
]+= (rce
->i_tex_bits
+ rce
->p_tex_bits
)*(double)rce
->qscale
;
856 const_bits
[rce
->new_pict_type
]+= rce
->mv_bits
+ rce
->misc_bits
;
858 all_const_bits
= const_bits
[FF_I_TYPE
] + const_bits
[FF_P_TYPE
] + const_bits
[FF_B_TYPE
];
860 if(all_available_bits
< all_const_bits
){
861 av_log(s
->avctx
, AV_LOG_ERROR
, "requested bitrate is too low\n");
865 qscale
= av_malloc(sizeof(double)*rcc
->num_entries
);
866 blurred_qscale
= av_malloc(sizeof(double)*rcc
->num_entries
);
869 for(step
=256*256; step
>0.0000001; step
*=0.5){
873 rcc
->buffer_index
= s
->avctx
->rc_buffer_size
/2;
876 for(i
=0; i
<rcc
->num_entries
; i
++){
877 qscale
[i
]= get_qscale(s
, &rcc
->entry
[i
], rate_factor
, i
);
879 assert(filter_size
%2==1);
881 /* fixed I/B QP relative to P mode */
882 for(i
=rcc
->num_entries
-1; i
>=0; i
--){
883 RateControlEntry
*rce
= &rcc
->entry
[i
];
885 qscale
[i
]= get_diff_limited_q(s
, rce
, qscale
[i
]);
889 for(i
=0; i
<rcc
->num_entries
; i
++){
890 RateControlEntry
*rce
= &rcc
->entry
[i
];
891 const int pict_type
= rce
->new_pict_type
;
893 double q
=0.0, sum
=0.0;
895 for(j
=0; j
<filter_size
; j
++){
896 int index
= i
+j
-filter_size
/2;
898 double coeff
= a
->qblur
==0 ? 1.0 : exp(-d
*d
/(a
->qblur
* a
->qblur
));
900 if(index
< 0 || index
>= rcc
->num_entries
) continue;
901 if(pict_type
!= rcc
->entry
[index
].new_pict_type
) continue;
902 q
+= qscale
[index
] * coeff
;
905 blurred_qscale
[i
]= q
/sum
;
908 /* find expected bits */
909 for(i
=0; i
<rcc
->num_entries
; i
++){
910 RateControlEntry
*rce
= &rcc
->entry
[i
];
912 rce
->new_qscale
= modify_qscale(s
, rce
, blurred_qscale
[i
], i
);
913 bits
= qp2bits(rce
, rce
->new_qscale
) + rce
->mv_bits
+ rce
->misc_bits
;
914 //printf("%d %f\n", rce->new_bits, blurred_qscale[i]);
915 bits
+= 8*ff_vbv_update(s
, bits
);
917 rce
->expected_bits
= expected_bits
;
918 expected_bits
+= bits
;
922 av_log(s->avctx, AV_LOG_INFO,
923 "expected_bits: %f all_available_bits: %d rate_factor: %f\n",
924 expected_bits, (int)all_available_bits, rate_factor);
926 if(expected_bits
> all_available_bits
) {
932 av_free(blurred_qscale
);
934 /* check bitrate calculations and print info */
936 for(i
=0; i
<rcc
->num_entries
; i
++){
937 /* av_log(s->avctx, AV_LOG_DEBUG, "[lavc rc] entry[%d].new_qscale = %.3f qp = %.3f\n",
938 i, rcc->entry[i].new_qscale, rcc->entry[i].new_qscale / FF_QP2LAMBDA); */
939 qscale_sum
+= av_clip(rcc
->entry
[i
].new_qscale
/ FF_QP2LAMBDA
, s
->avctx
->qmin
, s
->avctx
->qmax
);
941 assert(toobig
<= 40);
942 av_log(s
->avctx
, AV_LOG_DEBUG
,
943 "[lavc rc] requested bitrate: %d bps expected bitrate: %d bps\n",
945 (int)(expected_bits
/ ((double)all_available_bits
/s
->bit_rate
)));
946 av_log(s
->avctx
, AV_LOG_DEBUG
,
947 "[lavc rc] estimated target average qp: %.3f\n",
948 (float)qscale_sum
/ rcc
->num_entries
);
950 av_log(s
->avctx
, AV_LOG_INFO
,
951 "[lavc rc] Using all of requested bitrate is not "
952 "necessary for this video with these parameters.\n");
953 } else if (toobig
== 40) {
954 av_log(s
->avctx
, AV_LOG_ERROR
,
955 "[lavc rc] Error: bitrate too low for this video "
956 "with these parameters.\n");
958 } else if (fabs(expected_bits
/all_available_bits
- 1.0) > 0.01) {
959 av_log(s
->avctx
, AV_LOG_ERROR
,
960 "[lavc rc] Error: 2pass curve failed to converge\n");