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
24 * @file libavcodec/ratecontrol.c
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 (* const 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
) {
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
;
214 if (i
%((s
->gop_size
+3)/4)==0) rce
.pict_type
= FF_I_TYPE
;
215 else if(i
%(s
->max_b_frames
+1)) rce
.pict_type
= FF_B_TYPE
;
216 else rce
.pict_type
= FF_P_TYPE
;
218 rce
.new_pict_type
= rce
.pict_type
;
219 rce
.mc_mb_var_sum
= bits
*s
->mb_num
/100000;
220 rce
.mb_var_sum
= s
->mb_num
;
221 rce
.qscale
= FF_QP2LAMBDA
* 2;
226 if(s
->pict_type
== FF_I_TYPE
){
227 rce
.i_count
= s
->mb_num
;
228 rce
.i_tex_bits
= bits
;
232 rce
.i_count
= 0; //FIXME we do know this approx
234 rce
.p_tex_bits
= bits
*0.9;
235 rce
.mv_bits
= bits
*0.1;
237 rcc
->i_cplx_sum
[rce
.pict_type
] += rce
.i_tex_bits
*rce
.qscale
;
238 rcc
->p_cplx_sum
[rce
.pict_type
] += rce
.p_tex_bits
*rce
.qscale
;
239 rcc
->mv_bits_sum
[rce
.pict_type
] += rce
.mv_bits
;
240 rcc
->frame_count
[rce
.pict_type
] ++;
242 get_qscale(s
, &rce
, rcc
->pass1_wanted_bits
/rcc
->pass1_rc_eq_output_sum
, i
);
243 rcc
->pass1_wanted_bits
+= s
->bit_rate
/(1/av_q2d(s
->avctx
->time_base
)); //FIXME misbehaves a little for variable fps
252 void ff_rate_control_uninit(MpegEncContext
*s
)
254 RateControlContext
*rcc
= &s
->rc_context
;
257 ff_eval_free(rcc
->rc_eq_eval
);
258 av_freep(&rcc
->entry
);
261 if((s
->flags
&CODEC_FLAG_PASS2
) && s
->avctx
->rc_strategy
== FF_RC_STRATEGY_XVID
)
262 ff_xvid_rate_control_uninit(s
);
266 int ff_vbv_update(MpegEncContext
*s
, int frame_size
){
267 RateControlContext
*rcc
= &s
->rc_context
;
268 const double fps
= 1/av_q2d(s
->avctx
->time_base
);
269 const int buffer_size
= s
->avctx
->rc_buffer_size
;
270 const double min_rate
= s
->avctx
->rc_min_rate
/fps
;
271 const double max_rate
= s
->avctx
->rc_max_rate
/fps
;
273 //printf("%d %f %d %f %f\n", buffer_size, rcc->buffer_index, frame_size, min_rate, max_rate);
277 rcc
->buffer_index
-= frame_size
;
278 if(rcc
->buffer_index
< 0){
279 av_log(s
->avctx
, AV_LOG_ERROR
, "rc buffer underflow\n");
280 rcc
->buffer_index
= 0;
283 left
= buffer_size
- rcc
->buffer_index
- 1;
284 rcc
->buffer_index
+= av_clip(left
, min_rate
, max_rate
);
286 if(rcc
->buffer_index
> buffer_size
){
287 int stuffing
= ceil((rcc
->buffer_index
- buffer_size
)/8);
289 if(stuffing
< 4 && s
->codec_id
== CODEC_ID_MPEG4
)
291 rcc
->buffer_index
-= 8*stuffing
;
293 if(s
->avctx
->debug
& FF_DEBUG_RC
)
294 av_log(s
->avctx
, AV_LOG_DEBUG
, "stuffing %d bytes\n", stuffing
);
303 * modifies the bitrate curve from pass1 for one frame
305 static double get_qscale(MpegEncContext
*s
, RateControlEntry
*rce
, double rate_factor
, int frame_num
){
306 RateControlContext
*rcc
= &s
->rc_context
;
307 AVCodecContext
*a
= s
->avctx
;
309 const int pict_type
= rce
->new_pict_type
;
310 const double mb_num
= s
->mb_num
;
313 double const_values
[]={
316 rce
->i_tex_bits
*rce
->qscale
,
317 rce
->p_tex_bits
*rce
->qscale
,
318 (rce
->i_tex_bits
+ rce
->p_tex_bits
)*(double)rce
->qscale
,
320 rce
->pict_type
== FF_B_TYPE
? (rce
->f_code
+ rce
->b_code
)*0.5 : rce
->f_code
,
322 rce
->mc_mb_var_sum
/mb_num
,
323 rce
->mb_var_sum
/mb_num
,
324 rce
->pict_type
== FF_I_TYPE
,
325 rce
->pict_type
== FF_P_TYPE
,
326 rce
->pict_type
== FF_B_TYPE
,
327 rcc
->qscale_sum
[pict_type
] / (double)rcc
->frame_count
[pict_type
],
329 /* rcc->last_qscale_for[FF_I_TYPE],
330 rcc->last_qscale_for[FF_P_TYPE],
331 rcc->last_qscale_for[FF_B_TYPE],
332 rcc->next_non_b_qscale,*/
333 rcc
->i_cplx_sum
[FF_I_TYPE
] / (double)rcc
->frame_count
[FF_I_TYPE
],
334 rcc
->i_cplx_sum
[FF_P_TYPE
] / (double)rcc
->frame_count
[FF_P_TYPE
],
335 rcc
->p_cplx_sum
[FF_P_TYPE
] / (double)rcc
->frame_count
[FF_P_TYPE
],
336 rcc
->p_cplx_sum
[FF_B_TYPE
] / (double)rcc
->frame_count
[FF_B_TYPE
],
337 (rcc
->i_cplx_sum
[pict_type
] + rcc
->p_cplx_sum
[pict_type
]) / (double)rcc
->frame_count
[pict_type
],
341 bits
= ff_parse_eval(rcc
->rc_eq_eval
, const_values
, rce
);
343 av_log(s
->avctx
, AV_LOG_ERROR
, "Error evaluating rc_eq \"%s\"\n", s
->avctx
->rc_eq
);
347 rcc
->pass1_rc_eq_output_sum
+= bits
;
349 if(bits
<0.0) bits
=0.0;
350 bits
+= 1.0; //avoid 1/0 issues
353 for(i
=0; i
<s
->avctx
->rc_override_count
; i
++){
354 RcOverride
*rco
= s
->avctx
->rc_override
;
355 if(rco
[i
].start_frame
> frame_num
) continue;
356 if(rco
[i
].end_frame
< frame_num
) continue;
359 bits
= qp2bits(rce
, rco
[i
].qscale
); //FIXME move at end to really force it?
361 bits
*= rco
[i
].quality_factor
;
364 q
= bits2qp(rce
, bits
);
367 if (pict_type
==FF_I_TYPE
&& s
->avctx
->i_quant_factor
<0.0)
368 q
= -q
*s
->avctx
->i_quant_factor
+ s
->avctx
->i_quant_offset
;
369 else if(pict_type
==FF_B_TYPE
&& s
->avctx
->b_quant_factor
<0.0)
370 q
= -q
*s
->avctx
->b_quant_factor
+ s
->avctx
->b_quant_offset
;
376 static double get_diff_limited_q(MpegEncContext
*s
, RateControlEntry
*rce
, double q
){
377 RateControlContext
*rcc
= &s
->rc_context
;
378 AVCodecContext
*a
= s
->avctx
;
379 const int pict_type
= rce
->new_pict_type
;
380 const double last_p_q
= rcc
->last_qscale_for
[FF_P_TYPE
];
381 const double last_non_b_q
= rcc
->last_qscale_for
[rcc
->last_non_b_pict_type
];
383 if (pict_type
==FF_I_TYPE
&& (a
->i_quant_factor
>0.0 || rcc
->last_non_b_pict_type
==FF_P_TYPE
))
384 q
= last_p_q
*FFABS(a
->i_quant_factor
) + a
->i_quant_offset
;
385 else if(pict_type
==FF_B_TYPE
&& a
->b_quant_factor
>0.0)
386 q
= last_non_b_q
* a
->b_quant_factor
+ a
->b_quant_offset
;
389 /* last qscale / qdiff stuff */
390 if(rcc
->last_non_b_pict_type
==pict_type
|| pict_type
!=FF_I_TYPE
){
391 double last_q
= rcc
->last_qscale_for
[pict_type
];
392 const int maxdiff
= FF_QP2LAMBDA
* a
->max_qdiff
;
394 if (q
> last_q
+ maxdiff
) q
= last_q
+ maxdiff
;
395 else if(q
< last_q
- maxdiff
) q
= last_q
- maxdiff
;
398 rcc
->last_qscale_for
[pict_type
]= q
; //Note we cannot do that after blurring
400 if(pict_type
!=FF_B_TYPE
)
401 rcc
->last_non_b_pict_type
= pict_type
;
407 * gets the qmin & qmax for pict_type
409 static void get_qminmax(int *qmin_ret
, int *qmax_ret
, MpegEncContext
*s
, int pict_type
){
410 int qmin
= s
->avctx
->lmin
;
411 int qmax
= s
->avctx
->lmax
;
413 assert(qmin
<= qmax
);
415 if(pict_type
==FF_B_TYPE
){
416 qmin
= (int)(qmin
*FFABS(s
->avctx
->b_quant_factor
)+s
->avctx
->b_quant_offset
+ 0.5);
417 qmax
= (int)(qmax
*FFABS(s
->avctx
->b_quant_factor
)+s
->avctx
->b_quant_offset
+ 0.5);
418 }else if(pict_type
==FF_I_TYPE
){
419 qmin
= (int)(qmin
*FFABS(s
->avctx
->i_quant_factor
)+s
->avctx
->i_quant_offset
+ 0.5);
420 qmax
= (int)(qmax
*FFABS(s
->avctx
->i_quant_factor
)+s
->avctx
->i_quant_offset
+ 0.5);
423 qmin
= av_clip(qmin
, 1, FF_LAMBDA_MAX
);
424 qmax
= av_clip(qmax
, 1, FF_LAMBDA_MAX
);
426 if(qmax
<qmin
) qmax
= qmin
;
432 static double modify_qscale(MpegEncContext
*s
, RateControlEntry
*rce
, double q
, int frame_num
){
433 RateControlContext
*rcc
= &s
->rc_context
;
435 const int pict_type
= rce
->new_pict_type
;
436 const double buffer_size
= s
->avctx
->rc_buffer_size
;
437 const double fps
= 1/av_q2d(s
->avctx
->time_base
);
438 const double min_rate
= s
->avctx
->rc_min_rate
/ fps
;
439 const double max_rate
= s
->avctx
->rc_max_rate
/ fps
;
441 get_qminmax(&qmin
, &qmax
, s
, pict_type
);
444 if(s
->avctx
->rc_qmod_freq
&& frame_num
%s
->avctx
->rc_qmod_freq
==0 && pict_type
==FF_P_TYPE
)
445 q
*= s
->avctx
->rc_qmod_amp
;
447 //printf("q:%f\n", q);
448 /* buffer overflow/underflow protection */
450 double expected_size
= rcc
->buffer_index
;
454 double d
= 2*(buffer_size
- expected_size
)/buffer_size
;
456 else if(d
<0.0001) d
=0.0001;
457 q
*= pow(d
, 1.0/s
->avctx
->rc_buffer_aggressivity
);
459 q_limit
= bits2qp(rce
, FFMAX((min_rate
- buffer_size
+ rcc
->buffer_index
) * s
->avctx
->rc_min_vbv_overflow_use
, 1));
461 if(s
->avctx
->debug
&FF_DEBUG_RC
){
462 av_log(s
->avctx
, AV_LOG_DEBUG
, "limiting QP %f -> %f\n", q
, q_limit
);
469 double d
= 2*expected_size
/buffer_size
;
471 else if(d
<0.0001) d
=0.0001;
472 q
/= pow(d
, 1.0/s
->avctx
->rc_buffer_aggressivity
);
474 q_limit
= bits2qp(rce
, FFMAX(rcc
->buffer_index
* s
->avctx
->rc_max_available_vbv_use
, 1));
476 if(s
->avctx
->debug
&FF_DEBUG_RC
){
477 av_log(s
->avctx
, AV_LOG_DEBUG
, "limiting QP %f -> %f\n", q
, q_limit
);
483 //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);
484 if(s
->avctx
->rc_qsquish
==0.0 || qmin
==qmax
){
486 else if(q
>qmax
) q
=qmax
;
488 double min2
= log(qmin
);
489 double max2
= log(qmax
);
492 q
= (q
- min2
)/(max2
-min2
) - 0.5;
494 q
= 1.0/(1.0 + exp(q
));
495 q
= q
*(max2
-min2
) + min2
;
503 //----------------------------------
506 static double predict_size(Predictor
*p
, double q
, double var
)
508 return p
->coeff
*var
/ (q
*p
->count
);
512 static double predict_qp(Predictor *p, double size, double var)
514 //printf("coeff:%f, count:%f, var:%f, size:%f//\n", p->coeff, p->count, var, size);
515 return p->coeff*var / (size*p->count);
519 static void update_predictor(Predictor
*p
, double q
, double var
, double size
)
521 double new_coeff
= size
*q
/ (var
+ 1);
527 p
->coeff
+= new_coeff
;
530 static void adaptive_quantization(MpegEncContext
*s
, double q
){
532 const float lumi_masking
= s
->avctx
->lumi_masking
/ (128.0*128.0);
533 const float dark_masking
= s
->avctx
->dark_masking
/ (128.0*128.0);
534 const float temp_cplx_masking
= s
->avctx
->temporal_cplx_masking
;
535 const float spatial_cplx_masking
= s
->avctx
->spatial_cplx_masking
;
536 const float p_masking
= s
->avctx
->p_masking
;
537 const float border_masking
= s
->avctx
->border_masking
;
540 float cplx_tab
[s
->mb_num
];
541 float bits_tab
[s
->mb_num
];
542 const int qmin
= s
->avctx
->mb_lmin
;
543 const int qmax
= s
->avctx
->mb_lmax
;
544 Picture
* const pic
= &s
->current_picture
;
545 const int mb_width
= s
->mb_width
;
546 const int mb_height
= s
->mb_height
;
548 for(i
=0; i
<s
->mb_num
; i
++){
549 const int mb_xy
= s
->mb_index2xy
[i
];
550 float temp_cplx
= sqrt(pic
->mc_mb_var
[mb_xy
]); //FIXME merge in pow()
551 float spat_cplx
= sqrt(pic
->mb_var
[mb_xy
]);
552 const int lumi
= pic
->mb_mean
[mb_xy
];
553 float bits
, cplx
, factor
;
554 int mb_x
= mb_xy
% s
->mb_stride
;
555 int mb_y
= mb_xy
/ s
->mb_stride
;
557 float mb_factor
= 0.0;
559 if(spat_cplx
< q
/3) spat_cplx
= q
/3; //FIXME finetune
560 if(temp_cplx
< q
/3) temp_cplx
= q
/3; //FIXME finetune
562 if(spat_cplx
< 4) spat_cplx
= 4; //FIXME finetune
563 if(temp_cplx
< 4) temp_cplx
= 4; //FIXME finetune
565 if((s
->mb_type
[mb_xy
]&CANDIDATE_MB_TYPE_INTRA
)){//FIXME hq mode
567 factor
= 1.0 + p_masking
;
570 factor
= pow(temp_cplx
, - temp_cplx_masking
);
572 factor
*=pow(spat_cplx
, - spatial_cplx_masking
);
575 factor
*= (1.0 - (lumi
-128)*(lumi
-128)*lumi_masking
);
577 factor
*= (1.0 - (lumi
-128)*(lumi
-128)*dark_masking
);
579 if(mb_x
< mb_width
/5){
580 mb_distance
= mb_width
/5 - mb_x
;
581 mb_factor
= (float)mb_distance
/ (float)(mb_width
/5);
582 }else if(mb_x
> 4*mb_width
/5){
583 mb_distance
= mb_x
- 4*mb_width
/5;
584 mb_factor
= (float)mb_distance
/ (float)(mb_width
/5);
586 if(mb_y
< mb_height
/5){
587 mb_distance
= mb_height
/5 - mb_y
;
588 mb_factor
= FFMAX(mb_factor
, (float)mb_distance
/ (float)(mb_height
/5));
589 }else if(mb_y
> 4*mb_height
/5){
590 mb_distance
= mb_y
- 4*mb_height
/5;
591 mb_factor
= FFMAX(mb_factor
, (float)mb_distance
/ (float)(mb_height
/5));
594 factor
*= 1.0 - border_masking
*mb_factor
;
596 if(factor
<0.00001) factor
= 0.00001;
605 /* handle qmin/qmax clipping */
606 if(s
->flags
&CODEC_FLAG_NORMALIZE_AQP
){
607 float factor
= bits_sum
/cplx_sum
;
608 for(i
=0; i
<s
->mb_num
; i
++){
609 float newq
= q
*cplx_tab
[i
]/bits_tab
[i
];
613 bits_sum
-= bits_tab
[i
];
614 cplx_sum
-= cplx_tab
[i
]*q
/qmax
;
616 else if(newq
< qmin
){
617 bits_sum
-= bits_tab
[i
];
618 cplx_sum
-= cplx_tab
[i
]*q
/qmin
;
621 if(bits_sum
< 0.001) bits_sum
= 0.001;
622 if(cplx_sum
< 0.001) cplx_sum
= 0.001;
625 for(i
=0; i
<s
->mb_num
; i
++){
626 const int mb_xy
= s
->mb_index2xy
[i
];
627 float newq
= q
*cplx_tab
[i
]/bits_tab
[i
];
630 if(s
->flags
&CODEC_FLAG_NORMALIZE_AQP
){
631 newq
*= bits_sum
/cplx_sum
;
634 intq
= (int)(newq
+ 0.5);
636 if (intq
> qmax
) intq
= qmax
;
637 else if(intq
< qmin
) intq
= qmin
;
638 //if(i%s->mb_width==0) printf("\n");
639 //printf("%2d%3d ", intq, ff_sqrt(s->mc_mb_var[i]));
640 s
->lambda_table
[mb_xy
]= intq
;
644 void ff_get_2pass_fcode(MpegEncContext
*s
){
645 RateControlContext
*rcc
= &s
->rc_context
;
646 int picture_number
= s
->picture_number
;
647 RateControlEntry
*rce
;
649 rce
= &rcc
->entry
[picture_number
];
650 s
->f_code
= rce
->f_code
;
651 s
->b_code
= rce
->b_code
;
654 //FIXME rd or at least approx for dquant
656 float ff_rate_estimate_qscale(MpegEncContext
*s
, int dry_run
)
660 float br_compensation
;
664 int picture_number
= s
->picture_number
;
666 RateControlContext
*rcc
= &s
->rc_context
;
667 AVCodecContext
*a
= s
->avctx
;
668 RateControlEntry local_rce
, *rce
;
672 const int pict_type
= s
->pict_type
;
673 Picture
* const pic
= &s
->current_picture
;
677 if((s
->flags
&CODEC_FLAG_PASS2
) && s
->avctx
->rc_strategy
== FF_RC_STRATEGY_XVID
)
678 return ff_xvid_rate_estimate_qscale(s
, dry_run
);
681 get_qminmax(&qmin
, &qmax
, s
, pict_type
);
683 fps
= 1/av_q2d(s
->avctx
->time_base
);
684 //printf("input_pic_num:%d pic_num:%d frame_rate:%d\n", s->input_picture_number, s->picture_number, s->frame_rate);
685 /* update predictors */
686 if(picture_number
>2 && !dry_run
){
687 const int last_var
= s
->last_pict_type
== FF_I_TYPE
? rcc
->last_mb_var_sum
: rcc
->last_mc_mb_var_sum
;
688 update_predictor(&rcc
->pred
[s
->last_pict_type
], rcc
->last_qscale
, sqrt(last_var
), s
->frame_bits
);
691 if(s
->flags
&CODEC_FLAG_PASS2
){
692 assert(picture_number
>=0);
693 assert(picture_number
<rcc
->num_entries
);
694 rce
= &rcc
->entry
[picture_number
];
695 wanted_bits
= rce
->expected_bits
;
700 //FIXME add a dts field to AVFrame and ensure its set and use it here instead of reordering
701 //but the reordering is simpler for now until h.264 b pyramid must be handeld
702 if(s
->pict_type
== FF_B_TYPE
|| s
->low_delay
)
703 dts_pic
= s
->current_picture_ptr
;
705 dts_pic
= s
->last_picture_ptr
;
708 // 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);
710 if(!dts_pic
|| dts_pic
->pts
== AV_NOPTS_VALUE
)
711 wanted_bits
= (uint64_t)(s
->bit_rate
*(double)picture_number
/fps
);
713 wanted_bits
= (uint64_t)(s
->bit_rate
*(double)dts_pic
->pts
/fps
);
716 diff
= s
->total_bits
- wanted_bits
;
717 br_compensation
= (a
->bit_rate_tolerance
- diff
)/a
->bit_rate_tolerance
;
718 if(br_compensation
<=0.0) br_compensation
=0.001;
720 var
= pict_type
== FF_I_TYPE
? pic
->mb_var_sum
: pic
->mc_mb_var_sum
;
722 short_term_q
= 0; /* avoid warning */
723 if(s
->flags
&CODEC_FLAG_PASS2
){
724 if(pict_type
!=FF_I_TYPE
)
725 assert(pict_type
== rce
->new_pict_type
);
727 q
= rce
->new_qscale
/ br_compensation
;
728 //printf("%f %f %f last:%d var:%d type:%d//\n", q, rce->new_qscale, br_compensation, s->frame_bits, var, pict_type);
731 rce
->new_pict_type
= pict_type
;
732 rce
->mc_mb_var_sum
= pic
->mc_mb_var_sum
;
733 rce
->mb_var_sum
= pic
-> mb_var_sum
;
734 rce
->qscale
= FF_QP2LAMBDA
* 2;
735 rce
->f_code
= s
->f_code
;
736 rce
->b_code
= s
->b_code
;
739 bits
= predict_size(&rcc
->pred
[pict_type
], rce
->qscale
, sqrt(var
));
740 if(pict_type
== FF_I_TYPE
){
741 rce
->i_count
= s
->mb_num
;
742 rce
->i_tex_bits
= bits
;
746 rce
->i_count
= 0; //FIXME we do know this approx
748 rce
->p_tex_bits
= bits
*0.9;
750 rce
->mv_bits
= bits
*0.1;
752 rcc
->i_cplx_sum
[pict_type
] += rce
->i_tex_bits
*rce
->qscale
;
753 rcc
->p_cplx_sum
[pict_type
] += rce
->p_tex_bits
*rce
->qscale
;
754 rcc
->mv_bits_sum
[pict_type
] += rce
->mv_bits
;
755 rcc
->frame_count
[pict_type
] ++;
757 bits
= rce
->i_tex_bits
+ rce
->p_tex_bits
;
758 rate_factor
= rcc
->pass1_wanted_bits
/rcc
->pass1_rc_eq_output_sum
* br_compensation
;
760 q
= get_qscale(s
, rce
, rate_factor
, picture_number
);
766 q
= get_diff_limited_q(s
, rce
, q
);
770 if(pict_type
==FF_P_TYPE
|| s
->intra_only
){ //FIXME type dependent blur like in 2-pass
771 rcc
->short_term_qsum
*=a
->qblur
;
772 rcc
->short_term_qcount
*=a
->qblur
;
774 rcc
->short_term_qsum
+= q
;
775 rcc
->short_term_qcount
++;
777 q
= short_term_q
= rcc
->short_term_qsum
/rcc
->short_term_qcount
;
782 q
= modify_qscale(s
, rce
, q
, picture_number
);
784 rcc
->pass1_wanted_bits
+= s
->bit_rate
/fps
;
789 if(s
->avctx
->debug
&FF_DEBUG_RC
){
790 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",
791 av_get_pict_type_char(pict_type
), qmin
, q
, qmax
, picture_number
, (int)wanted_bits
/1000, (int)s
->total_bits
/1000,
792 br_compensation
, short_term_q
, s
->frame_bits
, pic
->mb_var_sum
, pic
->mc_mb_var_sum
, s
->bit_rate
/1000, (int)fps
797 else if(q
>qmax
) q
=qmax
;
799 if(s
->adaptive_quant
)
800 adaptive_quantization(s
, q
);
806 rcc
->last_mc_mb_var_sum
= pic
->mc_mb_var_sum
;
807 rcc
->last_mb_var_sum
= pic
->mb_var_sum
;
811 static int mvsum
=0, texsum
=0;
813 texsum
+= s
->i_tex_bits
+ s
->p_tex_bits
;
814 printf("%d %d//\n\n", mvsum
, texsum
);
820 //----------------------------------------------
823 static int init_pass2(MpegEncContext
*s
)
825 RateControlContext
*rcc
= &s
->rc_context
;
826 AVCodecContext
*a
= s
->avctx
;
828 double fps
= 1/av_q2d(s
->avctx
->time_base
);
829 double complexity
[5]={0,0,0,0,0}; // aproximate bits at quant=1
830 uint64_t const_bits
[5]={0,0,0,0,0}; // quantizer independent bits
831 uint64_t all_const_bits
;
832 uint64_t all_available_bits
= (uint64_t)(s
->bit_rate
*(double)rcc
->num_entries
/fps
);
833 double rate_factor
=0;
835 //int last_i_frame=-10000000;
836 const int filter_size
= (int)(a
->qblur
*4) | 1;
837 double expected_bits
;
838 double *qscale
, *blurred_qscale
, qscale_sum
;
840 /* find complexity & const_bits & decide the pict_types */
841 for(i
=0; i
<rcc
->num_entries
; i
++){
842 RateControlEntry
*rce
= &rcc
->entry
[i
];
844 rce
->new_pict_type
= rce
->pict_type
;
845 rcc
->i_cplx_sum
[rce
->pict_type
] += rce
->i_tex_bits
*rce
->qscale
;
846 rcc
->p_cplx_sum
[rce
->pict_type
] += rce
->p_tex_bits
*rce
->qscale
;
847 rcc
->mv_bits_sum
[rce
->pict_type
] += rce
->mv_bits
;
848 rcc
->frame_count
[rce
->pict_type
] ++;
850 complexity
[rce
->new_pict_type
]+= (rce
->i_tex_bits
+ rce
->p_tex_bits
)*(double)rce
->qscale
;
851 const_bits
[rce
->new_pict_type
]+= rce
->mv_bits
+ rce
->misc_bits
;
853 all_const_bits
= const_bits
[FF_I_TYPE
] + const_bits
[FF_P_TYPE
] + const_bits
[FF_B_TYPE
];
855 if(all_available_bits
< all_const_bits
){
856 av_log(s
->avctx
, AV_LOG_ERROR
, "requested bitrate is too low\n");
860 qscale
= av_malloc(sizeof(double)*rcc
->num_entries
);
861 blurred_qscale
= av_malloc(sizeof(double)*rcc
->num_entries
);
864 for(step
=256*256; step
>0.0000001; step
*=0.5){
868 rcc
->buffer_index
= s
->avctx
->rc_buffer_size
/2;
871 for(i
=0; i
<rcc
->num_entries
; i
++){
872 qscale
[i
]= get_qscale(s
, &rcc
->entry
[i
], rate_factor
, i
);
874 assert(filter_size
%2==1);
876 /* fixed I/B QP relative to P mode */
877 for(i
=rcc
->num_entries
-1; i
>=0; i
--){
878 RateControlEntry
*rce
= &rcc
->entry
[i
];
880 qscale
[i
]= get_diff_limited_q(s
, rce
, qscale
[i
]);
884 for(i
=0; i
<rcc
->num_entries
; i
++){
885 RateControlEntry
*rce
= &rcc
->entry
[i
];
886 const int pict_type
= rce
->new_pict_type
;
888 double q
=0.0, sum
=0.0;
890 for(j
=0; j
<filter_size
; j
++){
891 int index
= i
+j
-filter_size
/2;
893 double coeff
= a
->qblur
==0 ? 1.0 : exp(-d
*d
/(a
->qblur
* a
->qblur
));
895 if(index
< 0 || index
>= rcc
->num_entries
) continue;
896 if(pict_type
!= rcc
->entry
[index
].new_pict_type
) continue;
897 q
+= qscale
[index
] * coeff
;
900 blurred_qscale
[i
]= q
/sum
;
903 /* find expected bits */
904 for(i
=0; i
<rcc
->num_entries
; i
++){
905 RateControlEntry
*rce
= &rcc
->entry
[i
];
907 rce
->new_qscale
= modify_qscale(s
, rce
, blurred_qscale
[i
], i
);
908 bits
= qp2bits(rce
, rce
->new_qscale
) + rce
->mv_bits
+ rce
->misc_bits
;
909 //printf("%d %f\n", rce->new_bits, blurred_qscale[i]);
910 bits
+= 8*ff_vbv_update(s
, bits
);
912 rce
->expected_bits
= expected_bits
;
913 expected_bits
+= bits
;
917 av_log(s->avctx, AV_LOG_INFO,
918 "expected_bits: %f all_available_bits: %d rate_factor: %f\n",
919 expected_bits, (int)all_available_bits, rate_factor);
921 if(expected_bits
> all_available_bits
) {
927 av_free(blurred_qscale
);
929 /* check bitrate calculations and print info */
931 for(i
=0; i
<rcc
->num_entries
; i
++){
932 /* av_log(s->avctx, AV_LOG_DEBUG, "[lavc rc] entry[%d].new_qscale = %.3f qp = %.3f\n",
933 i, rcc->entry[i].new_qscale, rcc->entry[i].new_qscale / FF_QP2LAMBDA); */
934 qscale_sum
+= av_clip(rcc
->entry
[i
].new_qscale
/ FF_QP2LAMBDA
, s
->avctx
->qmin
, s
->avctx
->qmax
);
936 assert(toobig
<= 40);
937 av_log(s
->avctx
, AV_LOG_DEBUG
,
938 "[lavc rc] requested bitrate: %d bps expected bitrate: %d bps\n",
940 (int)(expected_bits
/ ((double)all_available_bits
/s
->bit_rate
)));
941 av_log(s
->avctx
, AV_LOG_DEBUG
,
942 "[lavc rc] estimated target average qp: %.3f\n",
943 (float)qscale_sum
/ rcc
->num_entries
);
945 av_log(s
->avctx
, AV_LOG_INFO
,
946 "[lavc rc] Using all of requested bitrate is not "
947 "necessary for this video with these parameters.\n");
948 } else if (toobig
== 40) {
949 av_log(s
->avctx
, AV_LOG_ERROR
,
950 "[lavc rc] Error: bitrate too low for this video "
951 "with these parameters.\n");
953 } else if (fabs(expected_bits
/all_available_bits
- 1.0) > 0.01) {
954 av_log(s
->avctx
, AV_LOG_ERROR
,
955 "[lavc rc] Error: 2pass curve failed to converge\n");