2 * Rate control for video encoders
4 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
6 * This file is part of Libav.
8 * Libav 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 * Libav 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 Libav; 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.
29 #include "ratecontrol.h"
30 #include "mpegvideo.h"
31 #include "libavutil/eval.h"
33 #undef NDEBUG // Always check asserts, the speed effect is far too small to disable them.
37 #define M_E 2.718281828
40 static int init_pass2(MpegEncContext
*s
);
41 static double get_qscale(MpegEncContext
*s
, RateControlEntry
*rce
,
42 double rate_factor
, int frame_num
);
44 void ff_write_pass1_stats(MpegEncContext
*s
)
46 snprintf(s
->avctx
->stats_out
, 256,
47 "in:%d out:%d type:%d q:%d itex:%d ptex:%d mv:%d misc:%d "
48 "fcode:%d bcode:%d mc-var:%d var:%d icount:%d skipcount:%d hbits:%d;\n",
49 s
->current_picture_ptr
->f
.display_picture_number
,
50 s
->current_picture_ptr
->f
.coded_picture_number
,
52 s
->current_picture
.f
.quality
,
59 s
->current_picture
.mc_mb_var_sum
,
60 s
->current_picture
.mb_var_sum
,
61 s
->i_count
, s
->skip_count
,
65 static inline double qp2bits(RateControlEntry
*rce
, double qp
)
68 av_log(NULL
, AV_LOG_ERROR
, "qp<=0.0\n");
70 return rce
->qscale
* (double)(rce
->i_tex_bits
+ rce
->p_tex_bits
+ 1) / qp
;
73 static inline double bits2qp(RateControlEntry
*rce
, double bits
)
76 av_log(NULL
, AV_LOG_ERROR
, "bits<0.9\n");
78 return rce
->qscale
* (double)(rce
->i_tex_bits
+ rce
->p_tex_bits
+ 1) / bits
;
81 int ff_rate_control_init(MpegEncContext
*s
)
83 RateControlContext
*rcc
= &s
->rc_context
;
85 static const char * const const_names
[] = {
114 static double (* const func1
[])(void *, double) = {
119 static const char * const func1_names
[] = {
126 res
= av_expr_parse(&rcc
->rc_eq_eval
,
127 s
->avctx
->rc_eq
? s
->avctx
->rc_eq
: "tex^qComp",
128 const_names
, func1_names
, func1
,
129 NULL
, NULL
, 0, s
->avctx
);
131 av_log(s
->avctx
, AV_LOG_ERROR
, "Error parsing rc_eq \"%s\"\n", s
->avctx
->rc_eq
);
135 for (i
= 0; i
< 5; i
++) {
136 rcc
->pred
[i
].coeff
= FF_QP2LAMBDA
* 7.0;
137 rcc
->pred
[i
].count
= 1.0;
138 rcc
->pred
[i
].decay
= 0.4;
140 rcc
->i_cplx_sum
[i
] =
141 rcc
->p_cplx_sum
[i
] =
142 rcc
->mv_bits_sum
[i
] =
143 rcc
->qscale_sum
[i
] =
144 rcc
->frame_count
[i
] = 1; // 1 is better because of 1/0 and such
146 rcc
->last_qscale_for
[i
] = FF_QP2LAMBDA
* 5;
148 rcc
->buffer_index
= s
->avctx
->rc_initial_buffer_occupancy
;
150 if (s
->flags
& CODEC_FLAG_PASS2
) {
154 /* find number of pics */
155 p
= s
->avctx
->stats_in
;
157 p
= strchr(p
+ 1, ';');
158 i
+= s
->max_b_frames
;
159 if (i
<= 0 || i
>= INT_MAX
/ sizeof(RateControlEntry
))
161 rcc
->entry
= av_mallocz(i
* sizeof(RateControlEntry
));
162 rcc
->num_entries
= i
;
164 /* init all to skipped p frames
165 * (with b frames we might have a not encoded frame at the end FIXME) */
166 for (i
= 0; i
< rcc
->num_entries
; i
++) {
167 RateControlEntry
*rce
= &rcc
->entry
[i
];
169 rce
->pict_type
= rce
->new_pict_type
= AV_PICTURE_TYPE_P
;
170 rce
->qscale
= rce
->new_qscale
= FF_QP2LAMBDA
* 2;
171 rce
->misc_bits
= s
->mb_num
+ 10;
172 rce
->mb_var_sum
= s
->mb_num
* 100;
176 p
= s
->avctx
->stats_in
;
177 for (i
= 0; i
< rcc
->num_entries
- s
->max_b_frames
; i
++) {
178 RateControlEntry
*rce
;
183 next
= strchr(p
, ';');
185 (*next
) = 0; // sscanf in unbelievably slow on looong strings // FIXME copy / do not write
188 e
= sscanf(p
, " in:%d ", &picture_number
);
190 assert(picture_number
>= 0);
191 assert(picture_number
< rcc
->num_entries
);
192 rce
= &rcc
->entry
[picture_number
];
194 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",
195 &rce
->pict_type
, &rce
->qscale
, &rce
->i_tex_bits
, &rce
->p_tex_bits
,
196 &rce
->mv_bits
, &rce
->misc_bits
,
197 &rce
->f_code
, &rce
->b_code
,
198 &rce
->mc_mb_var_sum
, &rce
->mb_var_sum
,
199 &rce
->i_count
, &rce
->skip_count
, &rce
->header_bits
);
201 av_log(s
->avctx
, AV_LOG_ERROR
,
202 "statistics are damaged at line %d, parser out=%d\n",
210 if (init_pass2(s
) < 0)
213 // FIXME maybe move to end
214 if ((s
->flags
& CODEC_FLAG_PASS2
) && s
->avctx
->rc_strategy
== FF_RC_STRATEGY_XVID
) {
216 return ff_xvid_rate_control_init(s
);
218 av_log(s
->avctx
, AV_LOG_ERROR
,
219 "Xvid ratecontrol requires libavcodec compiled with Xvid support.\n");
225 if (!(s
->flags
& CODEC_FLAG_PASS2
)) {
226 rcc
->short_term_qsum
= 0.001;
227 rcc
->short_term_qcount
= 0.001;
229 rcc
->pass1_rc_eq_output_sum
= 0.001;
230 rcc
->pass1_wanted_bits
= 0.001;
232 if (s
->avctx
->qblur
> 1.0) {
233 av_log(s
->avctx
, AV_LOG_ERROR
, "qblur too large\n");
236 /* init stuff with the user specified complexity */
237 if (s
->avctx
->rc_initial_cplx
) {
238 for (i
= 0; i
< 60 * 30; i
++) {
239 double bits
= s
->avctx
->rc_initial_cplx
* (i
/ 10000.0 + 1.0) * s
->mb_num
;
240 RateControlEntry rce
;
242 if (i
% ((s
->gop_size
+ 3) / 4) == 0)
243 rce
.pict_type
= AV_PICTURE_TYPE_I
;
244 else if (i
% (s
->max_b_frames
+ 1))
245 rce
.pict_type
= AV_PICTURE_TYPE_B
;
247 rce
.pict_type
= AV_PICTURE_TYPE_P
;
249 rce
.new_pict_type
= rce
.pict_type
;
250 rce
.mc_mb_var_sum
= bits
* s
->mb_num
/ 100000;
251 rce
.mb_var_sum
= s
->mb_num
;
253 rce
.qscale
= FF_QP2LAMBDA
* 2;
258 if (s
->pict_type
== AV_PICTURE_TYPE_I
) {
259 rce
.i_count
= s
->mb_num
;
260 rce
.i_tex_bits
= bits
;
264 rce
.i_count
= 0; // FIXME we do know this approx
266 rce
.p_tex_bits
= bits
* 0.9;
267 rce
.mv_bits
= bits
* 0.1;
269 rcc
->i_cplx_sum
[rce
.pict_type
] += rce
.i_tex_bits
* rce
.qscale
;
270 rcc
->p_cplx_sum
[rce
.pict_type
] += rce
.p_tex_bits
* rce
.qscale
;
271 rcc
->mv_bits_sum
[rce
.pict_type
] += rce
.mv_bits
;
272 rcc
->frame_count
[rce
.pict_type
]++;
274 get_qscale(s
, &rce
, rcc
->pass1_wanted_bits
/ rcc
->pass1_rc_eq_output_sum
, i
);
276 // FIXME misbehaves a little for variable fps
277 rcc
->pass1_wanted_bits
+= s
->bit_rate
/ (1 / av_q2d(s
->avctx
->time_base
));
285 void ff_rate_control_uninit(MpegEncContext
*s
)
287 RateControlContext
*rcc
= &s
->rc_context
;
290 av_expr_free(rcc
->rc_eq_eval
);
291 av_freep(&rcc
->entry
);
294 if ((s
->flags
& CODEC_FLAG_PASS2
) && s
->avctx
->rc_strategy
== FF_RC_STRATEGY_XVID
)
295 ff_xvid_rate_control_uninit(s
);
299 int ff_vbv_update(MpegEncContext
*s
, int frame_size
)
301 RateControlContext
*rcc
= &s
->rc_context
;
302 const double fps
= 1 / av_q2d(s
->avctx
->time_base
);
303 const int buffer_size
= s
->avctx
->rc_buffer_size
;
304 const double min_rate
= s
->avctx
->rc_min_rate
/ fps
;
305 const double max_rate
= s
->avctx
->rc_max_rate
/ fps
;
307 av_dlog(s
, "%d %f %d %f %f\n",
308 buffer_size
, rcc
->buffer_index
, frame_size
, min_rate
, max_rate
);
313 rcc
->buffer_index
-= frame_size
;
314 if (rcc
->buffer_index
< 0) {
315 av_log(s
->avctx
, AV_LOG_ERROR
, "rc buffer underflow\n");
316 rcc
->buffer_index
= 0;
319 left
= buffer_size
- rcc
->buffer_index
- 1;
320 rcc
->buffer_index
+= av_clip(left
, min_rate
, max_rate
);
322 if (rcc
->buffer_index
> buffer_size
) {
323 int stuffing
= ceil((rcc
->buffer_index
- buffer_size
) / 8);
325 if (stuffing
< 4 && s
->codec_id
== AV_CODEC_ID_MPEG4
)
327 rcc
->buffer_index
-= 8 * stuffing
;
329 if (s
->avctx
->debug
& FF_DEBUG_RC
)
330 av_log(s
->avctx
, AV_LOG_DEBUG
, "stuffing %d bytes\n", stuffing
);
339 * Modify the bitrate curve from pass1 for one frame.
341 static double get_qscale(MpegEncContext
*s
, RateControlEntry
*rce
,
342 double rate_factor
, int frame_num
)
344 RateControlContext
*rcc
= &s
->rc_context
;
345 AVCodecContext
*a
= s
->avctx
;
346 const int pict_type
= rce
->new_pict_type
;
347 const double mb_num
= s
->mb_num
;
351 double const_values
[] = {
354 rce
->i_tex_bits
* rce
->qscale
,
355 rce
->p_tex_bits
* rce
->qscale
,
356 (rce
->i_tex_bits
+ rce
->p_tex_bits
) * (double)rce
->qscale
,
357 rce
->mv_bits
/ mb_num
,
358 rce
->pict_type
== AV_PICTURE_TYPE_B
? (rce
->f_code
+ rce
->b_code
) * 0.5 : rce
->f_code
,
359 rce
->i_count
/ mb_num
,
360 rce
->mc_mb_var_sum
/ mb_num
,
361 rce
->mb_var_sum
/ mb_num
,
362 rce
->pict_type
== AV_PICTURE_TYPE_I
,
363 rce
->pict_type
== AV_PICTURE_TYPE_P
,
364 rce
->pict_type
== AV_PICTURE_TYPE_B
,
365 rcc
->qscale_sum
[pict_type
] / (double)rcc
->frame_count
[pict_type
],
368 rcc
->last_qscale_for
[AV_PICTURE_TYPE_I
],
369 rcc
->last_qscale_for
[AV_PICTURE_TYPE_P
],
370 rcc
->last_qscale_for
[AV_PICTURE_TYPE_B
],
371 rcc
->next_non_b_qscale
,
373 rcc
->i_cplx_sum
[AV_PICTURE_TYPE_I
] / (double)rcc
->frame_count
[AV_PICTURE_TYPE_I
],
374 rcc
->i_cplx_sum
[AV_PICTURE_TYPE_P
] / (double)rcc
->frame_count
[AV_PICTURE_TYPE_P
],
375 rcc
->p_cplx_sum
[AV_PICTURE_TYPE_P
] / (double)rcc
->frame_count
[AV_PICTURE_TYPE_P
],
376 rcc
->p_cplx_sum
[AV_PICTURE_TYPE_B
] / (double)rcc
->frame_count
[AV_PICTURE_TYPE_B
],
377 (rcc
->i_cplx_sum
[pict_type
] + rcc
->p_cplx_sum
[pict_type
]) / (double)rcc
->frame_count
[pict_type
],
381 bits
= av_expr_eval(rcc
->rc_eq_eval
, const_values
, rce
);
383 av_log(s
->avctx
, AV_LOG_ERROR
, "Error evaluating rc_eq \"%s\"\n", s
->avctx
->rc_eq
);
387 rcc
->pass1_rc_eq_output_sum
+= bits
;
391 bits
+= 1.0; // avoid 1/0 issues
394 for (i
= 0; i
< s
->avctx
->rc_override_count
; i
++) {
395 RcOverride
*rco
= s
->avctx
->rc_override
;
396 if (rco
[i
].start_frame
> frame_num
)
398 if (rco
[i
].end_frame
< frame_num
)
402 bits
= qp2bits(rce
, rco
[i
].qscale
); // FIXME move at end to really force it?
404 bits
*= rco
[i
].quality_factor
;
407 q
= bits2qp(rce
, bits
);
410 if (pict_type
== AV_PICTURE_TYPE_I
&& s
->avctx
->i_quant_factor
< 0.0)
411 q
= -q
* s
->avctx
->i_quant_factor
+ s
->avctx
->i_quant_offset
;
412 else if (pict_type
== AV_PICTURE_TYPE_B
&& s
->avctx
->b_quant_factor
< 0.0)
413 q
= -q
* s
->avctx
->b_quant_factor
+ s
->avctx
->b_quant_offset
;
420 static double get_diff_limited_q(MpegEncContext
*s
, RateControlEntry
*rce
, double q
)
422 RateControlContext
*rcc
= &s
->rc_context
;
423 AVCodecContext
*a
= s
->avctx
;
424 const int pict_type
= rce
->new_pict_type
;
425 const double last_p_q
= rcc
->last_qscale_for
[AV_PICTURE_TYPE_P
];
426 const double last_non_b_q
= rcc
->last_qscale_for
[rcc
->last_non_b_pict_type
];
428 if (pict_type
== AV_PICTURE_TYPE_I
&&
429 (a
->i_quant_factor
> 0.0 || rcc
->last_non_b_pict_type
== AV_PICTURE_TYPE_P
))
430 q
= last_p_q
* FFABS(a
->i_quant_factor
) + a
->i_quant_offset
;
431 else if (pict_type
== AV_PICTURE_TYPE_B
&&
432 a
->b_quant_factor
> 0.0)
433 q
= last_non_b_q
* a
->b_quant_factor
+ a
->b_quant_offset
;
437 /* last qscale / qdiff stuff */
438 if (rcc
->last_non_b_pict_type
== pict_type
|| pict_type
!= AV_PICTURE_TYPE_I
) {
439 double last_q
= rcc
->last_qscale_for
[pict_type
];
440 const int maxdiff
= FF_QP2LAMBDA
* a
->max_qdiff
;
442 if (q
> last_q
+ maxdiff
)
443 q
= last_q
+ maxdiff
;
444 else if (q
< last_q
- maxdiff
)
445 q
= last_q
- maxdiff
;
448 rcc
->last_qscale_for
[pict_type
] = q
; // Note we cannot do that after blurring
450 if (pict_type
!= AV_PICTURE_TYPE_B
)
451 rcc
->last_non_b_pict_type
= pict_type
;
457 * Get the qmin & qmax for pict_type.
459 static void get_qminmax(int *qmin_ret
, int *qmax_ret
, MpegEncContext
*s
, int pict_type
)
461 int qmin
= s
->avctx
->lmin
;
462 int qmax
= s
->avctx
->lmax
;
464 assert(qmin
<= qmax
);
467 case AV_PICTURE_TYPE_B
:
468 qmin
= (int)(qmin
* FFABS(s
->avctx
->b_quant_factor
) + s
->avctx
->b_quant_offset
+ 0.5);
469 qmax
= (int)(qmax
* FFABS(s
->avctx
->b_quant_factor
) + s
->avctx
->b_quant_offset
+ 0.5);
471 case AV_PICTURE_TYPE_I
:
472 qmin
= (int)(qmin
* FFABS(s
->avctx
->i_quant_factor
) + s
->avctx
->i_quant_offset
+ 0.5);
473 qmax
= (int)(qmax
* FFABS(s
->avctx
->i_quant_factor
) + s
->avctx
->i_quant_offset
+ 0.5);
477 qmin
= av_clip(qmin
, 1, FF_LAMBDA_MAX
);
478 qmax
= av_clip(qmax
, 1, FF_LAMBDA_MAX
);
487 static double modify_qscale(MpegEncContext
*s
, RateControlEntry
*rce
,
488 double q
, int frame_num
)
490 RateControlContext
*rcc
= &s
->rc_context
;
491 const double buffer_size
= s
->avctx
->rc_buffer_size
;
492 const double fps
= 1 / av_q2d(s
->avctx
->time_base
);
493 const double min_rate
= s
->avctx
->rc_min_rate
/ fps
;
494 const double max_rate
= s
->avctx
->rc_max_rate
/ fps
;
495 const int pict_type
= rce
->new_pict_type
;
498 get_qminmax(&qmin
, &qmax
, s
, pict_type
);
501 if (s
->avctx
->rc_qmod_freq
&&
502 frame_num
% s
->avctx
->rc_qmod_freq
== 0 &&
503 pict_type
== AV_PICTURE_TYPE_P
)
504 q
*= s
->avctx
->rc_qmod_amp
;
506 /* buffer overflow/underflow protection */
508 double expected_size
= rcc
->buffer_index
;
512 double d
= 2 * (buffer_size
- expected_size
) / buffer_size
;
517 q
*= pow(d
, 1.0 / s
->avctx
->rc_buffer_aggressivity
);
519 q_limit
= bits2qp(rce
,
520 FFMAX((min_rate
- buffer_size
+ rcc
->buffer_index
) *
521 s
->avctx
->rc_min_vbv_overflow_use
, 1));
524 if (s
->avctx
->debug
& FF_DEBUG_RC
)
525 av_log(s
->avctx
, AV_LOG_DEBUG
,
526 "limiting QP %f -> %f\n", q
, q_limit
);
532 double d
= 2 * expected_size
/ buffer_size
;
537 q
/= pow(d
, 1.0 / s
->avctx
->rc_buffer_aggressivity
);
539 q_limit
= bits2qp(rce
,
540 FFMAX(rcc
->buffer_index
*
541 s
->avctx
->rc_max_available_vbv_use
,
544 if (s
->avctx
->debug
& FF_DEBUG_RC
)
545 av_log(s
->avctx
, AV_LOG_DEBUG
,
546 "limiting QP %f -> %f\n", q
, q_limit
);
551 av_dlog(s
, "q:%f max:%f min:%f size:%f index:%f agr:%f\n",
552 q
, max_rate
, min_rate
, buffer_size
, rcc
->buffer_index
,
553 s
->avctx
->rc_buffer_aggressivity
);
554 if (s
->avctx
->rc_qsquish
== 0.0 || qmin
== qmax
) {
560 double min2
= log(qmin
);
561 double max2
= log(qmax
);
564 q
= (q
- min2
) / (max2
- min2
) - 0.5;
566 q
= 1.0 / (1.0 + exp(q
));
567 q
= q
* (max2
- min2
) + min2
;
575 // ----------------------------------
578 static double predict_size(Predictor
*p
, double q
, double var
)
580 return p
->coeff
* var
/ (q
* p
->count
);
583 static void update_predictor(Predictor
*p
, double q
, double var
, double size
)
585 double new_coeff
= size
* q
/ (var
+ 1);
589 p
->count
*= p
->decay
;
590 p
->coeff
*= p
->decay
;
592 p
->coeff
+= new_coeff
;
595 static void adaptive_quantization(MpegEncContext
*s
, double q
)
598 const float lumi_masking
= s
->avctx
->lumi_masking
/ (128.0 * 128.0);
599 const float dark_masking
= s
->avctx
->dark_masking
/ (128.0 * 128.0);
600 const float temp_cplx_masking
= s
->avctx
->temporal_cplx_masking
;
601 const float spatial_cplx_masking
= s
->avctx
->spatial_cplx_masking
;
602 const float p_masking
= s
->avctx
->p_masking
;
603 const float border_masking
= s
->avctx
->border_masking
;
604 float bits_sum
= 0.0;
605 float cplx_sum
= 0.0;
606 float *cplx_tab
= s
->cplx_tab
;
607 float *bits_tab
= s
->bits_tab
;
608 const int qmin
= s
->avctx
->mb_lmin
;
609 const int qmax
= s
->avctx
->mb_lmax
;
610 Picture
*const pic
= &s
->current_picture
;
611 const int mb_width
= s
->mb_width
;
612 const int mb_height
= s
->mb_height
;
614 for (i
= 0; i
< s
->mb_num
; i
++) {
615 const int mb_xy
= s
->mb_index2xy
[i
];
616 float temp_cplx
= sqrt(pic
->mc_mb_var
[mb_xy
]); // FIXME merge in pow()
617 float spat_cplx
= sqrt(pic
->mb_var
[mb_xy
]);
618 const int lumi
= pic
->mb_mean
[mb_xy
];
619 float bits
, cplx
, factor
;
620 int mb_x
= mb_xy
% s
->mb_stride
;
621 int mb_y
= mb_xy
/ s
->mb_stride
;
623 float mb_factor
= 0.0;
625 spat_cplx
= 4; // FIXME finetune
627 temp_cplx
= 4; // FIXME finetune
629 if ((s
->mb_type
[mb_xy
] & CANDIDATE_MB_TYPE_INTRA
)) { // FIXME hq mode
631 factor
= 1.0 + p_masking
;
634 factor
= pow(temp_cplx
, -temp_cplx_masking
);
636 factor
*= pow(spat_cplx
, -spatial_cplx_masking
);
639 factor
*= (1.0 - (lumi
- 128) * (lumi
- 128) * lumi_masking
);
641 factor
*= (1.0 - (lumi
- 128) * (lumi
- 128) * dark_masking
);
643 if (mb_x
< mb_width
/ 5) {
644 mb_distance
= mb_width
/ 5 - mb_x
;
645 mb_factor
= (float)mb_distance
/ (float)(mb_width
/ 5);
646 } else if (mb_x
> 4 * mb_width
/ 5) {
647 mb_distance
= mb_x
- 4 * mb_width
/ 5;
648 mb_factor
= (float)mb_distance
/ (float)(mb_width
/ 5);
650 if (mb_y
< mb_height
/ 5) {
651 mb_distance
= mb_height
/ 5 - mb_y
;
652 mb_factor
= FFMAX(mb_factor
,
653 (float)mb_distance
/ (float)(mb_height
/ 5));
654 } else if (mb_y
> 4 * mb_height
/ 5) {
655 mb_distance
= mb_y
- 4 * mb_height
/ 5;
656 mb_factor
= FFMAX(mb_factor
,
657 (float)mb_distance
/ (float)(mb_height
/ 5));
660 factor
*= 1.0 - border_masking
* mb_factor
;
662 if (factor
< 0.00001)
665 bits
= cplx
* factor
;
672 /* handle qmin/qmax clipping */
673 if (s
->flags
& CODEC_FLAG_NORMALIZE_AQP
) {
674 float factor
= bits_sum
/ cplx_sum
;
675 for (i
= 0; i
< s
->mb_num
; i
++) {
676 float newq
= q
* cplx_tab
[i
] / bits_tab
[i
];
680 bits_sum
-= bits_tab
[i
];
681 cplx_sum
-= cplx_tab
[i
] * q
/ qmax
;
682 } else if (newq
< qmin
) {
683 bits_sum
-= bits_tab
[i
];
684 cplx_sum
-= cplx_tab
[i
] * q
/ qmin
;
687 if (bits_sum
< 0.001)
689 if (cplx_sum
< 0.001)
693 for (i
= 0; i
< s
->mb_num
; i
++) {
694 const int mb_xy
= s
->mb_index2xy
[i
];
695 float newq
= q
* cplx_tab
[i
] / bits_tab
[i
];
698 if (s
->flags
& CODEC_FLAG_NORMALIZE_AQP
) {
699 newq
*= bits_sum
/ cplx_sum
;
702 intq
= (int)(newq
+ 0.5);
706 else if (intq
< qmin
)
708 s
->lambda_table
[mb_xy
] = intq
;
712 void ff_get_2pass_fcode(MpegEncContext
*s
)
714 RateControlContext
*rcc
= &s
->rc_context
;
715 RateControlEntry
*rce
= &rcc
->entry
[s
->picture_number
];
717 s
->f_code
= rce
->f_code
;
718 s
->b_code
= rce
->b_code
;
721 // FIXME rd or at least approx for dquant
723 float ff_rate_estimate_qscale(MpegEncContext
*s
, int dry_run
)
727 float br_compensation
;
731 int picture_number
= s
->picture_number
;
733 RateControlContext
*rcc
= &s
->rc_context
;
734 AVCodecContext
*a
= s
->avctx
;
735 RateControlEntry local_rce
, *rce
;
739 const int pict_type
= s
->pict_type
;
740 Picture
* const pic
= &s
->current_picture
;
744 if ((s
->flags
& CODEC_FLAG_PASS2
) &&
745 s
->avctx
->rc_strategy
== FF_RC_STRATEGY_XVID
)
746 return ff_xvid_rate_estimate_qscale(s
, dry_run
);
749 get_qminmax(&qmin
, &qmax
, s
, pict_type
);
751 fps
= 1 / av_q2d(s
->avctx
->time_base
);
752 /* update predictors */
753 if (picture_number
> 2 && !dry_run
) {
754 const int last_var
= s
->last_pict_type
== AV_PICTURE_TYPE_I
? rcc
->last_mb_var_sum
755 : rcc
->last_mc_mb_var_sum
;
756 update_predictor(&rcc
->pred
[s
->last_pict_type
],
758 sqrt(last_var
), s
->frame_bits
);
761 if (s
->flags
& CODEC_FLAG_PASS2
) {
762 assert(picture_number
>= 0);
763 assert(picture_number
< rcc
->num_entries
);
764 rce
= &rcc
->entry
[picture_number
];
765 wanted_bits
= rce
->expected_bits
;
770 /* FIXME add a dts field to AVFrame and ensure it is set and use it
771 * here instead of reordering but the reordering is simpler for now
772 * until H.264 B-pyramid must be handled. */
773 if (s
->pict_type
== AV_PICTURE_TYPE_B
|| s
->low_delay
)
774 dts_pic
= s
->current_picture_ptr
;
776 dts_pic
= s
->last_picture_ptr
;
778 if (!dts_pic
|| dts_pic
->f
.pts
== AV_NOPTS_VALUE
)
779 wanted_bits
= (uint64_t)(s
->bit_rate
* (double)picture_number
/ fps
);
781 wanted_bits
= (uint64_t)(s
->bit_rate
* (double)dts_pic
->f
.pts
/ fps
);
784 diff
= s
->total_bits
- wanted_bits
;
785 br_compensation
= (a
->bit_rate_tolerance
- diff
) / a
->bit_rate_tolerance
;
786 if (br_compensation
<= 0.0)
787 br_compensation
= 0.001;
789 var
= pict_type
== AV_PICTURE_TYPE_I
? pic
->mb_var_sum
: pic
->mc_mb_var_sum
;
791 short_term_q
= 0; /* avoid warning */
792 if (s
->flags
& CODEC_FLAG_PASS2
) {
793 if (pict_type
!= AV_PICTURE_TYPE_I
)
794 assert(pict_type
== rce
->new_pict_type
);
796 q
= rce
->new_qscale
/ br_compensation
;
797 av_dlog(s
, "%f %f %f last:%d var:%d type:%d//\n", q
, rce
->new_qscale
,
798 br_compensation
, s
->frame_bits
, var
, pict_type
);
801 rce
->new_pict_type
= pict_type
;
802 rce
->mc_mb_var_sum
= pic
->mc_mb_var_sum
;
803 rce
->mb_var_sum
= pic
->mb_var_sum
;
804 rce
->qscale
= FF_QP2LAMBDA
* 2;
805 rce
->f_code
= s
->f_code
;
806 rce
->b_code
= s
->b_code
;
809 bits
= predict_size(&rcc
->pred
[pict_type
], rce
->qscale
, sqrt(var
));
810 if (pict_type
== AV_PICTURE_TYPE_I
) {
811 rce
->i_count
= s
->mb_num
;
812 rce
->i_tex_bits
= bits
;
816 rce
->i_count
= 0; // FIXME we do know this approx
818 rce
->p_tex_bits
= bits
* 0.9;
819 rce
->mv_bits
= bits
* 0.1;
821 rcc
->i_cplx_sum
[pict_type
] += rce
->i_tex_bits
* rce
->qscale
;
822 rcc
->p_cplx_sum
[pict_type
] += rce
->p_tex_bits
* rce
->qscale
;
823 rcc
->mv_bits_sum
[pict_type
] += rce
->mv_bits
;
824 rcc
->frame_count
[pict_type
]++;
826 bits
= rce
->i_tex_bits
+ rce
->p_tex_bits
;
827 rate_factor
= rcc
->pass1_wanted_bits
/
828 rcc
->pass1_rc_eq_output_sum
* br_compensation
;
830 q
= get_qscale(s
, rce
, rate_factor
, picture_number
);
835 q
= get_diff_limited_q(s
, rce
, q
);
838 // FIXME type dependent blur like in 2-pass
839 if (pict_type
== AV_PICTURE_TYPE_P
|| s
->intra_only
) {
840 rcc
->short_term_qsum
*= a
->qblur
;
841 rcc
->short_term_qcount
*= a
->qblur
;
843 rcc
->short_term_qsum
+= q
;
844 rcc
->short_term_qcount
++;
845 q
= short_term_q
= rcc
->short_term_qsum
/ rcc
->short_term_qcount
;
849 q
= modify_qscale(s
, rce
, q
, picture_number
);
851 rcc
->pass1_wanted_bits
+= s
->bit_rate
/ fps
;
856 if (s
->avctx
->debug
& FF_DEBUG_RC
) {
857 av_log(s
->avctx
, AV_LOG_DEBUG
,
858 "%c qp:%d<%2.1f<%d %d want:%d total:%d comp:%f st_q:%2.2f "
859 "size:%d var:%d/%d br:%d fps:%d\n",
860 av_get_picture_type_char(pict_type
),
861 qmin
, q
, qmax
, picture_number
,
862 (int)wanted_bits
/ 1000, (int)s
->total_bits
/ 1000,
863 br_compensation
, short_term_q
, s
->frame_bits
,
864 pic
->mb_var_sum
, pic
->mc_mb_var_sum
,
865 s
->bit_rate
/ 1000, (int)fps
);
873 if (s
->adaptive_quant
)
874 adaptive_quantization(s
, q
);
879 rcc
->last_qscale
= q
;
880 rcc
->last_mc_mb_var_sum
= pic
->mc_mb_var_sum
;
881 rcc
->last_mb_var_sum
= pic
->mb_var_sum
;
886 // ----------------------------------------------
889 static int init_pass2(MpegEncContext
*s
)
891 RateControlContext
*rcc
= &s
->rc_context
;
892 AVCodecContext
*a
= s
->avctx
;
894 double fps
= 1 / av_q2d(s
->avctx
->time_base
);
895 double complexity
[5] = { 0 }; // approximate bits at quant=1
896 uint64_t const_bits
[5] = { 0 }; // quantizer independent bits
897 uint64_t all_const_bits
;
898 uint64_t all_available_bits
= (uint64_t)(s
->bit_rate
*
899 (double)rcc
->num_entries
/ fps
);
900 double rate_factor
= 0;
902 const int filter_size
= (int)(a
->qblur
* 4) | 1;
903 double expected_bits
;
904 double *qscale
, *blurred_qscale
, qscale_sum
;
906 /* find complexity & const_bits & decide the pict_types */
907 for (i
= 0; i
< rcc
->num_entries
; i
++) {
908 RateControlEntry
*rce
= &rcc
->entry
[i
];
910 rce
->new_pict_type
= rce
->pict_type
;
911 rcc
->i_cplx_sum
[rce
->pict_type
] += rce
->i_tex_bits
* rce
->qscale
;
912 rcc
->p_cplx_sum
[rce
->pict_type
] += rce
->p_tex_bits
* rce
->qscale
;
913 rcc
->mv_bits_sum
[rce
->pict_type
] += rce
->mv_bits
;
914 rcc
->frame_count
[rce
->pict_type
]++;
916 complexity
[rce
->new_pict_type
] += (rce
->i_tex_bits
+ rce
->p_tex_bits
) *
918 const_bits
[rce
->new_pict_type
] += rce
->mv_bits
+ rce
->misc_bits
;
921 all_const_bits
= const_bits
[AV_PICTURE_TYPE_I
] +
922 const_bits
[AV_PICTURE_TYPE_P
] +
923 const_bits
[AV_PICTURE_TYPE_B
];
925 if (all_available_bits
< all_const_bits
) {
926 av_log(s
->avctx
, AV_LOG_ERROR
, "requested bitrate is too low\n");
930 qscale
= av_malloc(sizeof(double) * rcc
->num_entries
);
931 blurred_qscale
= av_malloc(sizeof(double) * rcc
->num_entries
);
934 for (step
= 256 * 256; step
> 0.0000001; step
*= 0.5) {
938 rcc
->buffer_index
= s
->avctx
->rc_buffer_size
/ 2;
941 for (i
= 0; i
< rcc
->num_entries
; i
++) {
942 RateControlEntry
*rce
= &rcc
->entry
[i
];
944 qscale
[i
] = get_qscale(s
, &rcc
->entry
[i
], rate_factor
, i
);
945 rcc
->last_qscale_for
[rce
->pict_type
] = qscale
[i
];
947 assert(filter_size
% 2 == 1);
949 /* fixed I/B QP relative to P mode */
950 for (i
= rcc
->num_entries
- 1; i
>= 0; i
--) {
951 RateControlEntry
*rce
= &rcc
->entry
[i
];
953 qscale
[i
] = get_diff_limited_q(s
, rce
, qscale
[i
]);
957 for (i
= 0; i
< rcc
->num_entries
; i
++) {
958 RateControlEntry
*rce
= &rcc
->entry
[i
];
959 const int pict_type
= rce
->new_pict_type
;
961 double q
= 0.0, sum
= 0.0;
963 for (j
= 0; j
< filter_size
; j
++) {
964 int index
= i
+ j
- filter_size
/ 2;
965 double d
= index
- i
;
966 double coeff
= a
->qblur
== 0 ? 1.0 : exp(-d
* d
/ (a
->qblur
* a
->qblur
));
968 if (index
< 0 || index
>= rcc
->num_entries
)
970 if (pict_type
!= rcc
->entry
[index
].new_pict_type
)
972 q
+= qscale
[index
] * coeff
;
975 blurred_qscale
[i
] = q
/ sum
;
978 /* find expected bits */
979 for (i
= 0; i
< rcc
->num_entries
; i
++) {
980 RateControlEntry
*rce
= &rcc
->entry
[i
];
983 rce
->new_qscale
= modify_qscale(s
, rce
, blurred_qscale
[i
], i
);
985 bits
= qp2bits(rce
, rce
->new_qscale
) + rce
->mv_bits
+ rce
->misc_bits
;
986 bits
+= 8 * ff_vbv_update(s
, bits
);
988 rce
->expected_bits
= expected_bits
;
989 expected_bits
+= bits
;
993 "expected_bits: %f all_available_bits: %d rate_factor: %f\n",
994 expected_bits
, (int)all_available_bits
, rate_factor
);
995 if (expected_bits
> all_available_bits
) {
1001 av_free(blurred_qscale
);
1003 /* check bitrate calculations and print info */
1005 for (i
= 0; i
< rcc
->num_entries
; i
++) {
1006 av_dlog(s
, "[lavc rc] entry[%d].new_qscale = %.3f qp = %.3f\n",
1008 rcc
->entry
[i
].new_qscale
,
1009 rcc
->entry
[i
].new_qscale
/ FF_QP2LAMBDA
);
1010 qscale_sum
+= av_clip(rcc
->entry
[i
].new_qscale
/ FF_QP2LAMBDA
,
1011 s
->avctx
->qmin
, s
->avctx
->qmax
);
1013 assert(toobig
<= 40);
1014 av_log(s
->avctx
, AV_LOG_DEBUG
,
1015 "[lavc rc] requested bitrate: %d bps expected bitrate: %d bps\n",
1017 (int)(expected_bits
/ ((double)all_available_bits
/ s
->bit_rate
)));
1018 av_log(s
->avctx
, AV_LOG_DEBUG
,
1019 "[lavc rc] estimated target average qp: %.3f\n",
1020 (float)qscale_sum
/ rcc
->num_entries
);
1022 av_log(s
->avctx
, AV_LOG_INFO
,
1023 "[lavc rc] Using all of requested bitrate is not "
1024 "necessary for this video with these parameters.\n");
1025 } else if (toobig
== 40) {
1026 av_log(s
->avctx
, AV_LOG_ERROR
,
1027 "[lavc rc] Error: bitrate too low for this video "
1028 "with these parameters.\n");
1030 } else if (fabs(expected_bits
/ all_available_bits
- 1.0) > 0.01) {
1031 av_log(s
->avctx
, AV_LOG_ERROR
,
1032 "[lavc rc] Error: 2pass curve failed to converge\n");