1 /***************************************************-*- coding: iso-8859-1 -*-
2 * ratecontrol.c: h264 encoder library (Rate Control)
3 *****************************************************************************
4 * Copyright (C) 2003 Laurent Aimar
5 * $Id: ratecontrol.c,v 1.1 2004/06/03 19:27:08 fenrir Exp $
7 * Authors: Måns Rullgård <mru@mru.ath.cx>
8 * 2 pass code: Michael Niedermayer <michaelni@gmx.at>
9 * Loren Merritt <lorenm@u.washington.edu>
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
24 *****************************************************************************/
26 #define _ISOC99_SOURCE
27 #undef NDEBUG // always check asserts, the speed effect is far too small to disable them
35 #include "common/common.h"
36 #include "common/cpu.h"
37 #include "common/macroblock.h"
38 #include "ratecontrol.h"
40 #if defined(SYS_FREEBSD) || defined(SYS_BEOS)
41 #define exp2f(x) powf( 2, (x) )
44 #define exp2f(x) pow( 2, (x) )
47 #ifdef WIN32 // POSIX says that rename() removes the destination, but win32 doesn't.
48 #define rename(src,dst) (unlink(dst), rename(src,dst))
60 uint64_t expected_bits;
66 float blurred_complexity;
67 } ratecontrol_entry_t;
69 struct x264_ratecontrol_t
75 int nmb; /* number of macroblocks in a frame */
84 int frames; /* frames in current gop */
87 int mb; /* MBs processed in current frame */
88 int bits_gop; /* allocated bits current gop */
89 int bits_last_gop; /* bits consumed in gop */
90 int qp; /* qp for current frame */
91 int qpm; /* qp for next MB */
92 float qpa; /* average qp for last frame */
94 float qp_avg_p; /* average QP for P frames */
96 int fbits; /* bits allocated for current frame */
97 int ufbits; /* bits used for current frame */
98 int nzcoeffs; /* # of 0-quantized coefficients */
99 int ncoeffs; /* total # of coefficients */
104 FILE *p_stat_file_out;
105 char *psz_stat_file_tmpname;
107 int num_entries; /* number of ratecontrol_entry_ts */
108 ratecontrol_entry_t *entry; /* FIXME: copy needed data and free this once init is done */
110 double last_qscale_for[5]; /* last qscale for a specific pict type, used for max_diff & ipb factor stuff */
111 int last_non_b_pict_type;
112 double accum_p_qp; /* for determining I-frame quant */
114 double last_accum_p_norm;
115 double lmin[5]; /* min qscale by frame type */
117 double lstep; /* max change (multiply) in qscale per frame */
118 double i_cplx_sum[5]; /* estimated total texture bits in intra MBs at qscale=1 */
119 double p_cplx_sum[5];
120 double mv_bits_sum[5];
121 int frame_count[5]; /* number of frames of each type */
125 static int init_pass2(x264_t *);
126 static float rate_estimate_qscale( x264_t *h, int pict_type );
129 * qp = h.264's quantizer
130 * qscale = linearized quantizer = Lagrange multiplier
132 static inline double qp2qscale(double qp)
134 return 0.85 * pow(2.0, ( qp - 12.0 ) / 6.0);
136 static inline double qscale2qp(double qscale)
138 return 12.0 + 6.0 * log(qscale/0.85) / log(2.0);
141 /* Texture bitrate is not quite inversely proportional to qscale,
142 * probably due the the changing number of SKIP blocks.
143 * MV bits level off at about qp<=12, because the lambda used
144 * for motion estimation is constant there. */
145 static inline double qscale2bits(ratecontrol_entry_t *rce, double qscale)
149 return (rce->i_tex_bits + rce->p_tex_bits + .1) * pow( rce->qscale / qscale, 1.1 )
150 + rce->mv_bits * pow( X264_MAX(rce->qscale, 12) / X264_MAX(qscale, 12), 0.5 );
153 /* There is no analytical inverse to the above formula. */
155 static inline double bits2qscale(ratecontrol_entry_t *rce, double bits)
159 return (rce->i_tex_bits + rce->p_tex_bits + rce->mv_bits + .1) * rce->qscale / bits;
164 int x264_ratecontrol_new( x264_t *h )
166 x264_ratecontrol_t *rc;
170 /* Needed(?) for 2 pass */
171 x264_cpu_restore( h->param.cpu );
173 h->rc = rc = x264_malloc( sizeof( x264_ratecontrol_t ) );
174 memset(rc, 0, sizeof(*rc));
176 /* FIXME: use integers */
177 if(h->param.i_fps_num > 0 && h->param.i_fps_den > 0)
178 rc->fps = (float) h->param.i_fps_num / h->param.i_fps_den;
182 rc->gop_size = h->param.i_keyint_max;
183 rc->bitrate = h->param.rc.i_bitrate * 1000;
184 rc->nmb = h->mb.i_mb_count;
186 rc->qp_constant[SLICE_TYPE_P] = h->param.rc.i_qp_constant;
187 rc->qp_constant[SLICE_TYPE_I] = x264_clip3( (int)( qscale2qp( qp2qscale( h->param.rc.i_qp_constant ) / fabs( h->param.rc.f_ip_factor )) + 0.5 ), 0, 51 );
188 rc->qp_constant[SLICE_TYPE_B] = x264_clip3( (int)( qscale2qp( qp2qscale( h->param.rc.i_qp_constant ) * fabs( h->param.rc.f_pb_factor )) + 0.5 ), 0, 51 );
190 /* Currently there is no adaptive quant, and per-MB ratecontrol is used only in CBR. */
191 h->mb.b_variable_qp = h->param.rc.b_cbr && !h->param.rc.b_stat_read;
193 /* Init 1pass CBR algo */
194 if( h->param.rc.b_cbr ){
195 rc->buffer_size = h->param.rc.i_rc_buffer_size * 1000;
196 rc->buffer_fullness = h->param.rc.i_rc_init_buffer;
197 rc->rcbufrate = rc->bitrate / rc->fps;
199 if(rc->buffer_size < rc->rcbufrate){
200 x264_log(h, X264_LOG_WARNING, "rc buffer size %i too small\n",
205 if(rc->buffer_size <= 0)
206 rc->buffer_size = rc->bitrate / 2;
208 if(rc->buffer_fullness > rc->buffer_size || rc->buffer_fullness < 0){
209 x264_log(h, X264_LOG_WARNING, "invalid initial buffer fullness %i\n",
210 rc->buffer_fullness);
211 rc->buffer_fullness = 0;
214 bpp = rc->bitrate / (rc->fps * h->param.i_width * h->param.i_height);
223 rc->gop_qp = rc->init_qp;
225 rc->bits_last_gop = 0;
227 x264_log(h, X264_LOG_DEBUG, "%f fps, %i bps, bufsize %i\n",
228 rc->fps, rc->bitrate, rc->buffer_size);
232 rc->lstep = exp2f(h->param.rc.i_qp_step / 6.0);
233 rc->last_qscale = qp2qscale(26);
234 for( i = 0; i < 5; i++ )
236 rc->last_qscale_for[i] = qp2qscale(26);
237 rc->lmin[i] = qp2qscale( h->param.rc.i_qp_min );
238 rc->lmax[i] = qp2qscale( h->param.rc.i_qp_max );
240 #if 0 // FIXME: do we want to assign lmin/lmax based on ip_factor, or leave them all the same?
241 rc->lmin[SLICE_TYPE_I] /= fabs(h->param.f_ip_factor);
242 rc->lmax[SLICE_TYPE_I] /= fabs(h->param.f_ip_factor);
243 rc->lmin[SLICE_TYPE_B] *= fabs(h->param.f_pb_factor);
244 rc->lmax[SLICE_TYPE_B] *= fabs(h->param.f_pb_factor);
247 /* Load stat file and init 2pass algo */
248 if( h->param.rc.b_stat_read )
254 /* read 1st pass stats */
255 assert( h->param.rc.psz_stat_in );
256 stats_file = fopen( h->param.rc.psz_stat_in, "rb");
259 x264_log(h, X264_LOG_ERROR, "ratecontrol_init: can't open stats file\n");
262 // FIXME: error checking
263 fseek(stats_file, 0, SEEK_END);
264 stats_size = ftell(stats_file);
265 fseek(stats_file, 0, SEEK_SET);
266 stats_in = x264_malloc(stats_size+10);
267 fread(stats_in, 1, stats_size, stats_file);
270 /* find number of pics */
273 p = strchr(p+1, ';');
275 i += h->param.i_bframe;
276 rc->entry = (ratecontrol_entry_t*) x264_malloc(i*sizeof(ratecontrol_entry_t));
277 memset(rc->entry, 0, i*sizeof(ratecontrol_entry_t));
280 /* init all to skipped p frames */
281 for(i=0; i<rc->num_entries; i++){
282 ratecontrol_entry_t *rce = &rc->entry[i];
283 rce->pict_type = SLICE_TYPE_P;
284 rce->qscale = rce->new_qscale = qp2qscale(20);
285 rce->misc_bits = rc->nmb + 10;
291 for(i=0; i < rc->num_entries - h->param.i_bframe; i++){
292 ratecontrol_entry_t *rce;
299 next= strchr(p, ';');
301 (*next)=0; //sscanf is unbelievably slow on looong strings
304 e = sscanf(p, " in:%d ", &frame_number);
306 assert(frame_number >= 0);
307 assert(frame_number < rc->num_entries);
308 rce = &rc->entry[frame_number];
310 e += sscanf(p, " in:%*d out:%*d type:%c q:%f itex:%d ptex:%d mv:%d misc:%d imb:%d pmb:%d smb:%d",
311 &pict_type, &qp, &rce->i_tex_bits, &rce->p_tex_bits,
312 &rce->mv_bits, &rce->misc_bits, &rce->i_count, &rce->p_count, &rce->s_count);
315 case 'I': rce->kept_as_ref = 1;
316 case 'i': rce->pict_type = SLICE_TYPE_I; break;
317 case 'P': rce->pict_type = SLICE_TYPE_P; break;
318 case 'B': rce->kept_as_ref = 1;
319 case 'b': rce->pict_type = SLICE_TYPE_B; break;
320 default: e = -1; break;
323 x264_log(h, X264_LOG_ERROR, "statistics are damaged at line %d, parser out=%d\n", i, e);
326 rce->qscale = qp2qscale(qp);
332 /* If using 2pass with constant quant, no need to run the bitrate allocation */
333 if(h->param.rc.b_cbr)
335 if(init_pass2(h) < 0) return -1;
339 /* Open output file */
340 /* If input and output files are the same, output to a temp file
341 * and move it to the real name only when it's complete */
342 if( h->param.rc.b_stat_write )
344 rc->psz_stat_file_tmpname = x264_malloc( strlen(h->param.rc.psz_stat_out) + 6 );
345 strcpy( rc->psz_stat_file_tmpname, h->param.rc.psz_stat_out );
346 strcat( rc->psz_stat_file_tmpname, ".temp" );
348 rc->p_stat_file_out = fopen( rc->psz_stat_file_tmpname, "wb" );
349 if( rc->p_stat_file_out == NULL )
351 x264_log(h, X264_LOG_ERROR, "ratecontrol_init: can't open stats file\n");
359 void x264_ratecontrol_delete( x264_t *h )
361 x264_ratecontrol_t *rc = h->rc;
363 if( rc->p_stat_file_out )
365 fclose( rc->p_stat_file_out );
366 if( h->i_frame >= rc->num_entries - h->param.i_bframe )
367 if( rename( rc->psz_stat_file_tmpname, h->param.rc.psz_stat_out ) != 0 )
369 x264_log( h, X264_LOG_ERROR, "failed to rename \"%s\" to \"%s\"\n",
370 rc->psz_stat_file_tmpname, h->param.rc.psz_stat_out );
372 x264_free( rc->psz_stat_file_tmpname );
375 x264_free(rc->entry);
379 void x264_ratecontrol_start( x264_t *h, int i_slice_type, int i_force_qp )
381 x264_ratecontrol_t *rc = h->rc;
382 int gframes, iframes, pframes, bframes;
383 int minbits, maxbits;
389 rc->slice_type = i_slice_type;
391 x264_cpu_restore( h->param.cpu );
393 rc->qp_force = i_force_qp;
395 if( !h->param.rc.b_cbr )
400 else if( i_slice_type == SLICE_TYPE_B && h->fdec->b_kept_as_ref )
401 q = ( rc->qp_constant[ SLICE_TYPE_B ] + rc->qp_constant[ SLICE_TYPE_P ] ) / 2;
403 q = rc->qp_constant[ i_slice_type ];
404 rc->qpm = rc->qpa = rc->qp = q;
407 else if( h->param.rc.b_stat_read )
409 int frame = h->fenc->i_frame;
410 ratecontrol_entry_t *rce;
411 assert( frame >= 0 && frame < rc->num_entries );
412 rce = &h->rc->entry[frame];
414 rce->new_qscale = rate_estimate_qscale( h, i_slice_type );
415 rc->qpm = rc->qpa = rc->qp = rce->new_qp =
416 (int)(qscale2qp(rce->new_qscale) + 0.5);
420 switch(i_slice_type){
422 gbuf = rc->buffer_fullness + (rc->gop_size-1) * rc->rcbufrate;
423 rc->bits_gop = gbuf - rc->buffer_size / 2;
425 if(!rc->mb && rc->pframes){
426 int qp = rc->qp_avg_p / rc->pframes + 0.5;
427 #if 0 /* JM does this without explaining why */
428 int gdq = (float) rc->gop_size / 15 + 0.5;
432 if(qp > rc->qp_last_p - 2)
435 qp = x264_clip3(qp, rc->gop_qp - 4, rc->gop_qp + 4);
436 qp = x264_clip3(qp, h->param.rc.i_qp_min, h->param.rc.i_qp_max);
438 } else if(rc->frames > 4){
439 rc->gop_qp = rc->init_qp;
442 kp = h->param.rc.f_ip_factor * h->param.rc.f_pb_factor;
444 x264_log(h, X264_LOG_DEBUG,"gbuf=%i bits_gop=%i frames=%i gop_qp=%i\n",
445 gbuf, rc->bits_gop, rc->frames, rc->gop_qp);
447 rc->bits_last_gop = 0;
454 kp = h->param.rc.f_pb_factor;
462 x264_log(h, X264_LOG_WARNING, "ratecontrol: unknown slice type %i\n",
468 gframes = rc->gop_size - rc->frames;
469 iframes = gframes / rc->gop_size;
470 pframes = gframes / (h->param.i_bframe + 1) - iframes;
471 bframes = gframes - pframes - iframes;
473 gbits = rc->bits_gop - rc->bits_last_gop;
475 (h->param.rc.f_ip_factor * h->param.rc.f_pb_factor * iframes +
476 h->param.rc.f_pb_factor * pframes + bframes);
478 minbits = rc->buffer_fullness + rc->rcbufrate - rc->buffer_size;
481 maxbits = rc->buffer_fullness;
482 rc->fbits = x264_clip3(fbits, minbits, maxbits);
484 if(i_slice_type == SLICE_TYPE_I){
486 } else if(rc->ncoeffs && rc->ufbits){
489 nonzc = (rc->ncoeffs - rc->nzcoeffs);
492 else if(rc->fbits < INT_MAX / nonzc)
493 zn = rc->ncoeffs - rc->fbits * nonzc / rc->ufbits;
496 zn = x264_clip3(zn, 0, rc->ncoeffs);
497 dqp = h->param.rc.i_rc_sens * exp2f(rc->qpa / 6) *
498 (zn - rc->nzcoeffs) / rc->nzcoeffs;
499 dqp = x264_clip3(dqp, -h->param.rc.i_qp_step, h->param.rc.i_qp_step);
500 rc->qp = (int)(rc->qpa + dqp + .5);
503 if(rc->fbits > 0.9 * maxbits)
505 else if(rc->fbits > 0.8 * maxbits)
507 else if(rc->fbits < 1.1 * minbits)
509 else if(rc->fbits < 1.2 * minbits)
512 if( i_force_qp > 0 ) {
513 rc->qpm = rc->qpa = rc->qp = i_force_qp - 1;
516 x264_clip3(rc->qp, h->param.rc.i_qp_min, h->param.rc.i_qp_max);
519 x264_log(h, X264_LOG_DEBUG, "fbits=%i, qp=%i, z=%i, min=%i, max=%i\n",
520 rc->fbits, rc->qpm, zn, minbits, maxbits);
522 rc->fbits -= rc->overhead;
530 void x264_ratecontrol_mb( x264_t *h, int bits )
532 x264_ratecontrol_t *rc = h->rc;
539 x264_cpu_restore( h->param.cpu );
545 for(i = 0; i < 16 + 8; i++)
546 rc->nzcoeffs += 16 - h->mb.cache.non_zero_count[x264_scan8[i]];
547 rc->ncoeffs += 16 * (16 + 8);
549 if(rc->mb < rc->nmb / 16)
551 else if(rc->mb == rc->nmb)
553 else if(rc->qp_force > 0)
556 rcoeffs = (rc->nmb - rc->mb) * 16 * 24;
557 rbits = rc->fbits - rc->ufbits;
561 /* zn = (rc->nmb - rc->mb) * 16 * 24; */
562 nonz = (rc->ncoeffs - rc->nzcoeffs);
565 else if(rc->ufbits && rbits < INT_MAX / nonz)
566 zn = rcoeffs - rbits * nonz / rc->ufbits;
569 zn = x264_clip3(zn, 0, rcoeffs);
570 enz = rc->nzcoeffs * (rc->nmb - rc->mb) / rc->mb;
571 dqp = (float) 2*h->param.rc.i_rc_sens * exp2f((float) rc->qps / rc->mb / 6) *
573 rc->qpm = x264_clip3(rc->qpm + dqp, rc->qp - 3, rc->qp + 3);
576 rc->qpm = x264_clip3(rc->qpm, h->param.rc.i_qp_min, h->param.rc.i_qp_max);
579 int x264_ratecontrol_qp( x264_t *h )
584 int x264_ratecontrol_slice_type( x264_t *h, int frame_num )
586 if( h->param.rc.b_stat_read )
588 if( frame_num >= h->rc->num_entries )
590 x264_log(h, X264_LOG_ERROR, "More input frames than in the 1st pass\n");
593 switch( h->rc->entry[frame_num].pict_type )
596 return h->rc->entry[frame_num].kept_as_ref ? X264_TYPE_IDR : X264_TYPE_I;
599 return h->rc->entry[frame_num].kept_as_ref ? X264_TYPE_BREF : X264_TYPE_B;
608 return X264_TYPE_AUTO;
612 void x264_ratecontrol_end( x264_t *h, int bits )
614 x264_ratecontrol_t *rc = h->rc;
617 x264_cpu_restore( h->param.cpu );
619 h->stat.frame.i_mb_count_skip = h->stat.frame.i_mb_count[P_SKIP] + h->stat.frame.i_mb_count[B_SKIP];
620 h->stat.frame.i_mb_count_p = h->stat.frame.i_mb_count[P_L0] + h->stat.frame.i_mb_count[P_8x8];
621 for( i = B_DIRECT; i < B_8x8; i++ )
622 h->stat.frame.i_mb_count_p += h->stat.frame.i_mb_count[i];
624 if( h->param.rc.b_stat_write )
626 char c_type = rc->slice_type==SLICE_TYPE_I ? (h->fenc->i_poc==0 ? 'I' : 'i')
627 : rc->slice_type==SLICE_TYPE_P ? 'P'
628 : h->fenc->b_kept_as_ref ? 'B' : 'b';
629 fprintf( rc->p_stat_file_out,
630 "in:%d out:%d type:%c q:%.3f itex:%d ptex:%d mv:%d misc:%d imb:%d pmb:%d smb:%d;\n",
631 h->fenc->i_frame, h->i_frame-1,
633 h->stat.frame.i_itex_bits, h->stat.frame.i_ptex_bits,
634 h->stat.frame.i_hdr_bits, h->stat.frame.i_misc_bits,
635 h->stat.frame.i_mb_count[I_4x4] + h->stat.frame.i_mb_count[I_16x16],
636 h->stat.frame.i_mb_count_p,
637 h->stat.frame.i_mb_count_skip);
640 if( !h->param.rc.b_cbr || h->param.rc.b_stat_read )
643 rc->buffer_fullness += rc->rcbufrate - bits;
644 if(rc->buffer_fullness < 0){
645 x264_log(h, X264_LOG_WARNING, "buffer underflow %i\n",
646 rc->buffer_fullness);
647 rc->buffer_fullness = 0;
650 rc->qpa = (float)rc->qps / rc->mb;
651 if(rc->slice_type == SLICE_TYPE_P){
652 rc->qp_avg_p += rc->qpa;
653 rc->qp_last_p = rc->qpa;
655 } else if(rc->slice_type == SLICE_TYPE_I){
656 float err = (float) rc->ufbits / rc->fbits;
663 rc->overhead = bits - rc->ufbits;
665 x264_log(h, X264_LOG_DEBUG, "bits=%i, qp=%.1f, z=%i, zr=%6.3f, buf=%i\n",
666 bits, rc->qpa, rc->nzcoeffs, (float) rc->nzcoeffs / rc->ncoeffs,
667 rc->buffer_fullness);
669 rc->bits_last_gop += bits;
674 /****************************************************************************
676 ***************************************************************************/
677 double x264_eval( char *s, double *const_value, const char **const_name,
678 double (**func1)(void *, double), const char **func1_name,
679 double (**func2)(void *, double, double), char **func2_name,
683 * modifies the bitrate curve from pass1 for one frame
685 static double get_qscale(x264_t *h, ratecontrol_entry_t *rce, double rate_factor)
687 x264_ratecontrol_t *rcc= h->rc;
688 const int pict_type = rce->pict_type;
691 double const_values[]={
692 rce->i_tex_bits * rce->qscale,
693 rce->p_tex_bits * rce->qscale,
694 (rce->i_tex_bits + rce->p_tex_bits) * rce->qscale,
695 rce->mv_bits * rce->qscale,
696 (double)rce->i_count / rcc->nmb,
697 (double)rce->p_count / rcc->nmb,
698 (double)rce->s_count / rcc->nmb,
699 rce->pict_type == SLICE_TYPE_I,
700 rce->pict_type == SLICE_TYPE_P,
701 rce->pict_type == SLICE_TYPE_B,
702 h->param.rc.f_qcompress,
703 rcc->i_cplx_sum[SLICE_TYPE_I] / rcc->frame_count[SLICE_TYPE_I],
704 rcc->i_cplx_sum[SLICE_TYPE_P] / rcc->frame_count[SLICE_TYPE_P],
705 rcc->p_cplx_sum[SLICE_TYPE_P] / rcc->frame_count[SLICE_TYPE_P],
706 rcc->p_cplx_sum[SLICE_TYPE_B] / rcc->frame_count[SLICE_TYPE_B],
707 (rcc->i_cplx_sum[pict_type] + rcc->p_cplx_sum[pict_type]) / rcc->frame_count[pict_type],
708 rce->blurred_complexity,
711 static const char *const_names[]={
731 static double (*func1[])(void *, double)={
732 // (void *)bits2qscale,
736 static const char *func1_names[]={
742 q = x264_eval((char*)h->param.rc.psz_rc_eq, const_values, const_names, func1, func1_names, NULL, NULL, rce);
745 // avoid NaN's in the rc_eq
746 if(q != q || rce->i_tex_bits + rce->p_tex_bits + rce->mv_bits == 0)
747 q = rcc->last_qscale;
749 rcc->last_qscale = q;
754 static double get_diff_limited_q(x264_t *h, ratecontrol_entry_t *rce, double q)
756 x264_ratecontrol_t *rcc = h->rc;
757 const int pict_type = rce->pict_type;
759 // force I/B quants as a function of P quants
760 const double last_p_q = rcc->last_qscale_for[SLICE_TYPE_P];
761 const double last_non_b_q= rcc->last_qscale_for[rcc->last_non_b_pict_type];
762 if( pict_type == SLICE_TYPE_I )
765 double pq = qp2qscale( rcc->accum_p_qp / rcc->accum_p_norm );
766 double ip_factor = fabs( h->param.rc.f_ip_factor );
767 /* don't apply ip_factor if the following frame is also I */
768 if( rcc->accum_p_norm <= 0 )
770 else if( h->param.rc.f_ip_factor < 0 )
772 else if( rcc->accum_p_norm >= 1 )
775 q = rcc->accum_p_norm * pq / ip_factor + (1 - rcc->accum_p_norm) * iq;
777 else if( pict_type == SLICE_TYPE_B )
779 if( h->param.rc.f_pb_factor > 0 )
781 if( !rce->kept_as_ref )
782 q *= fabs( h->param.rc.f_pb_factor );
784 else if( pict_type == SLICE_TYPE_P
785 && rcc->last_non_b_pict_type == SLICE_TYPE_P
786 && rce->i_tex_bits + rce->p_tex_bits == 0 )
791 /* last qscale / qdiff stuff */
792 /* TODO take intro account whether the I-frame is a scene cut
793 * or just a seek point */
794 if(rcc->last_non_b_pict_type==pict_type
795 && (pict_type!=SLICE_TYPE_I || rcc->last_accum_p_norm < 1))
797 double last_q = rcc->last_qscale_for[pict_type];
798 double max_qscale = last_q * rcc->lstep;
799 double min_qscale = last_q / rcc->lstep;
801 if (q > max_qscale) q = max_qscale;
802 else if(q < min_qscale) q = min_qscale;
805 rcc->last_qscale_for[pict_type] = q;
806 if(pict_type!=SLICE_TYPE_B)
807 rcc->last_non_b_pict_type = pict_type;
808 if(pict_type==SLICE_TYPE_I)
810 rcc->last_accum_p_norm = rcc->accum_p_norm;
811 rcc->accum_p_norm = 0;
814 if(pict_type==SLICE_TYPE_P)
816 float mask = 1 - pow( (float)rce->i_count / rcc->nmb, 2 );
817 rcc->accum_p_qp = mask * (qscale2qp(q) + rcc->accum_p_qp);
818 rcc->accum_p_norm = mask * (1 + rcc->accum_p_norm);
823 // clip a qscale to between lmin and lmax
824 static double clip_qscale( x264_t *h, ratecontrol_entry_t *rce, double q )
826 double lmin = h->rc->lmin[rce->pict_type];
827 double lmax = h->rc->lmax[rce->pict_type];
832 double min2 = log(lmin);
833 double max2 = log(lmax);
834 q = (log(q) - min2)/(max2-min2) - 0.5;
835 q = 1.0/(1.0 + exp(-4*q));
836 q = q*(max2-min2) + min2;
841 // update qscale for 1 frame based on actual bits used so far
842 static float rate_estimate_qscale(x264_t *h, int pict_type)
845 float br_compensation;
847 int picture_number = h->fenc->i_frame;
848 x264_ratecontrol_t *rcc = h->rc;
849 ratecontrol_entry_t *rce;
850 double lmin = rcc->lmin[pict_type];
851 double lmax = rcc->lmax[pict_type];
852 int64_t total_bits = 8*(h->stat.i_slice_size[SLICE_TYPE_I]
853 + h->stat.i_slice_size[SLICE_TYPE_P]
854 + h->stat.i_slice_size[SLICE_TYPE_B]);
856 //printf("input_pic_num:%d pic_num:%d frame_rate:%d\n", s->input_picture_number, s->picture_number, s->frame_rate);
858 rce = &rcc->entry[picture_number];
860 assert(pict_type == rce->pict_type);
862 if(rce->pict_type == SLICE_TYPE_B)
864 if(h->fenc->b_kept_as_ref)
865 return rcc->last_qscale * sqrtf(h->param.rc.f_pb_factor);
867 return rcc->last_qscale * h->param.rc.f_pb_factor;
871 diff = (int64_t)total_bits - (int64_t)rce->expected_bits;
872 br_compensation = (rcc->buffer_size - diff) / rcc->buffer_size;
873 br_compensation = x264_clip3f(br_compensation, .5, 2);
875 q = rce->new_qscale / br_compensation;
876 q = x264_clip3f(q, lmin, lmax);
877 rcc->last_qscale = q;
882 static int init_pass2( x264_t *h )
884 x264_ratecontrol_t *rcc = h->rc;
885 uint64_t all_const_bits = 0;
886 uint64_t all_available_bits = (uint64_t)(h->param.rc.i_bitrate * 1000 * (double)rcc->num_entries / rcc->fps);
887 double rate_factor, step, step_mult;
888 double qblur = h->param.rc.f_qblur;
889 double cplxblur = h->param.rc.f_complexity_blur;
890 const int filter_size = (int)(qblur*4) | 1;
891 double expected_bits;
892 double *qscale, *blurred_qscale;
895 /* find total/average complexity & const_bits */
896 for(i=0; i<rcc->num_entries; i++){
897 ratecontrol_entry_t *rce = &rcc->entry[i];
898 all_const_bits += rce->misc_bits;
899 rcc->i_cplx_sum[rce->pict_type] += rce->i_tex_bits * rce->qscale;
900 rcc->p_cplx_sum[rce->pict_type] += rce->p_tex_bits * rce->qscale;
901 rcc->mv_bits_sum[rce->pict_type] += rce->mv_bits * rce->qscale;
902 rcc->frame_count[rce->pict_type] ++;
905 if( all_available_bits < all_const_bits)
907 x264_log(h, X264_LOG_ERROR, "requested bitrate is too low. estimated minimum is %d kbps\n",
908 (int)(all_const_bits * rcc->fps / (rcc->num_entries * 1000)));
912 for(i=0; i<rcc->num_entries; i++){
913 ratecontrol_entry_t *rce = &rcc->entry[i];
914 double weight_sum = 0;
918 /* weighted average of cplx of future frames */
919 for(j=1; j<cplxblur*2 && j<rcc->num_entries-i; j++){
920 ratecontrol_entry_t *rcj = &rcc->entry[i+j];
921 weight *= 1 - pow( (float)rcj->i_count / rcc->nmb, 2 );
924 weight_sum += weight;
925 cplx_sum += weight * qscale2bits(rcj, 1);
927 /* weighted average of cplx of past frames */
929 for(j=0; j<=cplxblur*2 && j<=i; j++){
930 ratecontrol_entry_t *rcj = &rcc->entry[i-j];
931 weight_sum += weight;
932 cplx_sum += weight * qscale2bits(rcj, 1);
933 weight *= 1 - pow( (float)rcj->i_count / rcc->nmb, 2 );
937 rce->blurred_complexity = cplx_sum / weight_sum;
940 qscale = x264_malloc(sizeof(double)*rcc->num_entries);
942 blurred_qscale = x264_malloc(sizeof(double)*rcc->num_entries);
944 blurred_qscale = qscale;
947 for(i=0; i<rcc->num_entries; i++)
948 expected_bits += qscale2bits(&rcc->entry[i], get_qscale(h, &rcc->entry[i], 1.0));
949 step_mult = all_available_bits / expected_bits;
952 for(step = 1E4 * step_mult; step > 1E-7 * step_mult; step *= 0.5){
956 rcc->last_non_b_pict_type = -1;
957 rcc->last_accum_p_norm = 1;
960 for(i=0; i<rcc->num_entries; i++){
961 qscale[i] = get_qscale(h, &rcc->entry[i], rate_factor);
964 /* fixed I/B QP relative to P mode */
965 for(i=rcc->num_entries-1; i>=0; i--){
966 qscale[i] = get_diff_limited_q(h, &rcc->entry[i], qscale[i]);
967 assert(qscale[i] >= 0);
972 assert(filter_size%2==1);
973 for(i=0; i<rcc->num_entries; i++){
974 ratecontrol_entry_t *rce = &rcc->entry[i];
976 double q=0.0, sum=0.0;
978 for(j=0; j<filter_size; j++){
979 int index = i+j-filter_size/2;
981 double coeff = qblur==0 ? 1.0 : exp(-d*d/(qblur*qblur));
982 if(index < 0 || index >= rcc->num_entries) continue;
983 if(rce->pict_type != rcc->entry[index].pict_type) continue;
984 q += qscale[index] * coeff;
987 blurred_qscale[i] = q/sum;
991 /* find expected bits */
992 for(i=0; i<rcc->num_entries; i++){
993 ratecontrol_entry_t *rce = &rcc->entry[i];
995 rce->new_qscale = clip_qscale(h, rce, blurred_qscale[i]);
996 assert(rce->new_qscale >= 0);
997 bits = qscale2bits(rce, rce->new_qscale) + rce->misc_bits;
999 rce->expected_bits = expected_bits;
1000 expected_bits += bits;
1003 //printf("expected:%llu available:%llu factor:%lf avgQ:%lf\n", (uint64_t)expected_bits, all_available_bits, rate_factor);
1004 if(expected_bits > all_available_bits) rate_factor -= step;
1009 x264_free(blurred_qscale);
1011 if(fabs(expected_bits/all_available_bits - 1.0) > 0.01)
1014 for(i=0; i<rcc->num_entries; i++)
1015 avgq += rcc->entry[i].new_qscale;
1016 avgq = qscale2qp(avgq / rcc->num_entries);
1018 x264_log(h, X264_LOG_ERROR, "Error: 2pass curve failed to converge\n");
1019 x264_log(h, X264_LOG_ERROR, "target: %.2f kbit/s, got: %.2f kbit/s, avg QP: %.4f\n",
1020 (float)h->param.rc.i_bitrate,
1021 expected_bits * rcc->fps / (rcc->num_entries * 1000.),
1023 if(expected_bits < all_available_bits && avgq < h->param.rc.i_qp_min + 2)
1024 x264_log(h, X264_LOG_ERROR, "try reducing target bitrate or reducing qp_min (currently %d)\n", h->param.rc.i_qp_min);
1025 else if(expected_bits > all_available_bits && avgq > h->param.rc.i_qp_max - 2)
1027 if(h->param.rc.i_qp_max < 51)
1028 x264_log(h, X264_LOG_ERROR, "try increasing target bitrate or increasing qp_max (currently %d)\n", h->param.rc.i_qp_max);
1030 x264_log(h, X264_LOG_ERROR, "try increasing target bitrate\n");
1033 x264_log(h, X264_LOG_ERROR, "internal error\n");