]> git.sesse.net Git - x264/blob - encoder/ratecontrol.c
Fix compilation on ARM
[x264] / encoder / ratecontrol.c
1 /***************************************************-*- coding: iso-8859-1 -*-
2  * ratecontrol.c: h264 encoder library (Rate Control)
3  *****************************************************************************
4  * Copyright (C) 2005-2008 x264 project
5  *
6  * Authors: Loren Merritt <lorenm@u.washington.edu>
7  *          Michael Niedermayer <michaelni@gmx.at>
8  *          Gabriel Bouvigne <gabriel.bouvigne@joost.com>
9  *          Fiona Glaser <fiona@x264.com>
10  *          Måns Rullgård <mru@mru.ath.cx>
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License as published by
14  * the Free Software Foundation; either version 2 of the License, or
15  * (at your option) any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software
24  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
25  *****************************************************************************/
26
27 #define _ISOC99_SOURCE
28 #undef NDEBUG // always check asserts, the speed effect is far too small to disable them
29 #include <math.h>
30
31 #include "common/common.h"
32 #include "common/cpu.h"
33 #include "ratecontrol.h"
34 #include "me.h"
35
36 typedef struct
37 {
38     int pict_type;
39     int frame_type;
40     int kept_as_ref;
41     double qscale;
42     int mv_bits;
43     int tex_bits;
44     int misc_bits;
45     uint64_t expected_bits; /*total expected bits up to the current frame (current one excluded)*/
46     double expected_vbv;
47     double new_qscale;
48     int new_qp;
49     int i_count;
50     int p_count;
51     int s_count;
52     float blurred_complexity;
53     char direct_mode;
54     int16_t weight[2];
55     int16_t i_weight_denom;
56     int refcount[16];
57     int refs;
58 } ratecontrol_entry_t;
59
60 typedef struct
61 {
62     double coeff;
63     double count;
64     double decay;
65     double offset;
66 } predictor_t;
67
68 struct x264_ratecontrol_t
69 {
70     /* constants */
71     int b_abr;
72     int b_2pass;
73     int b_vbv;
74     int b_vbv_min_rate;
75     double fps;
76     double bitrate;
77     double rate_tolerance;
78     double qcompress;
79     int nmb;                    /* number of macroblocks in a frame */
80     int qp_constant[5];
81
82     /* current frame */
83     ratecontrol_entry_t *rce;
84     int qp;                     /* qp for current frame */
85     int qpm;                    /* qp for current macroblock */
86     float f_qpm;                /* qp for current macroblock: precise float for AQ */
87     float qpa_rc;               /* average of macroblocks' qp before aq */
88     float qpa_aq;               /* average of macroblocks' qp after aq */
89     float qp_novbv;             /* QP for the current frame if 1-pass VBV was disabled. */
90     int qp_force;
91
92     /* VBV stuff */
93     double buffer_size;
94     double buffer_fill_final;   /* real buffer as of the last finished frame */
95     double buffer_fill;         /* planned buffer, if all in-progress frames hit their bit budget */
96     double buffer_rate;         /* # of bits added to buffer_fill after each frame */
97     predictor_t *pred;          /* predict frame size from satd */
98     int single_frame_vbv;
99
100     /* ABR stuff */
101     int    last_satd;
102     double last_rceq;
103     double cplxr_sum;           /* sum of bits*qscale/rceq */
104     double expected_bits_sum;   /* sum of qscale2bits after rceq, ratefactor, and overflow, only includes finished frames */
105     double wanted_bits_window;  /* target bitrate * window */
106     double cbr_decay;
107     double short_term_cplxsum;
108     double short_term_cplxcount;
109     double rate_factor_constant;
110     double ip_offset;
111     double pb_offset;
112
113     /* 2pass stuff */
114     FILE *p_stat_file_out;
115     char *psz_stat_file_tmpname;
116     FILE *p_mbtree_stat_file_out;
117     char *psz_mbtree_stat_file_tmpname;
118     char *psz_mbtree_stat_file_name;
119     FILE *p_mbtree_stat_file_in;
120
121     int num_entries;            /* number of ratecontrol_entry_ts */
122     ratecontrol_entry_t *entry; /* FIXME: copy needed data and free this once init is done */
123     double last_qscale;
124     double last_qscale_for[5];  /* last qscale for a specific pict type, used for max_diff & ipb factor stuff  */
125     int last_non_b_pict_type;
126     double accum_p_qp;          /* for determining I-frame quant */
127     double accum_p_norm;
128     double last_accum_p_norm;
129     double lmin[5];             /* min qscale by frame type */
130     double lmax[5];
131     double lstep;               /* max change (multiply) in qscale per frame */
132     uint16_t *qp_buffer[2];     /* Global buffers for converting MB-tree quantizer data. */
133     int qpbuf_pos;              /* In order to handle pyramid reordering, QP buffer acts as a stack.
134                                  * This value is the current position (0 or 1). */
135
136     /* MBRC stuff */
137     float frame_size_estimated; /* Access to this variable must be atomic: double is
138                                  * not atomic on all arches we care about */
139     double frame_size_planned;
140     double slice_size_planned;
141     double max_frame_error;
142     predictor_t (*row_pred)[2];
143     predictor_t row_preds[5][2];
144     predictor_t *pred_b_from_p; /* predict B-frame size from P-frame satd */
145     int bframes;                /* # consecutive B-frames before this P-frame */
146     int bframe_bits;            /* total cost of those frames */
147
148     int i_zones;
149     x264_zone_t *zones;
150     x264_zone_t *prev_zone;
151 };
152
153
154 static int parse_zones( x264_t *h );
155 static int init_pass2(x264_t *);
156 static float rate_estimate_qscale( x264_t *h );
157 static void update_vbv( x264_t *h, int bits );
158 static void update_vbv_plan( x264_t *h, int overhead );
159 static double predict_size( predictor_t *p, double q, double var );
160 static void update_predictor( predictor_t *p, double q, double var, double bits );
161
162 #define CMP_OPT_FIRST_PASS( opt, param_val )\
163 {\
164     if( ( p = strstr( opts, opt "=" ) ) && sscanf( p, opt "=%d" , &i ) && param_val != i )\
165     {\
166         x264_log( h, X264_LOG_ERROR, "different " opt " setting than first pass (%d vs %d)\n", param_val, i );\
167         return -1;\
168     }\
169 }
170
171 /* Terminology:
172  * qp = h.264's quantizer
173  * qscale = linearized quantizer = Lagrange multiplier
174  */
175 static inline double qp2qscale(double qp)
176 {
177     return 0.85 * pow(2.0, ( qp - 12.0 ) / 6.0);
178 }
179 static inline double qscale2qp(double qscale)
180 {
181     return 12.0 + 6.0 * log(qscale/0.85) / log(2.0);
182 }
183
184 /* Texture bitrate is not quite inversely proportional to qscale,
185  * probably due the the changing number of SKIP blocks.
186  * MV bits level off at about qp<=12, because the lambda used
187  * for motion estimation is constant there. */
188 static inline double qscale2bits(ratecontrol_entry_t *rce, double qscale)
189 {
190     if(qscale<0.1)
191         qscale = 0.1;
192     return (rce->tex_bits + .1) * pow( rce->qscale / qscale, 1.1 )
193            + rce->mv_bits * pow( X264_MAX(rce->qscale, 1) / X264_MAX(qscale, 1), 0.5 )
194            + rce->misc_bits;
195 }
196
197 static ALWAYS_INLINE uint32_t ac_energy_plane( x264_t *h, int mb_x, int mb_y, x264_frame_t *frame, int i )
198 {
199     int w = i ? 8 : 16;
200     int shift = i ? 6 : 8;
201     int stride = frame->i_stride[i];
202     int offset = h->mb.b_interlaced
203         ? w * (mb_x + (mb_y&~1) * stride) + (mb_y&1) * stride
204         : w * (mb_x + mb_y * stride);
205     int pix = i ? PIXEL_8x8 : PIXEL_16x16;
206     stride <<= h->mb.b_interlaced;
207     uint64_t res = h->pixf.var[pix]( frame->plane[i] + offset, stride );
208     uint32_t sum = (uint32_t)res;
209     uint32_t sqr = res >> 32;
210     return sqr - (sum * sum >> shift);
211 }
212
213 // Find the total AC energy of the block in all planes.
214 static NOINLINE uint32_t ac_energy_mb( x264_t *h, int mb_x, int mb_y, x264_frame_t *frame )
215 {
216     /* This function contains annoying hacks because GCC has a habit of reordering emms
217      * and putting it after floating point ops.  As a result, we put the emms at the end of the
218      * function and make sure that its always called before the float math.  Noinline makes
219      * sure no reordering goes on. */
220     uint32_t var = ac_energy_plane( h, mb_x, mb_y, frame, 0 );
221     var         += ac_energy_plane( h, mb_x, mb_y, frame, 1 );
222     var         += ac_energy_plane( h, mb_x, mb_y, frame, 2 );
223     x264_emms();
224     return var;
225 }
226
227 void x264_adaptive_quant_frame( x264_t *h, x264_frame_t *frame )
228 {
229     /* constants chosen to result in approximately the same overall bitrate as without AQ.
230      * FIXME: while they're written in 5 significant digits, they're only tuned to 2. */
231     int mb_x, mb_y;
232     float strength;
233     float avg_adj = 0.f;
234     /* Need to init it anyways for MB tree. */
235     if( h->param.rc.f_aq_strength == 0 )
236     {
237         int mb_xy;
238         memset( frame->f_qp_offset, 0, h->mb.i_mb_count * sizeof(float) );
239         memset( frame->f_qp_offset_aq, 0, h->mb.i_mb_count * sizeof(float) );
240         if( h->frames.b_have_lowres )
241             for( mb_xy = 0; mb_xy < h->mb.i_mb_count; mb_xy++ )
242                 frame->i_inv_qscale_factor[mb_xy] = 256;
243         return;
244     }
245
246     if( h->param.rc.i_aq_mode == X264_AQ_AUTOVARIANCE )
247     {
248         for( mb_y = 0; mb_y < h->sps->i_mb_height; mb_y++ )
249             for( mb_x = 0; mb_x < h->sps->i_mb_width; mb_x++ )
250             {
251                 uint32_t energy = ac_energy_mb( h, mb_x, mb_y, frame );
252                 float qp_adj = x264_log2( energy + 2 );
253                 qp_adj *= qp_adj;
254                 frame->f_qp_offset[mb_x + mb_y*h->mb.i_mb_stride] = qp_adj;
255                 avg_adj += qp_adj;
256             }
257         avg_adj /= h->mb.i_mb_count;
258         strength = h->param.rc.f_aq_strength * avg_adj * (1.f / 6000.f);
259     }
260     else
261         strength = h->param.rc.f_aq_strength * 1.0397f;
262
263     for( mb_y = 0; mb_y < h->sps->i_mb_height; mb_y++ )
264         for( mb_x = 0; mb_x < h->sps->i_mb_width; mb_x++ )
265         {
266             float qp_adj;
267             if( h->param.rc.i_aq_mode == X264_AQ_AUTOVARIANCE )
268             {
269                 qp_adj = frame->f_qp_offset[mb_x + mb_y*h->mb.i_mb_stride];
270                 qp_adj = strength * (qp_adj - avg_adj);
271             }
272             else
273             {
274                 uint32_t energy = ac_energy_mb( h, mb_x, mb_y, frame );
275                 qp_adj = strength * (x264_log2( X264_MAX(energy, 1) ) - 14.427f);
276             }
277             frame->f_qp_offset[mb_x + mb_y*h->mb.i_mb_stride] =
278             frame->f_qp_offset_aq[mb_x + mb_y*h->mb.i_mb_stride] = qp_adj;
279             if( h->frames.b_have_lowres )
280                 frame->i_inv_qscale_factor[mb_x + mb_y*h->mb.i_mb_stride] = x264_exp2fix8(qp_adj);
281         }
282 }
283
284
285 /*****************************************************************************
286 * x264_adaptive_quant:
287  * adjust macroblock QP based on variance (AC energy) of the MB.
288  * high variance  = higher QP
289  * low variance = lower QP
290  * This generally increases SSIM and lowers PSNR.
291 *****************************************************************************/
292 void x264_adaptive_quant( x264_t *h )
293 {
294     x264_emms();
295     /* MB-tree currently doesn't adjust quantizers in unreferenced frames. */
296     float qp_offset = h->fdec->b_kept_as_ref ? h->fenc->f_qp_offset[h->mb.i_mb_xy] : h->fenc->f_qp_offset_aq[h->mb.i_mb_xy];
297     h->mb.i_qp = x264_clip3( h->rc->f_qpm + qp_offset + .5, h->param.rc.i_qp_min, h->param.rc.i_qp_max );
298 }
299
300 int x264_macroblock_tree_read( x264_t *h, x264_frame_t *frame )
301 {
302     x264_ratecontrol_t *rc = h->rc;
303     uint8_t i_type_actual = rc->entry[frame->i_frame].pict_type;
304     int i;
305
306     if( rc->entry[frame->i_frame].kept_as_ref )
307     {
308         uint8_t i_type;
309         if( rc->qpbuf_pos < 0 )
310         {
311             do
312             {
313                 rc->qpbuf_pos++;
314
315                 if( !fread( &i_type, 1, 1, rc->p_mbtree_stat_file_in ) )
316                     goto fail;
317                 if( fread( rc->qp_buffer[rc->qpbuf_pos], sizeof(uint16_t), h->mb.i_mb_count, rc->p_mbtree_stat_file_in ) != h->mb.i_mb_count )
318                     goto fail;
319
320                 if( i_type != i_type_actual && rc->qpbuf_pos == 1 )
321                 {
322                     x264_log(h, X264_LOG_ERROR, "MB-tree frametype %d doesn't match actual frametype %d.\n", i_type, i_type_actual);
323                     return -1;
324                 }
325             } while( i_type != i_type_actual );
326         }
327
328         for( i = 0; i < h->mb.i_mb_count; i++ )
329         {
330             frame->f_qp_offset[i] = ((float)(int16_t)endian_fix16( rc->qp_buffer[rc->qpbuf_pos][i] )) * (1/256.0);
331             if( h->frames.b_have_lowres )
332                 frame->i_inv_qscale_factor[i] = x264_exp2fix8(frame->f_qp_offset[i]);
333         }
334         rc->qpbuf_pos--;
335     }
336     else
337         x264_adaptive_quant_frame( h, frame );
338     return 0;
339 fail:
340     x264_log(h, X264_LOG_ERROR, "Incomplete MB-tree stats file.\n");
341     return -1;
342 }
343
344 int x264_reference_build_list_optimal( x264_t *h )
345 {
346     ratecontrol_entry_t *rce = h->rc->rce;
347     x264_frame_t *frames[16];
348     x264_weight_t weights[16][3];
349     int refcount[16];
350     int ref, i;
351
352     if( rce->refs != h->i_ref0 )
353         return -1;
354
355     memcpy( frames, h->fref0, sizeof(frames) );
356     memcpy( refcount, rce->refcount, sizeof(refcount) );
357     memcpy( weights, h->fenc->weight, sizeof(weights) );
358     memset( &h->fenc->weight[1][0], 0, sizeof(x264_weight_t[15][3]) );
359
360     /* For now don't reorder ref 0; it seems to lower quality
361        in most cases due to skips. */
362     for( ref = 1; ref < h->i_ref0; ref++ )
363     {
364         int max = -1;
365         int bestref = 1;
366
367         for( i = 1; i < h->i_ref0; i++ )
368             if( !frames[i]->b_duplicate || frames[i]->i_frame != h->fref0[ref-1]->i_frame )
369                 /* Favor lower POC as a tiebreaker. */
370                 COPY2_IF_GT( max, refcount[i], bestref, i );
371
372         /* FIXME: If there are duplicates from frames other than ref0 then it is possible
373          * that the optimal ordering doesnt place every duplicate. */
374
375         refcount[bestref] = -1;
376         h->fref0[ref] = frames[bestref];
377         memcpy( h->fenc->weight[ref], weights[bestref], sizeof(weights[bestref]) );
378     }
379
380     return 0;
381 }
382
383 static char *x264_strcat_filename( char *input, char *suffix )
384 {
385     char *output = x264_malloc( strlen( input ) + strlen( suffix ) + 1 );
386     if( !output )
387         return NULL;
388     strcpy( output, input );
389     strcat( output, suffix );
390     return output;
391 }
392
393 void x264_ratecontrol_init_reconfigurable( x264_t *h, int b_init )
394 {
395     x264_ratecontrol_t *rc = h->rc;
396     if( !b_init && rc->b_2pass )
397         return;
398
399     if( h->param.rc.i_vbv_max_bitrate > 0 && h->param.rc.i_vbv_buffer_size > 0 )
400     {
401         if( h->param.rc.i_vbv_buffer_size < (int)(h->param.rc.i_vbv_max_bitrate / rc->fps) )
402         {
403             h->param.rc.i_vbv_buffer_size = h->param.rc.i_vbv_max_bitrate / rc->fps;
404             x264_log( h, X264_LOG_WARNING, "VBV buffer size cannot be smaller than one frame, using %d kbit\n",
405                       h->param.rc.i_vbv_buffer_size );
406         }
407
408         /* We don't support changing the ABR bitrate right now,
409            so if the stream starts as CBR, keep it CBR. */
410         if( rc->b_vbv_min_rate )
411             h->param.rc.i_vbv_max_bitrate = h->param.rc.i_bitrate;
412         rc->buffer_rate = h->param.rc.i_vbv_max_bitrate * 1000. / rc->fps;
413         rc->buffer_size = h->param.rc.i_vbv_buffer_size * 1000.;
414         rc->single_frame_vbv = rc->buffer_rate * 1.1 > rc->buffer_size;
415         rc->cbr_decay = 1.0 - rc->buffer_rate / rc->buffer_size
416                       * 0.5 * X264_MAX(0, 1.5 - rc->buffer_rate * rc->fps / rc->bitrate);
417         if( b_init )
418         {
419             if( h->param.rc.f_vbv_buffer_init > 1. )
420                 h->param.rc.f_vbv_buffer_init = x264_clip3f( h->param.rc.f_vbv_buffer_init / h->param.rc.i_vbv_buffer_size, 0, 1 );
421             h->param.rc.f_vbv_buffer_init = X264_MAX( h->param.rc.f_vbv_buffer_init, rc->buffer_rate / rc->buffer_size );
422             rc->buffer_fill_final = rc->buffer_size * h->param.rc.f_vbv_buffer_init;
423             rc->b_vbv = 1;
424             rc->b_vbv_min_rate = !rc->b_2pass
425                           && h->param.rc.i_rc_method == X264_RC_ABR
426                           && h->param.rc.i_vbv_max_bitrate <= h->param.rc.i_bitrate;
427         }
428     }
429     if( h->param.rc.i_rc_method == X264_RC_CRF )
430     {
431         /* Arbitrary rescaling to make CRF somewhat similar to QP.
432          * Try to compensate for MB-tree's effects as well. */
433         double base_cplx = h->mb.i_mb_count * (h->param.i_bframe ? 120 : 80);
434         double mbtree_offset = h->param.rc.b_mb_tree ? (1.0-h->param.rc.f_qcompress)*13.5 : 0;
435         rc->rate_factor_constant = pow( base_cplx, 1 - rc->qcompress )
436                                  / qp2qscale( h->param.rc.f_rf_constant + mbtree_offset );
437     }
438 }
439
440 int x264_ratecontrol_new( x264_t *h )
441 {
442     x264_ratecontrol_t *rc;
443     int i, j;
444
445     x264_emms();
446
447     CHECKED_MALLOCZERO( h->rc, h->param.i_threads * sizeof(x264_ratecontrol_t) );
448     rc = h->rc;
449
450     rc->b_abr = h->param.rc.i_rc_method != X264_RC_CQP && !h->param.rc.b_stat_read;
451     rc->b_2pass = h->param.rc.i_rc_method == X264_RC_ABR && h->param.rc.b_stat_read;
452
453     /* FIXME: use integers */
454     if(h->param.i_fps_num > 0 && h->param.i_fps_den > 0)
455         rc->fps = (float) h->param.i_fps_num / h->param.i_fps_den;
456     else
457         rc->fps = 25.0;
458
459     if( h->param.rc.b_mb_tree )
460     {
461         h->param.rc.f_pb_factor = 1;
462         rc->qcompress = 1;
463     }
464     else
465         rc->qcompress = h->param.rc.f_qcompress;
466
467     rc->bitrate = h->param.rc.i_bitrate * 1000.;
468     rc->rate_tolerance = h->param.rc.f_rate_tolerance;
469     rc->nmb = h->mb.i_mb_count;
470     rc->last_non_b_pict_type = -1;
471     rc->cbr_decay = 1.0;
472
473     if( h->param.rc.i_rc_method == X264_RC_CRF && h->param.rc.b_stat_read )
474     {
475         x264_log(h, X264_LOG_ERROR, "constant rate-factor is incompatible with 2pass.\n");
476         return -1;
477     }
478
479     x264_ratecontrol_init_reconfigurable( h, 1 );
480
481     if( rc->rate_tolerance < 0.01 )
482     {
483         x264_log(h, X264_LOG_WARNING, "bitrate tolerance too small, using .01\n");
484         rc->rate_tolerance = 0.01;
485     }
486
487     h->mb.b_variable_qp = rc->b_vbv || h->param.rc.i_aq_mode;
488
489     if( rc->b_abr )
490     {
491         /* FIXME ABR_INIT_QP is actually used only in CRF */
492 #define ABR_INIT_QP ( h->param.rc.i_rc_method == X264_RC_CRF ? h->param.rc.f_rf_constant : 24 )
493         rc->accum_p_norm = .01;
494         rc->accum_p_qp = ABR_INIT_QP * rc->accum_p_norm;
495         /* estimated ratio that produces a reasonable QP for the first I-frame */
496         rc->cplxr_sum = .01 * pow( 7.0e5, rc->qcompress ) * pow( h->mb.i_mb_count, 0.5 );
497         rc->wanted_bits_window = 1.0 * rc->bitrate / rc->fps;
498         rc->last_non_b_pict_type = SLICE_TYPE_I;
499     }
500
501     rc->ip_offset = 6.0 * log(h->param.rc.f_ip_factor) / log(2.0);
502     rc->pb_offset = 6.0 * log(h->param.rc.f_pb_factor) / log(2.0);
503     rc->qp_constant[SLICE_TYPE_P] = h->param.rc.i_qp_constant;
504     rc->qp_constant[SLICE_TYPE_I] = x264_clip3( h->param.rc.i_qp_constant - rc->ip_offset + 0.5, 0, 51 );
505     rc->qp_constant[SLICE_TYPE_B] = x264_clip3( h->param.rc.i_qp_constant + rc->pb_offset + 0.5, 0, 51 );
506     h->mb.ip_offset = rc->ip_offset + 0.5;
507
508     rc->lstep = pow( 2, h->param.rc.i_qp_step / 6.0 );
509     rc->last_qscale = qp2qscale(26);
510     int num_preds = h->param.b_sliced_threads * h->param.i_threads + 1;
511     CHECKED_MALLOC( rc->pred, 5 * sizeof(predictor_t) * num_preds );
512     CHECKED_MALLOC( rc->pred_b_from_p, sizeof(predictor_t) );
513     for( i = 0; i < 5; i++ )
514     {
515         rc->last_qscale_for[i] = qp2qscale( ABR_INIT_QP );
516         rc->lmin[i] = qp2qscale( h->param.rc.i_qp_min );
517         rc->lmax[i] = qp2qscale( h->param.rc.i_qp_max );
518         for( j = 0; j < num_preds; j++ )
519         {
520             rc->pred[i+j*5].coeff= 2.0;
521             rc->pred[i+j*5].count= 1.0;
522             rc->pred[i+j*5].decay= 0.5;
523             rc->pred[i+j*5].offset= 0.0;
524         }
525         for( j = 0; j < 2; j++ )
526         {
527             rc->row_preds[i][j].coeff= .25;
528             rc->row_preds[i][j].count= 1.0;
529             rc->row_preds[i][j].decay= 0.5;
530             rc->row_preds[i][j].offset= 0.0;
531         }
532     }
533     *rc->pred_b_from_p = rc->pred[0];
534
535     if( parse_zones( h ) < 0 )
536     {
537         x264_log( h, X264_LOG_ERROR, "failed to parse zones\n" );
538         return -1;
539     }
540
541     /* Load stat file and init 2pass algo */
542     if( h->param.rc.b_stat_read )
543     {
544         char *p, *stats_in, *stats_buf;
545
546         /* read 1st pass stats */
547         assert( h->param.rc.psz_stat_in );
548         stats_buf = stats_in = x264_slurp_file( h->param.rc.psz_stat_in );
549         if( !stats_buf )
550         {
551             x264_log(h, X264_LOG_ERROR, "ratecontrol_init: can't open stats file\n");
552             return -1;
553         }
554         if( h->param.rc.b_mb_tree )
555         {
556             char *mbtree_stats_in = x264_strcat_filename( h->param.rc.psz_stat_in, ".mbtree" );
557             if( !mbtree_stats_in )
558                 return -1;
559             rc->p_mbtree_stat_file_in = fopen( mbtree_stats_in, "rb" );
560             x264_free( mbtree_stats_in );
561             if( !rc->p_mbtree_stat_file_in )
562             {
563                 x264_log(h, X264_LOG_ERROR, "ratecontrol_init: can't open mbtree stats file\n");
564                 return -1;
565             }
566         }
567
568         /* check whether 1st pass options were compatible with current options */
569         if( !strncmp( stats_buf, "#options:", 9 ) )
570         {
571             int i, j;
572             char *opts = stats_buf;
573             stats_in = strchr( stats_buf, '\n' );
574             if( !stats_in )
575                 return -1;
576             *stats_in = '\0';
577             stats_in++;
578             if( sscanf( opts, "#options: %dx%d", &i, &j ) != 2 )
579             {
580                 x264_log( h, X264_LOG_ERROR, "resolution specified in stats file not valid\n" );
581                 return -1;
582             }
583             else if( h->param.rc.b_mb_tree && (i != h->param.i_width || j != h->param.i_height)  )
584             {
585                 x264_log( h, X264_LOG_ERROR, "MB-tree doesn't support different resolution than 1st pass (%dx%d vs %dx%d)\n",
586                           h->param.i_width, h->param.i_height, i, j );
587                 return -1;
588             }
589
590             CMP_OPT_FIRST_PASS( "wpredp", X264_MAX( 0, h->param.analyse.i_weighted_pred ) );
591             CMP_OPT_FIRST_PASS( "bframes", h->param.i_bframe );
592             CMP_OPT_FIRST_PASS( "b_pyramid", h->param.i_bframe_pyramid );
593             CMP_OPT_FIRST_PASS( "intra_refresh", h->param.b_intra_refresh );
594             CMP_OPT_FIRST_PASS( "keyint", h->param.i_keyint_max );
595
596             if( strstr( opts, "qp=0" ) && h->param.rc.i_rc_method == X264_RC_ABR )
597                 x264_log( h, X264_LOG_WARNING, "1st pass was lossless, bitrate prediction will be inaccurate\n" );
598
599             if( !strstr( opts, "direct=3" ) && h->param.analyse.i_direct_mv_pred == X264_DIRECT_PRED_AUTO )
600             {
601                 x264_log( h, X264_LOG_WARNING, "direct=auto not used on the first pass\n" );
602                 h->mb.b_direct_auto_write = 1;
603             }
604
605             if( ( p = strstr( opts, "b_adapt=" ) ) && sscanf( p, "b_adapt=%d", &i ) && i >= X264_B_ADAPT_NONE && i <= X264_B_ADAPT_TRELLIS )
606                 h->param.i_bframe_adaptive = i;
607             else if( h->param.i_bframe )
608             {
609                 x264_log( h, X264_LOG_ERROR, "b_adapt method specified in stats file not valid\n" );
610                 return -1;
611             }
612
613             if( h->param.rc.b_mb_tree && ( p = strstr( opts, "rc_lookahead=" ) ) && sscanf( p, "rc_lookahead=%d", &i ) )
614                 h->param.rc.i_lookahead = i;
615         }
616
617         /* find number of pics */
618         p = stats_in;
619         for(i=-1; p; i++)
620             p = strchr(p+1, ';');
621         if(i==0)
622         {
623             x264_log(h, X264_LOG_ERROR, "empty stats file\n");
624             return -1;
625         }
626         rc->num_entries = i;
627
628         if( h->param.i_frame_total < rc->num_entries && h->param.i_frame_total > 0 )
629         {
630             x264_log( h, X264_LOG_WARNING, "2nd pass has fewer frames than 1st pass (%d vs %d)\n",
631                       h->param.i_frame_total, rc->num_entries );
632         }
633         if( h->param.i_frame_total > rc->num_entries )
634         {
635             x264_log( h, X264_LOG_ERROR, "2nd pass has more frames than 1st pass (%d vs %d)\n",
636                       h->param.i_frame_total, rc->num_entries );
637             return -1;
638         }
639
640         CHECKED_MALLOCZERO( rc->entry, rc->num_entries * sizeof(ratecontrol_entry_t) );
641
642         /* init all to skipped p frames */
643         for(i=0; i<rc->num_entries; i++)
644         {
645             ratecontrol_entry_t *rce = &rc->entry[i];
646             rce->pict_type = SLICE_TYPE_P;
647             rce->qscale = rce->new_qscale = qp2qscale(20);
648             rce->misc_bits = rc->nmb + 10;
649             rce->new_qp = 0;
650         }
651
652         /* read stats */
653         p = stats_in;
654         for(i=0; i < rc->num_entries; i++)
655         {
656             ratecontrol_entry_t *rce;
657             int frame_number;
658             char pict_type;
659             int e;
660             char *next;
661             float qp;
662             int ref;
663
664             next= strchr(p, ';');
665             if(next)
666             {
667                 (*next)=0; //sscanf is unbelievably slow on long strings
668                 next++;
669             }
670             e = sscanf(p, " in:%d ", &frame_number);
671
672             if(frame_number < 0 || frame_number >= rc->num_entries)
673             {
674                 x264_log(h, X264_LOG_ERROR, "bad frame number (%d) at stats line %d\n", frame_number, i);
675                 return -1;
676             }
677             rce = &rc->entry[frame_number];
678             rce->direct_mode = 0;
679
680             e += sscanf(p, " in:%*d out:%*d type:%c q:%f tex:%d mv:%d misc:%d imb:%d pmb:%d smb:%d d:%c",
681                    &pict_type, &qp, &rce->tex_bits,
682                    &rce->mv_bits, &rce->misc_bits, &rce->i_count, &rce->p_count,
683                    &rce->s_count, &rce->direct_mode);
684
685             p = strstr( p, "ref:" );
686             if( !p )
687                 goto parse_error;
688             p += 4;
689             for( ref = 0; ref < 16; ref++ )
690             {
691                 if( sscanf( p, " %d", &rce->refcount[ref] ) != 1 )
692                     break;
693                 p = strchr( p+1, ' ' );
694                 if( !p )
695                     goto parse_error;
696             }
697             rce->refs = ref;
698
699             /* find weights */
700             rce->i_weight_denom = -1;
701             char *w = strchr( p, 'w' );
702             if( w )
703                 if( sscanf( w, "w:%hd,%hd,%hd", &rce->i_weight_denom, &rce->weight[0], &rce->weight[1] ) != 3 )
704                     rce->i_weight_denom = -1;
705
706             if( pict_type != 'b' )
707                 rce->kept_as_ref = 1;
708             switch( pict_type )
709             {
710                 case 'I':
711                     rce->frame_type = X264_TYPE_IDR;
712                     rce->pict_type  = SLICE_TYPE_I;
713                     break;
714                 case 'i':
715                     rce->frame_type = X264_TYPE_I;
716                     rce->pict_type  = SLICE_TYPE_I;
717                     break;
718                 case 'P':
719                     rce->frame_type = X264_TYPE_P;
720                     rce->pict_type  = SLICE_TYPE_P;
721                     break;
722                 case 'B':
723                     rce->frame_type = X264_TYPE_BREF;
724                     rce->pict_type  = SLICE_TYPE_B;
725                     break;
726                 case 'b':
727                     rce->frame_type = X264_TYPE_B;
728                     rce->pict_type  = SLICE_TYPE_B;
729                     break;
730                 default:  e = -1; break;
731             }
732             if(e < 10)
733             {
734 parse_error:
735                 x264_log(h, X264_LOG_ERROR, "statistics are damaged at line %d, parser out=%d\n", i, e);
736                 return -1;
737             }
738             rce->qscale = qp2qscale(qp);
739             p = next;
740         }
741
742         x264_free(stats_buf);
743
744         if(h->param.rc.i_rc_method == X264_RC_ABR)
745         {
746             if(init_pass2(h) < 0) return -1;
747         } /* else we're using constant quant, so no need to run the bitrate allocation */
748     }
749
750     /* Open output file */
751     /* If input and output files are the same, output to a temp file
752      * and move it to the real name only when it's complete */
753     if( h->param.rc.b_stat_write )
754     {
755         char *p;
756         rc->psz_stat_file_tmpname = x264_strcat_filename( h->param.rc.psz_stat_out, ".temp" );
757         if( !rc->psz_stat_file_tmpname )
758             return -1;
759
760         rc->p_stat_file_out = fopen( rc->psz_stat_file_tmpname, "wb" );
761         if( rc->p_stat_file_out == NULL )
762         {
763             x264_log(h, X264_LOG_ERROR, "ratecontrol_init: can't open stats file\n");
764             return -1;
765         }
766
767         p = x264_param2string( &h->param, 1 );
768         if( p )
769             fprintf( rc->p_stat_file_out, "#options: %s\n", p );
770         x264_free( p );
771         if( h->param.rc.b_mb_tree && !h->param.rc.b_stat_read )
772         {
773             rc->psz_mbtree_stat_file_tmpname = x264_strcat_filename( h->param.rc.psz_stat_out, ".mbtree.temp" );
774             rc->psz_mbtree_stat_file_name = x264_strcat_filename( h->param.rc.psz_stat_out, ".mbtree" );
775             if( !rc->psz_mbtree_stat_file_tmpname || !rc->psz_mbtree_stat_file_name )
776                 return -1;
777
778             rc->p_mbtree_stat_file_out = fopen( rc->psz_mbtree_stat_file_tmpname, "wb" );
779             if( rc->p_mbtree_stat_file_out == NULL )
780             {
781                 x264_log(h, X264_LOG_ERROR, "ratecontrol_init: can't open mbtree stats file\n");
782                 return -1;
783             }
784         }
785     }
786
787     if( h->param.rc.b_mb_tree && (h->param.rc.b_stat_read || h->param.rc.b_stat_write) )
788     {
789         CHECKED_MALLOC( rc->qp_buffer[0], h->mb.i_mb_count * sizeof(uint16_t) );
790         if( h->param.i_bframe_pyramid && h->param.rc.b_stat_read )
791             CHECKED_MALLOC( rc->qp_buffer[1], h->mb.i_mb_count * sizeof(uint16_t) );
792         rc->qpbuf_pos = -1;
793     }
794
795     for( i=0; i<h->param.i_threads; i++ )
796     {
797         h->thread[i]->rc = rc+i;
798         if( i )
799         {
800             rc[i] = rc[0];
801             h->thread[i]->param = h->param;
802             h->thread[i]->mb.b_variable_qp = h->mb.b_variable_qp;
803         }
804     }
805
806     return 0;
807 fail:
808     return -1;
809 }
810
811 static int parse_zone( x264_t *h, x264_zone_t *z, char *p )
812 {
813     int len = 0;
814     char *tok, UNUSED *saveptr=NULL;
815     z->param = NULL;
816     z->f_bitrate_factor = 1;
817     if( 3 <= sscanf(p, "%u,%u,q=%u%n", &z->i_start, &z->i_end, &z->i_qp, &len) )
818         z->b_force_qp = 1;
819     else if( 3 <= sscanf(p, "%u,%u,b=%f%n", &z->i_start, &z->i_end, &z->f_bitrate_factor, &len) )
820         z->b_force_qp = 0;
821     else if( 2 <= sscanf(p, "%u,%u%n", &z->i_start, &z->i_end, &len) )
822         z->b_force_qp = 0;
823     else
824     {
825         x264_log( h, X264_LOG_ERROR, "invalid zone: \"%s\"\n", p );
826         return -1;
827     }
828     p += len;
829     if( !*p )
830         return 0;
831     CHECKED_MALLOC( z->param, sizeof(x264_param_t) );
832     memcpy( z->param, &h->param, sizeof(x264_param_t) );
833     z->param->param_free = x264_free;
834     while( (tok = strtok_r( p, ",", &saveptr )) )
835     {
836         char *val = strchr( tok, '=' );
837         if( val )
838         {
839             *val = '\0';
840             val++;
841         }
842         if( x264_param_parse( z->param, tok, val ) )
843         {
844             x264_log( h, X264_LOG_ERROR, "invalid zone param: %s = %s\n", tok, val );
845             return -1;
846         }
847         p = NULL;
848     }
849     return 0;
850 fail:
851     return -1;
852 }
853
854 static int parse_zones( x264_t *h )
855 {
856     x264_ratecontrol_t *rc = h->rc;
857     int i;
858     if( h->param.rc.psz_zones && !h->param.rc.i_zones )
859     {
860         char *psz_zones, *p;
861         CHECKED_MALLOC( psz_zones, strlen( h->param.rc.psz_zones )+1 );
862         strcpy( psz_zones, h->param.rc.psz_zones );
863         h->param.rc.i_zones = 1;
864         for( p = psz_zones; *p; p++ )
865             h->param.rc.i_zones += (*p == '/');
866         CHECKED_MALLOC( h->param.rc.zones, h->param.rc.i_zones * sizeof(x264_zone_t) );
867         p = psz_zones;
868         for( i = 0; i < h->param.rc.i_zones; i++ )
869         {
870             int i_tok = strcspn( p, "/" );
871             p[i_tok] = 0;
872             if( parse_zone( h, &h->param.rc.zones[i], p ) )
873                 return -1;
874             p += i_tok + 1;
875         }
876         x264_free( psz_zones );
877     }
878
879     if( h->param.rc.i_zones > 0 )
880     {
881         for( i = 0; i < h->param.rc.i_zones; i++ )
882         {
883             x264_zone_t z = h->param.rc.zones[i];
884             if( z.i_start < 0 || z.i_start > z.i_end )
885             {
886                 x264_log( h, X264_LOG_ERROR, "invalid zone: start=%d end=%d\n",
887                           z.i_start, z.i_end );
888                 return -1;
889             }
890             else if( !z.b_force_qp && z.f_bitrate_factor <= 0 )
891             {
892                 x264_log( h, X264_LOG_ERROR, "invalid zone: bitrate_factor=%f\n",
893                           z.f_bitrate_factor );
894                 return -1;
895             }
896         }
897
898         rc->i_zones = h->param.rc.i_zones + 1;
899         CHECKED_MALLOC( rc->zones, rc->i_zones * sizeof(x264_zone_t) );
900         memcpy( rc->zones+1, h->param.rc.zones, (rc->i_zones-1) * sizeof(x264_zone_t) );
901
902         // default zone to fall back to if none of the others match
903         rc->zones[0].i_start = 0;
904         rc->zones[0].i_end = INT_MAX;
905         rc->zones[0].b_force_qp = 0;
906         rc->zones[0].f_bitrate_factor = 1;
907         CHECKED_MALLOC( rc->zones[0].param, sizeof(x264_param_t) );
908         memcpy( rc->zones[0].param, &h->param, sizeof(x264_param_t) );
909         for( i = 1; i < rc->i_zones; i++ )
910         {
911             if( !rc->zones[i].param )
912                 rc->zones[i].param = rc->zones[0].param;
913         }
914     }
915
916     return 0;
917 fail:
918     return -1;
919 }
920
921 static x264_zone_t *get_zone( x264_t *h, int frame_num )
922 {
923     int i;
924     for( i = h->rc->i_zones-1; i >= 0; i-- )
925     {
926         x264_zone_t *z = &h->rc->zones[i];
927         if( frame_num >= z->i_start && frame_num <= z->i_end )
928             return z;
929     }
930     return NULL;
931 }
932
933 void x264_ratecontrol_summary( x264_t *h )
934 {
935     x264_ratecontrol_t *rc = h->rc;
936     if( rc->b_abr && h->param.rc.i_rc_method == X264_RC_ABR && rc->cbr_decay > .9999 )
937     {
938         double base_cplx = h->mb.i_mb_count * (h->param.i_bframe ? 120 : 80);
939         double mbtree_offset = h->param.rc.b_mb_tree ? (1.0-h->param.rc.f_qcompress)*13.5 : 0;
940         x264_log( h, X264_LOG_INFO, "final ratefactor: %.2f\n",
941                   qscale2qp( pow( base_cplx, 1 - rc->qcompress )
942                              * rc->cplxr_sum / rc->wanted_bits_window ) - mbtree_offset );
943     }
944 }
945
946 void x264_ratecontrol_delete( x264_t *h )
947 {
948     x264_ratecontrol_t *rc = h->rc;
949     int i;
950     int b_regular_file;
951
952     if( rc->p_stat_file_out )
953     {
954         b_regular_file = x264_is_regular_file( rc->p_stat_file_out );
955         fclose( rc->p_stat_file_out );
956         if( h->i_frame >= rc->num_entries && b_regular_file )
957             if( rename( rc->psz_stat_file_tmpname, h->param.rc.psz_stat_out ) != 0 )
958             {
959                 x264_log( h, X264_LOG_ERROR, "failed to rename \"%s\" to \"%s\"\n",
960                           rc->psz_stat_file_tmpname, h->param.rc.psz_stat_out );
961             }
962         x264_free( rc->psz_stat_file_tmpname );
963     }
964     if( rc->p_mbtree_stat_file_out )
965     {
966         b_regular_file = x264_is_regular_file( rc->p_mbtree_stat_file_out );
967         fclose( rc->p_mbtree_stat_file_out );
968         if( h->i_frame >= rc->num_entries && b_regular_file )
969             if( rename( rc->psz_mbtree_stat_file_tmpname, rc->psz_mbtree_stat_file_name ) != 0 )
970             {
971                 x264_log( h, X264_LOG_ERROR, "failed to rename \"%s\" to \"%s\"\n",
972                           rc->psz_mbtree_stat_file_tmpname, rc->psz_mbtree_stat_file_name );
973             }
974         x264_free( rc->psz_mbtree_stat_file_tmpname );
975         x264_free( rc->psz_mbtree_stat_file_name );
976     }
977     if( rc->p_mbtree_stat_file_in )
978         fclose( rc->p_mbtree_stat_file_in );
979     x264_free( rc->pred );
980     x264_free( rc->pred_b_from_p );
981     x264_free( rc->entry );
982     x264_free( rc->qp_buffer[0] );
983     x264_free( rc->qp_buffer[1] );
984     if( rc->zones )
985     {
986         x264_free( rc->zones[0].param );
987         for( i=1; i<rc->i_zones; i++ )
988             if( rc->zones[i].param != rc->zones[0].param && rc->zones[i].param->param_free )
989                 rc->zones[i].param->param_free( rc->zones[i].param );
990         x264_free( rc->zones );
991     }
992     x264_free( rc );
993 }
994
995 static void accum_p_qp_update( x264_t *h, float qp )
996 {
997     x264_ratecontrol_t *rc = h->rc;
998     rc->accum_p_qp   *= .95;
999     rc->accum_p_norm *= .95;
1000     rc->accum_p_norm += 1;
1001     if( h->sh.i_type == SLICE_TYPE_I )
1002         rc->accum_p_qp += qp + rc->ip_offset;
1003     else
1004         rc->accum_p_qp += qp;
1005 }
1006
1007 /* Before encoding a frame, choose a QP for it */
1008 void x264_ratecontrol_start( x264_t *h, int i_force_qp, int overhead )
1009 {
1010     x264_ratecontrol_t *rc = h->rc;
1011     ratecontrol_entry_t *rce = NULL;
1012     x264_zone_t *zone = get_zone( h, h->fenc->i_frame );
1013     float q;
1014
1015     x264_emms();
1016
1017     if( zone && (!rc->prev_zone || zone->param != rc->prev_zone->param) )
1018         x264_encoder_reconfig( h, zone->param );
1019     rc->prev_zone = zone;
1020
1021     rc->qp_force = i_force_qp;
1022
1023     if( h->param.rc.b_stat_read )
1024     {
1025         int frame = h->fenc->i_frame;
1026         assert( frame >= 0 && frame < rc->num_entries );
1027         rce = h->rc->rce = &h->rc->entry[frame];
1028
1029         if( h->sh.i_type == SLICE_TYPE_B
1030             && h->param.analyse.i_direct_mv_pred == X264_DIRECT_PRED_AUTO )
1031         {
1032             h->sh.b_direct_spatial_mv_pred = ( rce->direct_mode == 's' );
1033             h->mb.b_direct_auto_read = ( rce->direct_mode == 's' || rce->direct_mode == 't' );
1034         }
1035     }
1036
1037     if( rc->b_vbv )
1038     {
1039         memset( h->fdec->i_row_bits, 0, h->sps->i_mb_height * sizeof(int) );
1040         rc->row_pred = &rc->row_preds[h->sh.i_type];
1041         update_vbv_plan( h, overhead );
1042     }
1043
1044     if( h->sh.i_type != SLICE_TYPE_B )
1045         rc->bframes = h->fenc->i_bframes;
1046
1047     if( i_force_qp )
1048     {
1049         q = i_force_qp - 1;
1050     }
1051     else if( rc->b_abr )
1052     {
1053         q = qscale2qp( rate_estimate_qscale( h ) );
1054     }
1055     else if( rc->b_2pass )
1056     {
1057         rce->new_qscale = rate_estimate_qscale( h );
1058         q = qscale2qp( rce->new_qscale );
1059     }
1060     else /* CQP */
1061     {
1062         if( h->sh.i_type == SLICE_TYPE_B && h->fdec->b_kept_as_ref )
1063             q = ( rc->qp_constant[ SLICE_TYPE_B ] + rc->qp_constant[ SLICE_TYPE_P ] ) / 2;
1064         else
1065             q = rc->qp_constant[ h->sh.i_type ];
1066
1067         if( zone )
1068         {
1069             if( zone->b_force_qp )
1070                 q += zone->i_qp - rc->qp_constant[SLICE_TYPE_P];
1071             else
1072                 q -= 6*log(zone->f_bitrate_factor)/log(2);
1073         }
1074     }
1075
1076     q = x264_clip3f( q, h->param.rc.i_qp_min, h->param.rc.i_qp_max );
1077
1078     rc->qpa_rc =
1079     rc->qpa_aq = 0;
1080     h->fdec->f_qp_avg_rc =
1081     h->fdec->f_qp_avg_aq =
1082     rc->qpm =
1083     rc->qp = x264_clip3( (int)(q + 0.5), 0, 51 );
1084     rc->f_qpm = q;
1085     if( rce )
1086         rce->new_qp = rc->qp;
1087
1088     accum_p_qp_update( h, rc->qp );
1089
1090     if( h->sh.i_type != SLICE_TYPE_B )
1091         rc->last_non_b_pict_type = h->sh.i_type;
1092 }
1093
1094 static double predict_row_size( x264_t *h, int y, int qp )
1095 {
1096     /* average between two predictors:
1097      * absolute SATD, and scaled bit cost of the colocated row in the previous frame */
1098     x264_ratecontrol_t *rc = h->rc;
1099     double pred_s = predict_size( rc->row_pred[0], qp2qscale(qp), h->fdec->i_row_satd[y] );
1100     double pred_t = 0;
1101     if( h->sh.i_type == SLICE_TYPE_I || qp >= h->fref0[0]->i_row_qp[y] )
1102     {
1103         if( h->sh.i_type == SLICE_TYPE_P
1104             && h->fref0[0]->i_type == h->fdec->i_type
1105             && h->fref0[0]->i_row_satd[y] > 0
1106             && (abs(h->fref0[0]->i_row_satd[y] - h->fdec->i_row_satd[y]) < h->fdec->i_row_satd[y]/2))
1107         {
1108             pred_t = h->fref0[0]->i_row_bits[y] * h->fdec->i_row_satd[y] / h->fref0[0]->i_row_satd[y]
1109                      * qp2qscale(h->fref0[0]->i_row_qp[y]) / qp2qscale(qp);
1110         }
1111         if( pred_t == 0 )
1112             pred_t = pred_s;
1113         return (pred_s + pred_t) / 2;
1114     }
1115     /* Our QP is lower than the reference! */
1116     else
1117     {
1118         double pred_intra = predict_size( rc->row_pred[1], qp2qscale(qp), h->fdec->i_row_satds[0][0][y] );
1119         /* Sum: better to overestimate than underestimate by using only one of the two predictors. */
1120         return pred_intra + pred_s;
1121     }
1122 }
1123
1124 static double row_bits_so_far( x264_t *h, int y )
1125 {
1126     int i;
1127     double bits = 0;
1128     for( i = h->i_threadslice_start; i <= y; i++ )
1129         bits += h->fdec->i_row_bits[i];
1130     return bits;
1131 }
1132
1133 static double predict_row_size_sum( x264_t *h, int y, int qp )
1134 {
1135     int i;
1136     double bits = row_bits_so_far(h, y);
1137     for( i = y+1; i < h->i_threadslice_end; i++ )
1138         bits += predict_row_size( h, i, qp );
1139     return bits;
1140 }
1141
1142
1143 void x264_ratecontrol_mb( x264_t *h, int bits )
1144 {
1145     x264_ratecontrol_t *rc = h->rc;
1146     const int y = h->mb.i_mb_y;
1147
1148     x264_emms();
1149
1150     h->fdec->i_row_bits[y] += bits;
1151     rc->qpa_rc += rc->f_qpm;
1152     rc->qpa_aq += h->mb.i_qp;
1153
1154     if( h->mb.i_mb_x != h->sps->i_mb_width - 1 || !rc->b_vbv )
1155         return;
1156
1157     h->fdec->i_row_qp[y] = rc->qpm;
1158
1159     update_predictor( rc->row_pred[0], qp2qscale(rc->qpm), h->fdec->i_row_satd[y], h->fdec->i_row_bits[y] );
1160     if( h->sh.i_type == SLICE_TYPE_P && rc->qpm < h->fref0[0]->i_row_qp[y] )
1161         update_predictor( rc->row_pred[1], qp2qscale(rc->qpm), h->fdec->i_row_satds[0][0][y], h->fdec->i_row_bits[y] );
1162
1163     /* tweak quality based on difference from predicted size */
1164     if( y < h->i_threadslice_end-1 )
1165     {
1166         int i;
1167         int prev_row_qp = h->fdec->i_row_qp[y];
1168         int i_qp_max = X264_MIN( prev_row_qp + h->param.rc.i_qp_step, h->param.rc.i_qp_max );
1169         int i_qp_min = X264_MAX( prev_row_qp - h->param.rc.i_qp_step, h->param.rc.i_qp_min );
1170
1171         /* B-frames shouldn't use lower QP than their reference frames. */
1172         if( h->sh.i_type == SLICE_TYPE_B )
1173         {
1174             i_qp_min = X264_MAX( i_qp_min, X264_MAX( h->fref0[0]->i_row_qp[y+1], h->fref1[0]->i_row_qp[y+1] ) );
1175             rc->qpm = X264_MAX( rc->qpm, i_qp_min );
1176         }
1177
1178         float buffer_left_planned = rc->buffer_fill - rc->frame_size_planned;
1179         float slice_size_planned = h->param.b_sliced_threads ? rc->slice_size_planned : rc->frame_size_planned;
1180         float size_of_other_slices = 0;
1181         if( h->param.b_sliced_threads )
1182         {
1183             for( i = 0; i < h->param.i_threads; i++ )
1184                 if( h != h->thread[i] )
1185                     size_of_other_slices += h->thread[i]->rc->frame_size_estimated;
1186         }
1187         else
1188             rc->max_frame_error = X264_MAX( 0.05, 1.0 / (h->sps->i_mb_width) );
1189
1190         /* More threads means we have to be more cautious in letting ratecontrol use up extra bits. */
1191         float rc_tol = buffer_left_planned / h->param.i_threads * rc->rate_tolerance;
1192         int b1 = predict_row_size_sum( h, y, rc->qpm ) + size_of_other_slices;
1193
1194         /* Don't modify the row QPs until a sufficent amount of the bits of the frame have been processed, in case a flat */
1195         /* area at the top of the frame was measured inaccurately. */
1196         if( row_bits_so_far( h, y ) < 0.05 * slice_size_planned )
1197             return;
1198
1199         if( h->sh.i_type != SLICE_TYPE_I )
1200             rc_tol /= 2;
1201
1202         if( !rc->b_vbv_min_rate )
1203             i_qp_min = X264_MAX( i_qp_min, h->sh.i_qp );
1204
1205         while( rc->qpm < i_qp_max
1206                && ((b1 > rc->frame_size_planned + rc_tol) ||
1207                    (rc->buffer_fill - b1 < buffer_left_planned * 0.5) ||
1208                    (b1 > rc->frame_size_planned && rc->qpm < rc->qp_novbv)) )
1209         {
1210             rc->qpm ++;
1211             b1 = predict_row_size_sum( h, y, rc->qpm ) + size_of_other_slices;
1212         }
1213
1214         while( rc->qpm > i_qp_min
1215                && (rc->qpm > h->fdec->i_row_qp[0] || rc->single_frame_vbv)
1216                && ((b1 < rc->frame_size_planned * 0.8 && rc->qpm <= prev_row_qp)
1217                || b1 < (rc->buffer_fill - rc->buffer_size + rc->buffer_rate) * 1.1) )
1218         {
1219             rc->qpm --;
1220             b1 = predict_row_size_sum( h, y, rc->qpm ) + size_of_other_slices;
1221         }
1222
1223         /* avoid VBV underflow */
1224         while( (rc->qpm < h->param.rc.i_qp_max)
1225                && (rc->buffer_fill - b1 < rc->buffer_rate * rc->max_frame_error) )
1226         {
1227             rc->qpm ++;
1228             b1 = predict_row_size_sum( h, y, rc->qpm ) + size_of_other_slices;
1229         }
1230
1231         h->rc->frame_size_estimated = predict_row_size_sum( h, y, rc->qpm );
1232     }
1233
1234     /* loses the fractional part of the frame-wise qp */
1235     rc->f_qpm = rc->qpm;
1236 }
1237
1238 int x264_ratecontrol_qp( x264_t *h )
1239 {
1240     return h->rc->qpm;
1241 }
1242
1243 /* In 2pass, force the same frame types as in the 1st pass */
1244 int x264_ratecontrol_slice_type( x264_t *h, int frame_num )
1245 {
1246     x264_ratecontrol_t *rc = h->rc;
1247     if( h->param.rc.b_stat_read )
1248     {
1249         if( frame_num >= rc->num_entries )
1250         {
1251             /* We could try to initialize everything required for ABR and
1252              * adaptive B-frames, but that would be complicated.
1253              * So just calculate the average QP used so far. */
1254             int i;
1255
1256             h->param.rc.i_qp_constant = (h->stat.i_frame_count[SLICE_TYPE_P] == 0) ? 24
1257                                       : 1 + h->stat.f_frame_qp[SLICE_TYPE_P] / h->stat.i_frame_count[SLICE_TYPE_P];
1258             rc->qp_constant[SLICE_TYPE_P] = x264_clip3( h->param.rc.i_qp_constant, 0, 51 );
1259             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 );
1260             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 );
1261
1262             x264_log(h, X264_LOG_ERROR, "2nd pass has more frames than 1st pass (%d)\n", rc->num_entries);
1263             x264_log(h, X264_LOG_ERROR, "continuing anyway, at constant QP=%d\n", h->param.rc.i_qp_constant);
1264             if( h->param.i_bframe_adaptive )
1265                 x264_log(h, X264_LOG_ERROR, "disabling adaptive B-frames\n");
1266
1267             for( i = 0; i < h->param.i_threads; i++ )
1268             {
1269                 h->thread[i]->rc->b_abr = 0;
1270                 h->thread[i]->rc->b_2pass = 0;
1271                 h->thread[i]->param.rc.i_rc_method = X264_RC_CQP;
1272                 h->thread[i]->param.rc.b_stat_read = 0;
1273                 h->thread[i]->param.i_bframe_adaptive = 0;
1274                 h->thread[i]->param.i_scenecut_threshold = 0;
1275                 h->thread[i]->param.rc.b_mb_tree = 0;
1276                 if( h->thread[i]->param.i_bframe > 1 )
1277                     h->thread[i]->param.i_bframe = 1;
1278             }
1279             return X264_TYPE_AUTO;
1280         }
1281         return rc->entry[frame_num].frame_type;
1282     }
1283     else
1284         return X264_TYPE_AUTO;
1285 }
1286
1287 void x264_ratecontrol_set_weights( x264_t *h, x264_frame_t *frm )
1288 {
1289     ratecontrol_entry_t *rce = &h->rc->entry[frm->i_frame];
1290     if( h->param.analyse.i_weighted_pred <= 0 )
1291         return;
1292     if( rce->i_weight_denom >= 0 )
1293         SET_WEIGHT( frm->weight[0][0], 1, rce->weight[0], rce->i_weight_denom, rce->weight[1] );
1294 }
1295
1296 /* After encoding one frame, save stats and update ratecontrol state */
1297 int x264_ratecontrol_end( x264_t *h, int bits )
1298 {
1299     x264_ratecontrol_t *rc = h->rc;
1300     const int *mbs = h->stat.frame.i_mb_count;
1301     int i;
1302
1303     x264_emms();
1304
1305     h->stat.frame.i_mb_count_skip = mbs[P_SKIP] + mbs[B_SKIP];
1306     h->stat.frame.i_mb_count_i = mbs[I_16x16] + mbs[I_8x8] + mbs[I_4x4];
1307     h->stat.frame.i_mb_count_p = mbs[P_L0] + mbs[P_8x8];
1308     for( i = B_DIRECT; i < B_8x8; i++ )
1309         h->stat.frame.i_mb_count_p += mbs[i];
1310
1311     h->fdec->f_qp_avg_rc = rc->qpa_rc /= h->mb.i_mb_count;
1312     h->fdec->f_qp_avg_aq = rc->qpa_aq /= h->mb.i_mb_count;
1313
1314     if( h->param.rc.b_stat_write )
1315     {
1316         char c_type = h->sh.i_type==SLICE_TYPE_I ? (h->fenc->i_poc==0 ? 'I' : 'i')
1317                     : h->sh.i_type==SLICE_TYPE_P ? 'P'
1318                     : h->fenc->b_kept_as_ref ? 'B' : 'b';
1319         int dir_frame = h->stat.frame.i_direct_score[1] - h->stat.frame.i_direct_score[0];
1320         int dir_avg = h->stat.i_direct_score[1] - h->stat.i_direct_score[0];
1321         char c_direct = h->mb.b_direct_auto_write ?
1322                         ( dir_frame>0 ? 's' : dir_frame<0 ? 't' :
1323                           dir_avg>0 ? 's' : dir_avg<0 ? 't' : '-' )
1324                         : '-';
1325         if( fprintf( rc->p_stat_file_out,
1326                  "in:%d out:%d type:%c q:%.2f tex:%d mv:%d misc:%d imb:%d pmb:%d smb:%d d:%c ref:",
1327                  h->fenc->i_frame, h->i_frame,
1328                  c_type, rc->qpa_rc,
1329                  h->stat.frame.i_tex_bits,
1330                  h->stat.frame.i_mv_bits,
1331                  h->stat.frame.i_misc_bits,
1332                  h->stat.frame.i_mb_count_i,
1333                  h->stat.frame.i_mb_count_p,
1334                  h->stat.frame.i_mb_count_skip,
1335                  c_direct) < 0 )
1336             goto fail;
1337
1338         /* Only write information for reference reordering once. */
1339         int use_old_stats = h->param.rc.b_stat_read && rc->rce->refs > 1;
1340         for( i = 0; i < (use_old_stats ? rc->rce->refs : h->i_ref0); i++ )
1341         {
1342             int refcount = use_old_stats         ? rc->rce->refcount[i]
1343                          : h->param.b_interlaced ? h->stat.frame.i_mb_count_ref[0][i*2]
1344                                                  + h->stat.frame.i_mb_count_ref[0][i*2+1]
1345                          :                         h->stat.frame.i_mb_count_ref[0][i];
1346             if( fprintf( rc->p_stat_file_out, "%d ", refcount ) < 0 )
1347                 goto fail;
1348         }
1349
1350         if( h->sh.weight[0][0].weightfn )
1351         {
1352             if( fprintf( rc->p_stat_file_out, "w:%"PRId32",%"PRId32",%"PRId32, h->sh.weight[0][0].i_denom, h->sh.weight[0][0].i_scale, h->sh.weight[0][0].i_offset ) < 0 )
1353                 goto fail;
1354         }
1355
1356         if( fprintf( rc->p_stat_file_out, ";\n") < 0 )
1357             goto fail;
1358
1359         /* Don't re-write the data in multi-pass mode. */
1360         if( h->param.rc.b_mb_tree && h->fenc->b_kept_as_ref && !h->param.rc.b_stat_read )
1361         {
1362             uint8_t i_type = h->sh.i_type;
1363             int i;
1364             /* Values are stored as big-endian FIX8.8 */
1365             for( i = 0; i < h->mb.i_mb_count; i++ )
1366                 rc->qp_buffer[0][i] = endian_fix16( h->fenc->f_qp_offset[i]*256.0 );
1367             if( fwrite( &i_type, 1, 1, rc->p_mbtree_stat_file_out ) < 1 )
1368                 goto fail;
1369             if( fwrite( rc->qp_buffer[0], sizeof(uint16_t), h->mb.i_mb_count, rc->p_mbtree_stat_file_out ) < h->mb.i_mb_count )
1370                 goto fail;
1371         }
1372     }
1373
1374     if( rc->b_abr )
1375     {
1376         if( h->sh.i_type != SLICE_TYPE_B )
1377             rc->cplxr_sum += bits * qp2qscale(rc->qpa_rc) / rc->last_rceq;
1378         else
1379         {
1380             /* Depends on the fact that B-frame's QP is an offset from the following P-frame's.
1381              * Not perfectly accurate with B-refs, but good enough. */
1382             rc->cplxr_sum += bits * qp2qscale(rc->qpa_rc) / (rc->last_rceq * fabs(h->param.rc.f_pb_factor));
1383         }
1384         rc->cplxr_sum *= rc->cbr_decay;
1385         rc->wanted_bits_window += rc->bitrate / rc->fps;
1386         rc->wanted_bits_window *= rc->cbr_decay;
1387     }
1388
1389     if( rc->b_2pass )
1390     {
1391         rc->expected_bits_sum += qscale2bits( rc->rce, qp2qscale(rc->rce->new_qp) );
1392     }
1393
1394     if( h->mb.b_variable_qp )
1395     {
1396         if( h->sh.i_type == SLICE_TYPE_B )
1397         {
1398             rc->bframe_bits += bits;
1399             if( h->fenc->b_last_minigop_bframe )
1400             {
1401                 update_predictor( rc->pred_b_from_p, qp2qscale(rc->qpa_rc),
1402                                   h->fref1[h->i_ref1-1]->i_satd, rc->bframe_bits / rc->bframes );
1403                 rc->bframe_bits = 0;
1404             }
1405         }
1406     }
1407
1408     update_vbv( h, bits );
1409     return 0;
1410 fail:
1411     x264_log(h, X264_LOG_ERROR, "ratecontrol_end: stats file could not be written to\n");
1412     return -1;
1413 }
1414
1415 /****************************************************************************
1416  * 2 pass functions
1417  ***************************************************************************/
1418
1419 /**
1420  * modify the bitrate curve from pass1 for one frame
1421  */
1422 static double get_qscale(x264_t *h, ratecontrol_entry_t *rce, double rate_factor, int frame_num)
1423 {
1424     x264_ratecontrol_t *rcc= h->rc;
1425     double q;
1426     x264_zone_t *zone = get_zone( h, frame_num );
1427
1428     q = pow( rce->blurred_complexity, 1 - rcc->qcompress );
1429
1430     // avoid NaN's in the rc_eq
1431     if(!isfinite(q) || rce->tex_bits + rce->mv_bits == 0)
1432         q = rcc->last_qscale_for[rce->pict_type];
1433     else
1434     {
1435         rcc->last_rceq = q;
1436         q /= rate_factor;
1437         rcc->last_qscale = q;
1438     }
1439
1440     if( zone )
1441     {
1442         if( zone->b_force_qp )
1443             q = qp2qscale(zone->i_qp);
1444         else
1445             q /= zone->f_bitrate_factor;
1446     }
1447
1448     return q;
1449 }
1450
1451 static double get_diff_limited_q(x264_t *h, ratecontrol_entry_t *rce, double q)
1452 {
1453     x264_ratecontrol_t *rcc = h->rc;
1454     const int pict_type = rce->pict_type;
1455
1456     // force I/B quants as a function of P quants
1457     const double last_p_q    = rcc->last_qscale_for[SLICE_TYPE_P];
1458     const double last_non_b_q= rcc->last_qscale_for[rcc->last_non_b_pict_type];
1459     if( pict_type == SLICE_TYPE_I )
1460     {
1461         double iq = q;
1462         double pq = qp2qscale( rcc->accum_p_qp / rcc->accum_p_norm );
1463         double ip_factor = fabs( h->param.rc.f_ip_factor );
1464         /* don't apply ip_factor if the following frame is also I */
1465         if( rcc->accum_p_norm <= 0 )
1466             q = iq;
1467         else if( h->param.rc.f_ip_factor < 0 )
1468             q = iq / ip_factor;
1469         else if( rcc->accum_p_norm >= 1 )
1470             q = pq / ip_factor;
1471         else
1472             q = rcc->accum_p_norm * pq / ip_factor + (1 - rcc->accum_p_norm) * iq;
1473     }
1474     else if( pict_type == SLICE_TYPE_B )
1475     {
1476         if( h->param.rc.f_pb_factor > 0 )
1477             q = last_non_b_q;
1478         if( !rce->kept_as_ref )
1479             q *= fabs( h->param.rc.f_pb_factor );
1480     }
1481     else if( pict_type == SLICE_TYPE_P
1482              && rcc->last_non_b_pict_type == SLICE_TYPE_P
1483              && rce->tex_bits == 0 )
1484     {
1485         q = last_p_q;
1486     }
1487
1488     /* last qscale / qdiff stuff */
1489     if(rcc->last_non_b_pict_type==pict_type
1490        && (pict_type!=SLICE_TYPE_I || rcc->last_accum_p_norm < 1))
1491     {
1492         double last_q = rcc->last_qscale_for[pict_type];
1493         double max_qscale = last_q * rcc->lstep;
1494         double min_qscale = last_q / rcc->lstep;
1495
1496         if     (q > max_qscale) q = max_qscale;
1497         else if(q < min_qscale) q = min_qscale;
1498     }
1499
1500     rcc->last_qscale_for[pict_type] = q;
1501     if(pict_type!=SLICE_TYPE_B)
1502         rcc->last_non_b_pict_type = pict_type;
1503     if(pict_type==SLICE_TYPE_I)
1504     {
1505         rcc->last_accum_p_norm = rcc->accum_p_norm;
1506         rcc->accum_p_norm = 0;
1507         rcc->accum_p_qp = 0;
1508     }
1509     if(pict_type==SLICE_TYPE_P)
1510     {
1511         float mask = 1 - pow( (float)rce->i_count / rcc->nmb, 2 );
1512         rcc->accum_p_qp   = mask * (qscale2qp(q) + rcc->accum_p_qp);
1513         rcc->accum_p_norm = mask * (1 + rcc->accum_p_norm);
1514     }
1515     return q;
1516 }
1517
1518 static double predict_size( predictor_t *p, double q, double var )
1519 {
1520      return (p->coeff*var + p->offset) / (q*p->count);
1521 }
1522
1523 static void update_predictor( predictor_t *p, double q, double var, double bits )
1524 {
1525     const double range = 1.5;
1526     if( var < 10 )
1527         return;
1528     double old_coeff = p->coeff / p->count;
1529     double new_coeff = bits*q / var;
1530     double new_coeff_clipped = x264_clip3f( new_coeff, old_coeff/range, old_coeff*range );
1531     double new_offset = bits*q - new_coeff_clipped * var;
1532     if( new_offset >= 0 )
1533         new_coeff = new_coeff_clipped;
1534     else
1535         new_offset = 0;
1536     p->count  *= p->decay;
1537     p->coeff  *= p->decay;
1538     p->offset *= p->decay;
1539     p->count  ++;
1540     p->coeff  += new_coeff;
1541     p->offset += new_offset;
1542 }
1543
1544 // update VBV after encoding a frame
1545 static void update_vbv( x264_t *h, int bits )
1546 {
1547     x264_ratecontrol_t *rcc = h->rc;
1548     x264_ratecontrol_t *rct = h->thread[0]->rc;
1549
1550     if( rcc->last_satd >= h->mb.i_mb_count )
1551         update_predictor( &rct->pred[h->sh.i_type], qp2qscale(rcc->qpa_rc), rcc->last_satd, bits );
1552
1553     if( !rcc->b_vbv )
1554         return;
1555
1556     rct->buffer_fill_final -= bits;
1557     if( rct->buffer_fill_final < 0 )
1558         x264_log( h, X264_LOG_WARNING, "VBV underflow (frame %d, %.0f bits)\n", h->i_frame, rct->buffer_fill_final );
1559     rct->buffer_fill_final = X264_MAX( rct->buffer_fill_final, 0 );
1560     rct->buffer_fill_final += rcc->buffer_rate;
1561     rct->buffer_fill_final = X264_MIN( rct->buffer_fill_final, rcc->buffer_size );
1562 }
1563
1564 // provisionally update VBV according to the planned size of all frames currently in progress
1565 static void update_vbv_plan( x264_t *h, int overhead )
1566 {
1567     x264_ratecontrol_t *rcc = h->rc;
1568     rcc->buffer_fill = h->thread[0]->rc->buffer_fill_final;
1569     if( h->i_thread_frames > 1 )
1570     {
1571         int j = h->rc - h->thread[0]->rc;
1572         int i;
1573         for( i=1; i<h->i_thread_frames; i++ )
1574         {
1575             x264_t *t = h->thread[ (j+i)%h->i_thread_frames ];
1576             double bits = t->rc->frame_size_planned;
1577             if( !t->b_thread_active )
1578                 continue;
1579             bits  = X264_MAX(bits, t->rc->frame_size_estimated);
1580             rcc->buffer_fill -= bits;
1581             rcc->buffer_fill = X264_MAX( rcc->buffer_fill, 0 );
1582             rcc->buffer_fill += rcc->buffer_rate;
1583             rcc->buffer_fill = X264_MIN( rcc->buffer_fill, rcc->buffer_size );
1584         }
1585     }
1586     rcc->buffer_fill = X264_MIN( rcc->buffer_fill, rcc->buffer_size );
1587     rcc->buffer_fill -= overhead;
1588 }
1589
1590 // apply VBV constraints and clip qscale to between lmin and lmax
1591 static double clip_qscale( x264_t *h, int pict_type, double q )
1592 {
1593     x264_ratecontrol_t *rcc = h->rc;
1594     double lmin = rcc->lmin[pict_type];
1595     double lmax = rcc->lmax[pict_type];
1596     double q0 = q;
1597
1598     /* B-frames are not directly subject to VBV,
1599      * since they are controlled by the P-frames' QPs. */
1600
1601     if( rcc->b_vbv && rcc->last_satd > 0 )
1602     {
1603         /* Lookahead VBV: raise the quantizer as necessary such that no frames in
1604          * the lookahead overflow and such that the buffer is in a reasonable state
1605          * by the end of the lookahead. */
1606         if( h->param.rc.i_lookahead )
1607         {
1608             int j, iterations, terminate = 0;
1609
1610             /* Avoid an infinite loop. */
1611             for( iterations = 0; iterations < 1000 && terminate != 3; iterations++ )
1612             {
1613                 double frame_q[3];
1614                 double cur_bits = predict_size( &rcc->pred[h->sh.i_type], q, rcc->last_satd );
1615                 double buffer_fill_cur = rcc->buffer_fill - cur_bits;
1616                 double target_fill;
1617                 frame_q[0] = h->sh.i_type == SLICE_TYPE_I ? q * h->param.rc.f_ip_factor : q;
1618                 frame_q[1] = frame_q[0] * h->param.rc.f_pb_factor;
1619                 frame_q[2] = frame_q[0] / h->param.rc.f_ip_factor;
1620
1621                 /* Loop over the planned future frames. */
1622                 for( j = 0; buffer_fill_cur >= 0 && buffer_fill_cur <= rcc->buffer_size; j++ )
1623                 {
1624                     buffer_fill_cur += rcc->buffer_rate;
1625                     int i_type = h->fenc->i_planned_type[j];
1626                     int i_satd = h->fenc->i_planned_satd[j];
1627                     if( i_type == X264_TYPE_AUTO )
1628                         break;
1629                     i_type = IS_X264_TYPE_I( i_type ) ? SLICE_TYPE_I : IS_X264_TYPE_B( i_type ) ? SLICE_TYPE_B : SLICE_TYPE_P;
1630                     cur_bits = predict_size( &rcc->pred[i_type], frame_q[i_type], i_satd );
1631                     buffer_fill_cur -= cur_bits;
1632                 }
1633                 /* Try to get to get the buffer at least 50% filled, but don't set an impossible goal. */
1634                 target_fill = X264_MIN( rcc->buffer_fill + j * rcc->buffer_rate * 0.5, rcc->buffer_size * 0.5 );
1635                 if( buffer_fill_cur < target_fill )
1636                 {
1637                     q *= 1.01;
1638                     terminate |= 1;
1639                     continue;
1640                 }
1641                 /* Try to get the buffer no more than 80% filled, but don't set an impossible goal. */
1642                 target_fill = x264_clip3f( rcc->buffer_fill - j * rcc->buffer_rate * 0.5, rcc->buffer_size * 0.8, rcc->buffer_size );
1643                 if( rcc->b_vbv_min_rate && buffer_fill_cur > target_fill )
1644                 {
1645                     q /= 1.01;
1646                     terminate |= 2;
1647                     continue;
1648                 }
1649                 break;
1650             }
1651         }
1652         /* Fallback to old purely-reactive algorithm: no lookahead. */
1653         else
1654         {
1655             if( ( pict_type == SLICE_TYPE_P ||
1656                 ( pict_type == SLICE_TYPE_I && rcc->last_non_b_pict_type == SLICE_TYPE_I ) ) &&
1657                 rcc->buffer_fill/rcc->buffer_size < 0.5 )
1658             {
1659                 q /= x264_clip3f( 2.0*rcc->buffer_fill/rcc->buffer_size, 0.5, 1.0 );
1660             }
1661
1662             /* Now a hard threshold to make sure the frame fits in VBV.
1663              * This one is mostly for I-frames. */
1664             double bits = predict_size( &rcc->pred[h->sh.i_type], q, rcc->last_satd );
1665             double qf = 1.0;
1666             /* For small VBVs, allow the frame to use up the entire VBV. */
1667             double max_fill_factor = h->param.rc.i_vbv_buffer_size >= 5*h->param.rc.i_vbv_max_bitrate / rcc->fps ? 2 : 1;
1668             /* For single-frame VBVs, request that the frame use up the entire VBV. */
1669             double min_fill_factor = rcc->single_frame_vbv ? 1 : 2;
1670
1671             if( bits > rcc->buffer_fill/max_fill_factor )
1672                 qf = x264_clip3f( rcc->buffer_fill/(max_fill_factor*bits), 0.2, 1.0 );
1673             q /= qf;
1674             bits *= qf;
1675             if( bits < rcc->buffer_rate/min_fill_factor )
1676                 q *= bits*min_fill_factor/rcc->buffer_rate;
1677             q = X264_MAX( q0, q );
1678         }
1679
1680         /* Check B-frame complexity, and use up any bits that would
1681          * overflow before the next P-frame. */
1682         if( h->sh.i_type == SLICE_TYPE_P && !rcc->single_frame_vbv )
1683         {
1684             int nb = rcc->bframes;
1685             double bits = predict_size( &rcc->pred[h->sh.i_type], q, rcc->last_satd );
1686             double pbbits = bits;
1687             double bbits = predict_size( rcc->pred_b_from_p, q * h->param.rc.f_pb_factor, rcc->last_satd );
1688             double space;
1689             if( bbits > rcc->buffer_rate  )
1690                 nb = 0;
1691             pbbits += nb * bbits;
1692
1693             space = rcc->buffer_fill + (1+nb)*rcc->buffer_rate - rcc->buffer_size;
1694             if( pbbits < space )
1695             {
1696                 q *= X264_MAX( pbbits / space, bits / (0.5 * rcc->buffer_size) );
1697             }
1698             q = X264_MAX( q0-5, q );
1699         }
1700
1701         if( !rcc->b_vbv_min_rate )
1702             q = X264_MAX( q0, q );
1703     }
1704
1705     if(lmin==lmax)
1706         return lmin;
1707     else if(rcc->b_2pass)
1708     {
1709         double min2 = log(lmin);
1710         double max2 = log(lmax);
1711         q = (log(q) - min2)/(max2-min2) - 0.5;
1712         q = 1.0/(1.0 + exp(-4*q));
1713         q = q*(max2-min2) + min2;
1714         return exp(q);
1715     }
1716     else
1717         return x264_clip3f(q, lmin, lmax);
1718 }
1719
1720 // update qscale for 1 frame based on actual bits used so far
1721 static float rate_estimate_qscale( x264_t *h )
1722 {
1723     float q;
1724     x264_ratecontrol_t *rcc = h->rc;
1725     ratecontrol_entry_t rce;
1726     int pict_type = h->sh.i_type;
1727     double lmin = rcc->lmin[pict_type];
1728     double lmax = rcc->lmax[pict_type];
1729     int64_t total_bits = 8*(h->stat.i_frame_size[SLICE_TYPE_I]
1730                           + h->stat.i_frame_size[SLICE_TYPE_P]
1731                           + h->stat.i_frame_size[SLICE_TYPE_B]);
1732
1733     if( rcc->b_2pass )
1734     {
1735         rce = *rcc->rce;
1736         if(pict_type != rce.pict_type)
1737         {
1738             x264_log(h, X264_LOG_ERROR, "slice=%c but 2pass stats say %c\n",
1739                      slice_type_to_char[pict_type], slice_type_to_char[rce.pict_type]);
1740         }
1741     }
1742
1743     if( pict_type == SLICE_TYPE_B )
1744     {
1745         /* B-frames don't have independent ratecontrol, but rather get the
1746          * average QP of the two adjacent P-frames + an offset */
1747
1748         int i0 = IS_X264_TYPE_I(h->fref0[0]->i_type);
1749         int i1 = IS_X264_TYPE_I(h->fref1[0]->i_type);
1750         int dt0 = abs(h->fenc->i_poc - h->fref0[0]->i_poc);
1751         int dt1 = abs(h->fenc->i_poc - h->fref1[0]->i_poc);
1752         float q0 = h->fref0[0]->f_qp_avg_rc;
1753         float q1 = h->fref1[0]->f_qp_avg_rc;
1754
1755         if( h->fref0[0]->i_type == X264_TYPE_BREF )
1756             q0 -= rcc->pb_offset/2;
1757         if( h->fref1[0]->i_type == X264_TYPE_BREF )
1758             q1 -= rcc->pb_offset/2;
1759
1760         if(i0 && i1)
1761             q = (q0 + q1) / 2 + rcc->ip_offset;
1762         else if(i0)
1763             q = q1;
1764         else if(i1)
1765             q = q0;
1766         else
1767             q = (q0*dt1 + q1*dt0) / (dt0 + dt1);
1768
1769         if(h->fenc->b_kept_as_ref)
1770             q += rcc->pb_offset/2;
1771         else
1772             q += rcc->pb_offset;
1773
1774         if( rcc->b_2pass && rcc->b_vbv )
1775             rcc->frame_size_planned = qscale2bits( &rce, q );
1776         else
1777             rcc->frame_size_planned = predict_size( rcc->pred_b_from_p, q, h->fref1[h->i_ref1-1]->i_satd );
1778         h->rc->frame_size_estimated = rcc->frame_size_planned;
1779
1780         /* For row SATDs */
1781         if( rcc->b_vbv )
1782             rcc->last_satd = x264_rc_analyse_slice( h );
1783         return qp2qscale(q);
1784     }
1785     else
1786     {
1787         double abr_buffer = 2 * rcc->rate_tolerance * rcc->bitrate;
1788
1789         if( rcc->b_2pass )
1790         {
1791             int64_t diff;
1792             int64_t predicted_bits = total_bits;
1793             /* Adjust ABR buffer based on distance to the end of the video. */
1794             if( rcc->num_entries > h->fenc->i_frame )
1795                 abr_buffer *= 0.5 * sqrt( rcc->num_entries - h->fenc->i_frame );
1796
1797             if( rcc->b_vbv )
1798             {
1799                 if( h->i_thread_frames > 1 )
1800                 {
1801                     int j = h->rc - h->thread[0]->rc;
1802                     int i;
1803                     for( i=1; i<h->i_thread_frames; i++ )
1804                     {
1805                         x264_t *t = h->thread[ (j+i)%h->i_thread_frames ];
1806                         double bits = t->rc->frame_size_planned;
1807                         if( !t->b_thread_active )
1808                             continue;
1809                         bits  = X264_MAX(bits, t->rc->frame_size_estimated);
1810                         predicted_bits += (int64_t)bits;
1811                     }
1812                 }
1813             }
1814             else
1815             {
1816                 if( h->fenc->i_frame < h->i_thread_frames )
1817                     predicted_bits += (int64_t)h->fenc->i_frame * rcc->bitrate / rcc->fps;
1818                 else
1819                     predicted_bits += (int64_t)(h->i_thread_frames - 1) * rcc->bitrate / rcc->fps;
1820             }
1821
1822             diff = predicted_bits - (int64_t)rce.expected_bits;
1823             q = rce.new_qscale;
1824             q /= x264_clip3f((double)(abr_buffer - diff) / abr_buffer, .5, 2);
1825             if( ((h->fenc->i_frame + 1 - h->i_thread_frames) >= rcc->fps) &&
1826                 (rcc->expected_bits_sum > 0))
1827             {
1828                 /* Adjust quant based on the difference between
1829                  * achieved and expected bitrate so far */
1830                 double time = (double)h->fenc->i_frame / rcc->num_entries;
1831                 double w = x264_clip3f( time*100, 0.0, 1.0 );
1832                 q *= pow( (double)total_bits / rcc->expected_bits_sum, w );
1833             }
1834             if( rcc->b_vbv )
1835             {
1836                 /* Do not overflow vbv */
1837                 double expected_size = qscale2bits(&rce, q);
1838                 double expected_vbv = rcc->buffer_fill + rcc->buffer_rate - expected_size;
1839                 double expected_fullness =  rce.expected_vbv / rcc->buffer_size;
1840                 double qmax = q*(2 - expected_fullness);
1841                 double size_constraint = 1 + expected_fullness;
1842                 qmax = X264_MAX(qmax, rce.new_qscale);
1843                 if (expected_fullness < .05)
1844                     qmax = lmax;
1845                 qmax = X264_MIN(qmax, lmax);
1846                 while( ((expected_vbv < rce.expected_vbv/size_constraint) && (q < qmax)) ||
1847                         ((expected_vbv < 0) && (q < lmax)))
1848                 {
1849                     q *= 1.05;
1850                     expected_size = qscale2bits(&rce, q);
1851                     expected_vbv = rcc->buffer_fill + rcc->buffer_rate - expected_size;
1852                 }
1853                 rcc->last_satd = x264_rc_analyse_slice( h );
1854             }
1855             q = x264_clip3f( q, lmin, lmax );
1856         }
1857         else /* 1pass ABR */
1858         {
1859             /* Calculate the quantizer which would have produced the desired
1860              * average bitrate if it had been applied to all frames so far.
1861              * Then modulate that quant based on the current frame's complexity
1862              * relative to the average complexity so far (using the 2pass RCEQ).
1863              * Then bias the quant up or down if total size so far was far from
1864              * the target.
1865              * Result: Depending on the value of rate_tolerance, there is a
1866              * tradeoff between quality and bitrate precision. But at large
1867              * tolerances, the bit distribution approaches that of 2pass. */
1868
1869             double wanted_bits, overflow=1, lmin, lmax;
1870
1871             rcc->last_satd = x264_rc_analyse_slice( h );
1872             rcc->short_term_cplxsum *= 0.5;
1873             rcc->short_term_cplxcount *= 0.5;
1874             rcc->short_term_cplxsum += rcc->last_satd;
1875             rcc->short_term_cplxcount ++;
1876
1877             rce.tex_bits = rcc->last_satd;
1878             rce.blurred_complexity = rcc->short_term_cplxsum / rcc->short_term_cplxcount;
1879             rce.mv_bits = 0;
1880             rce.p_count = rcc->nmb;
1881             rce.i_count = 0;
1882             rce.s_count = 0;
1883             rce.qscale = 1;
1884             rce.pict_type = pict_type;
1885
1886             if( h->param.rc.i_rc_method == X264_RC_CRF )
1887             {
1888                 q = get_qscale( h, &rce, rcc->rate_factor_constant, h->fenc->i_frame );
1889             }
1890             else
1891             {
1892                 int i_frame_done = h->fenc->i_frame + 1 - h->i_thread_frames;
1893
1894                 q = get_qscale( h, &rce, rcc->wanted_bits_window / rcc->cplxr_sum, h->fenc->i_frame );
1895
1896                 // FIXME is it simpler to keep track of wanted_bits in ratecontrol_end?
1897                 wanted_bits = i_frame_done * rcc->bitrate / rcc->fps;
1898                 if( wanted_bits > 0 )
1899                 {
1900                     abr_buffer *= X264_MAX( 1, sqrt(i_frame_done/25) );
1901                     overflow = x264_clip3f( 1.0 + (total_bits - wanted_bits) / abr_buffer, .5, 2 );
1902                     q *= overflow;
1903                 }
1904             }
1905
1906             if( pict_type == SLICE_TYPE_I && h->param.i_keyint_max > 1
1907                 /* should test _next_ pict type, but that isn't decided yet */
1908                 && rcc->last_non_b_pict_type != SLICE_TYPE_I )
1909             {
1910                 q = qp2qscale( rcc->accum_p_qp / rcc->accum_p_norm );
1911                 q /= fabs( h->param.rc.f_ip_factor );
1912             }
1913             else if( h->i_frame > 0 )
1914             {
1915                 /* Asymmetric clipping, because symmetric would prevent
1916                  * overflow control in areas of rapidly oscillating complexity */
1917                 lmin = rcc->last_qscale_for[pict_type] / rcc->lstep;
1918                 lmax = rcc->last_qscale_for[pict_type] * rcc->lstep;
1919                 if( overflow > 1.1 && h->i_frame > 3 )
1920                     lmax *= rcc->lstep;
1921                 else if( overflow < 0.9 )
1922                     lmin /= rcc->lstep;
1923
1924                 q = x264_clip3f(q, lmin, lmax);
1925             }
1926             else if( h->param.rc.i_rc_method == X264_RC_CRF && rcc->qcompress != 1 )
1927             {
1928                 q = qp2qscale( ABR_INIT_QP ) / fabs( h->param.rc.f_ip_factor );
1929             }
1930             rcc->qp_novbv = qscale2qp(q);
1931
1932             //FIXME use get_diff_limited_q() ?
1933             q = clip_qscale( h, pict_type, q );
1934         }
1935
1936         rcc->last_qscale_for[pict_type] =
1937         rcc->last_qscale = q;
1938
1939         if( !(rcc->b_2pass && !rcc->b_vbv) && h->fenc->i_frame == 0 )
1940             rcc->last_qscale_for[SLICE_TYPE_P] = q * fabs( h->param.rc.f_ip_factor );
1941
1942         if( rcc->b_2pass && rcc->b_vbv )
1943             rcc->frame_size_planned = qscale2bits(&rce, q);
1944         else
1945             rcc->frame_size_planned = predict_size( &rcc->pred[h->sh.i_type], q, rcc->last_satd );
1946
1947         /* Always use up the whole VBV in this case. */
1948         if( rcc->single_frame_vbv )
1949             rcc->frame_size_planned = rcc->buffer_rate;
1950         h->rc->frame_size_estimated = rcc->frame_size_planned;
1951         return q;
1952     }
1953 }
1954
1955 void x264_threads_normalize_predictors( x264_t *h )
1956 {
1957     int i;
1958     double totalsize = 0;
1959     for( i = 0; i < h->param.i_threads; i++ )
1960         totalsize += h->thread[i]->rc->slice_size_planned;
1961     double factor = h->rc->frame_size_planned / totalsize;
1962     for( i = 0; i < h->param.i_threads; i++ )
1963         h->thread[i]->rc->slice_size_planned *= factor;
1964 }
1965
1966 void x264_threads_distribute_ratecontrol( x264_t *h )
1967 {
1968     int i, row;
1969     x264_ratecontrol_t *rc = h->rc;
1970
1971     /* Initialize row predictors */
1972     if( h->i_frame == 0 )
1973         for( i = 0; i < h->param.i_threads; i++ )
1974         {
1975             x264_ratecontrol_t *t = h->thread[i]->rc;
1976             memcpy( t->row_preds, rc->row_preds, sizeof(rc->row_preds) );
1977         }
1978
1979     for( i = 0; i < h->param.i_threads; i++ )
1980     {
1981         x264_t *t = h->thread[i];
1982         memcpy( t->rc, rc, offsetof(x264_ratecontrol_t, row_pred) );
1983         t->rc->row_pred = &t->rc->row_preds[h->sh.i_type];
1984         /* Calculate the planned slice size. */
1985         if( rc->b_vbv && rc->frame_size_planned )
1986         {
1987             int size = 0;
1988             for( row = t->i_threadslice_start; row < t->i_threadslice_end; row++ )
1989                 size += h->fdec->i_row_satd[row];
1990             t->rc->slice_size_planned = predict_size( &rc->pred[h->sh.i_type + (i+1)*5], rc->qpm, size );
1991         }
1992         else
1993             t->rc->slice_size_planned = 0;
1994     }
1995     if( rc->b_vbv && rc->frame_size_planned )
1996     {
1997         x264_threads_normalize_predictors( h );
1998
1999         if( rc->single_frame_vbv )
2000         {
2001             /* Compensate for our max frame error threshold: give more bits (proportionally) to smaller slices. */
2002             for( i = 0; i < h->param.i_threads; i++ )
2003             {
2004                 x264_t *t = h->thread[i];
2005                 t->rc->max_frame_error = X264_MAX( 0.05, 1.0 / (t->i_threadslice_end - t->i_threadslice_start) );
2006                 t->rc->slice_size_planned += 2 * t->rc->max_frame_error * rc->frame_size_planned;
2007             }
2008             x264_threads_normalize_predictors( h );
2009         }
2010
2011         for( i = 0; i < h->param.i_threads; i++ )
2012             h->thread[i]->rc->frame_size_estimated = h->thread[i]->rc->slice_size_planned;
2013     }
2014 }
2015
2016 void x264_threads_merge_ratecontrol( x264_t *h )
2017 {
2018     int i, row;
2019     x264_ratecontrol_t *rc = h->rc;
2020     x264_emms();
2021
2022     for( i = 0; i < h->param.i_threads; i++ )
2023     {
2024         x264_t *t = h->thread[i];
2025         x264_ratecontrol_t *rct = h->thread[i]->rc;
2026         if( h->param.rc.i_vbv_buffer_size )
2027         {
2028             int size = 0;
2029             for( row = t->i_threadslice_start; row < t->i_threadslice_end; row++ )
2030                 size += h->fdec->i_row_satd[row];
2031             int bits = t->stat.frame.i_mv_bits + t->stat.frame.i_tex_bits + t->stat.frame.i_misc_bits;
2032             int mb_count = (t->i_threadslice_end - t->i_threadslice_start) * h->sps->i_mb_width;
2033             update_predictor( &rc->pred[h->sh.i_type+5*i], qp2qscale(rct->qpa_rc/mb_count), size, bits );
2034         }
2035         if( !i )
2036             continue;
2037         rc->qpa_rc += rct->qpa_rc;
2038         rc->qpa_aq += rct->qpa_aq;
2039     }
2040 }
2041
2042 void x264_thread_sync_ratecontrol( x264_t *cur, x264_t *prev, x264_t *next )
2043 {
2044     if( cur != prev )
2045     {
2046 #define COPY(var) memcpy(&cur->rc->var, &prev->rc->var, sizeof(cur->rc->var))
2047         /* these vars are updated in x264_ratecontrol_start()
2048          * so copy them from the context that most recently started (prev)
2049          * to the context that's about to start (cur). */
2050         COPY(accum_p_qp);
2051         COPY(accum_p_norm);
2052         COPY(last_satd);
2053         COPY(last_rceq);
2054         COPY(last_qscale_for);
2055         COPY(last_non_b_pict_type);
2056         COPY(short_term_cplxsum);
2057         COPY(short_term_cplxcount);
2058         COPY(bframes);
2059         COPY(prev_zone);
2060         COPY(qpbuf_pos);
2061         /* these vars can be updated by x264_ratecontrol_init_reconfigurable */
2062         COPY(buffer_rate);
2063         COPY(buffer_size);
2064         COPY(single_frame_vbv);
2065         COPY(cbr_decay);
2066         COPY(b_vbv_min_rate);
2067         COPY(rate_factor_constant);
2068         COPY(bitrate);
2069 #undef COPY
2070     }
2071     if( cur != next )
2072     {
2073 #define COPY(var) next->rc->var = cur->rc->var
2074         /* these vars are updated in x264_ratecontrol_end()
2075          * so copy them from the context that most recently ended (cur)
2076          * to the context that's about to end (next) */
2077         COPY(cplxr_sum);
2078         COPY(expected_bits_sum);
2079         COPY(wanted_bits_window);
2080         COPY(bframe_bits);
2081 #undef COPY
2082     }
2083     //FIXME row_preds[] (not strictly necessary, but would improve prediction)
2084     /* the rest of the variables are either constant or thread-local */
2085 }
2086
2087 static int find_underflow( x264_t *h, double *fills, int *t0, int *t1, int over )
2088 {
2089     /* find an interval ending on an overflow or underflow (depending on whether
2090      * we're adding or removing bits), and starting on the earliest frame that
2091      * can influence the buffer fill of that end frame. */
2092     x264_ratecontrol_t *rcc = h->rc;
2093     const double buffer_min = (over ? .1 : .1) * rcc->buffer_size;
2094     const double buffer_max = .9 * rcc->buffer_size;
2095     double fill = fills[*t0-1];
2096     double parity = over ? 1. : -1.;
2097     int i, start=-1, end=-1;
2098     for(i = *t0; i < rcc->num_entries; i++)
2099     {
2100         fill += (rcc->buffer_rate - qscale2bits(&rcc->entry[i], rcc->entry[i].new_qscale)) * parity;
2101         fill = x264_clip3f(fill, 0, rcc->buffer_size);
2102         fills[i] = fill;
2103         if(fill <= buffer_min || i == 0)
2104         {
2105             if(end >= 0)
2106                 break;
2107             start = i;
2108         }
2109         else if(fill >= buffer_max && start >= 0)
2110             end = i;
2111     }
2112     *t0 = start;
2113     *t1 = end;
2114     return start>=0 && end>=0;
2115 }
2116
2117 static int fix_underflow( x264_t *h, int t0, int t1, double adjustment, double qscale_min, double qscale_max)
2118 {
2119     x264_ratecontrol_t *rcc = h->rc;
2120     double qscale_orig, qscale_new;
2121     int i;
2122     int adjusted = 0;
2123     if(t0 > 0)
2124         t0++;
2125     for(i = t0; i <= t1; i++)
2126     {
2127         qscale_orig = rcc->entry[i].new_qscale;
2128         qscale_orig = x264_clip3f(qscale_orig, qscale_min, qscale_max);
2129         qscale_new  = qscale_orig * adjustment;
2130         qscale_new  = x264_clip3f(qscale_new, qscale_min, qscale_max);
2131         rcc->entry[i].new_qscale = qscale_new;
2132         adjusted = adjusted || (qscale_new != qscale_orig);
2133     }
2134     return adjusted;
2135 }
2136
2137 static double count_expected_bits( x264_t *h )
2138 {
2139     x264_ratecontrol_t *rcc = h->rc;
2140     double expected_bits = 0;
2141     int i;
2142     for(i = 0; i < rcc->num_entries; i++)
2143     {
2144         ratecontrol_entry_t *rce = &rcc->entry[i];
2145         rce->expected_bits = expected_bits;
2146         expected_bits += qscale2bits(rce, rce->new_qscale);
2147     }
2148     return expected_bits;
2149 }
2150
2151 static int vbv_pass2( x264_t *h )
2152 {
2153     /* for each interval of buffer_full .. underflow, uniformly increase the qp of all
2154      * frames in the interval until either buffer is full at some intermediate frame or the
2155      * last frame in the interval no longer underflows.  Recompute intervals and repeat.
2156      * Then do the converse to put bits back into overflow areas until target size is met */
2157
2158     x264_ratecontrol_t *rcc = h->rc;
2159     double *fills;
2160     double all_available_bits = h->param.rc.i_bitrate * 1000. * rcc->num_entries / rcc->fps;
2161     double expected_bits = 0;
2162     double adjustment;
2163     double prev_bits = 0;
2164     int i, t0, t1;
2165     double qscale_min = qp2qscale(h->param.rc.i_qp_min);
2166     double qscale_max = qp2qscale(h->param.rc.i_qp_max);
2167     int iterations = 0;
2168     int adj_min, adj_max;
2169     CHECKED_MALLOC( fills, (rcc->num_entries+1)*sizeof(double) );
2170
2171     fills++;
2172
2173     /* adjust overall stream size */
2174     do
2175     {
2176         iterations++;
2177         prev_bits = expected_bits;
2178
2179         if(expected_bits != 0)
2180         {   /* not first iteration */
2181             adjustment = X264_MAX(X264_MIN(expected_bits / all_available_bits, 0.999), 0.9);
2182             fills[-1] = rcc->buffer_size * h->param.rc.f_vbv_buffer_init;
2183             t0 = 0;
2184             /* fix overflows */
2185             adj_min = 1;
2186             while(adj_min && find_underflow(h, fills, &t0, &t1, 1))
2187             {
2188                 adj_min = fix_underflow(h, t0, t1, adjustment, qscale_min, qscale_max);
2189                 t0 = t1;
2190             }
2191         }
2192
2193         fills[-1] = rcc->buffer_size * (1. - h->param.rc.f_vbv_buffer_init);
2194         t0 = 0;
2195         /* fix underflows -- should be done after overflow, as we'd better undersize target than underflowing VBV */
2196         adj_max = 1;
2197         while(adj_max && find_underflow(h, fills, &t0, &t1, 0))
2198             adj_max = fix_underflow(h, t0, t1, 1.001, qscale_min, qscale_max);
2199
2200         expected_bits = count_expected_bits(h);
2201     } while((expected_bits < .995*all_available_bits) && ((int64_t)(expected_bits+.5) > (int64_t)(prev_bits+.5)) );
2202
2203     if (!adj_max)
2204         x264_log( h, X264_LOG_WARNING, "vbv-maxrate issue, qpmax or vbv-maxrate too low\n");
2205
2206     /* store expected vbv filling values for tracking when encoding */
2207     for(i = 0; i < rcc->num_entries; i++)
2208         rcc->entry[i].expected_vbv = rcc->buffer_size - fills[i];
2209
2210     x264_free(fills-1);
2211     return 0;
2212 fail:
2213     return -1;
2214 }
2215
2216 static int init_pass2( x264_t *h )
2217 {
2218     x264_ratecontrol_t *rcc = h->rc;
2219     uint64_t all_const_bits = 0;
2220     uint64_t all_available_bits = (uint64_t)(h->param.rc.i_bitrate * 1000. * rcc->num_entries / rcc->fps);
2221     double rate_factor, step, step_mult;
2222     double qblur = h->param.rc.f_qblur;
2223     double cplxblur = h->param.rc.f_complexity_blur;
2224     const int filter_size = (int)(qblur*4) | 1;
2225     double expected_bits;
2226     double *qscale, *blurred_qscale;
2227     int i;
2228
2229     /* find total/average complexity & const_bits */
2230     for(i=0; i<rcc->num_entries; i++)
2231     {
2232         ratecontrol_entry_t *rce = &rcc->entry[i];
2233         all_const_bits += rce->misc_bits;
2234     }
2235
2236     if( all_available_bits < all_const_bits)
2237     {
2238         x264_log(h, X264_LOG_ERROR, "requested bitrate is too low. estimated minimum is %d kbps\n",
2239                  (int)(all_const_bits * rcc->fps / (rcc->num_entries * 1000.)));
2240         return -1;
2241     }
2242
2243     /* Blur complexities, to reduce local fluctuation of QP.
2244      * We don't blur the QPs directly, because then one very simple frame
2245      * could drag down the QP of a nearby complex frame and give it more
2246      * bits than intended. */
2247     for(i=0; i<rcc->num_entries; i++)
2248     {
2249         ratecontrol_entry_t *rce = &rcc->entry[i];
2250         double weight_sum = 0;
2251         double cplx_sum = 0;
2252         double weight = 1.0;
2253         double gaussian_weight;
2254         int j;
2255         /* weighted average of cplx of future frames */
2256         for(j=1; j<cplxblur*2 && j<rcc->num_entries-i; j++)
2257         {
2258             ratecontrol_entry_t *rcj = &rcc->entry[i+j];
2259             weight *= 1 - pow( (float)rcj->i_count / rcc->nmb, 2 );
2260             if(weight < .0001)
2261                 break;
2262             gaussian_weight = weight * exp(-j*j/200.0);
2263             weight_sum += gaussian_weight;
2264             cplx_sum += gaussian_weight * (qscale2bits(rcj, 1) - rcj->misc_bits);
2265         }
2266         /* weighted average of cplx of past frames */
2267         weight = 1.0;
2268         for(j=0; j<=cplxblur*2 && j<=i; j++)
2269         {
2270             ratecontrol_entry_t *rcj = &rcc->entry[i-j];
2271             gaussian_weight = weight * exp(-j*j/200.0);
2272             weight_sum += gaussian_weight;
2273             cplx_sum += gaussian_weight * (qscale2bits(rcj, 1) - rcj->misc_bits);
2274             weight *= 1 - pow( (float)rcj->i_count / rcc->nmb, 2 );
2275             if(weight < .0001)
2276                 break;
2277         }
2278         rce->blurred_complexity = cplx_sum / weight_sum;
2279     }
2280
2281     CHECKED_MALLOC( qscale, sizeof(double)*rcc->num_entries );
2282     if( filter_size > 1 )
2283         CHECKED_MALLOC( blurred_qscale, sizeof(double)*rcc->num_entries );
2284     else
2285         blurred_qscale = qscale;
2286
2287     /* Search for a factor which, when multiplied by the RCEQ values from
2288      * each frame, adds up to the desired total size.
2289      * There is no exact closed-form solution because of VBV constraints and
2290      * because qscale2bits is not invertible, but we can start with the simple
2291      * approximation of scaling the 1st pass by the ratio of bitrates.
2292      * The search range is probably overkill, but speed doesn't matter here. */
2293
2294     expected_bits = 1;
2295     for(i=0; i<rcc->num_entries; i++)
2296     {
2297         double q = get_qscale(h, &rcc->entry[i], 1.0, i);
2298         expected_bits += qscale2bits(&rcc->entry[i], q);
2299         rcc->last_qscale_for[rcc->entry[i].pict_type] = q;
2300     }
2301     step_mult = all_available_bits / expected_bits;
2302
2303     rate_factor = 0;
2304     for(step = 1E4 * step_mult; step > 1E-7 * step_mult; step *= 0.5)
2305     {
2306         expected_bits = 0;
2307         rate_factor += step;
2308
2309         rcc->last_non_b_pict_type = -1;
2310         rcc->last_accum_p_norm = 1;
2311         rcc->accum_p_norm = 0;
2312
2313         /* find qscale */
2314         for(i=0; i<rcc->num_entries; i++)
2315         {
2316             qscale[i] = get_qscale(h, &rcc->entry[i], rate_factor, i);
2317             rcc->last_qscale_for[rcc->entry[i].pict_type] = qscale[i];
2318         }
2319
2320         /* fixed I/B qscale relative to P */
2321         for(i=rcc->num_entries-1; i>=0; i--)
2322         {
2323             qscale[i] = get_diff_limited_q(h, &rcc->entry[i], qscale[i]);
2324             assert(qscale[i] >= 0);
2325         }
2326
2327         /* smooth curve */
2328         if(filter_size > 1)
2329         {
2330             assert(filter_size%2==1);
2331             for(i=0; i<rcc->num_entries; i++)
2332             {
2333                 ratecontrol_entry_t *rce = &rcc->entry[i];
2334                 int j;
2335                 double q=0.0, sum=0.0;
2336
2337                 for(j=0; j<filter_size; j++)
2338                 {
2339                     int index = i+j-filter_size/2;
2340                     double d = index-i;
2341                     double coeff = qblur==0 ? 1.0 : exp(-d*d/(qblur*qblur));
2342                     if(index < 0 || index >= rcc->num_entries)
2343                         continue;
2344                     if(rce->pict_type != rcc->entry[index].pict_type)
2345                         continue;
2346                     q += qscale[index] * coeff;
2347                     sum += coeff;
2348                 }
2349                 blurred_qscale[i] = q/sum;
2350             }
2351         }
2352
2353         /* find expected bits */
2354         for(i=0; i<rcc->num_entries; i++)
2355         {
2356             ratecontrol_entry_t *rce = &rcc->entry[i];
2357             rce->new_qscale = clip_qscale(h, rce->pict_type, blurred_qscale[i]);
2358             assert(rce->new_qscale >= 0);
2359             expected_bits += qscale2bits(rce, rce->new_qscale);
2360         }
2361
2362         if(expected_bits > all_available_bits) rate_factor -= step;
2363     }
2364
2365     x264_free(qscale);
2366     if(filter_size > 1)
2367         x264_free(blurred_qscale);
2368
2369     if(rcc->b_vbv)
2370         if( vbv_pass2( h ) )
2371             return -1;
2372     expected_bits = count_expected_bits(h);
2373
2374     if(fabs(expected_bits/all_available_bits - 1.0) > 0.01)
2375     {
2376         double avgq = 0;
2377         for(i=0; i<rcc->num_entries; i++)
2378             avgq += rcc->entry[i].new_qscale;
2379         avgq = qscale2qp(avgq / rcc->num_entries);
2380
2381         if ((expected_bits > all_available_bits) || (!rcc->b_vbv))
2382             x264_log(h, X264_LOG_WARNING, "Error: 2pass curve failed to converge\n");
2383         x264_log(h, X264_LOG_WARNING, "target: %.2f kbit/s, expected: %.2f kbit/s, avg QP: %.4f\n",
2384                  (float)h->param.rc.i_bitrate,
2385                  expected_bits * rcc->fps / (rcc->num_entries * 1000.),
2386                  avgq);
2387         if(expected_bits < all_available_bits && avgq < h->param.rc.i_qp_min + 2)
2388         {
2389             if(h->param.rc.i_qp_min > 0)
2390                 x264_log(h, X264_LOG_WARNING, "try reducing target bitrate or reducing qp_min (currently %d)\n", h->param.rc.i_qp_min);
2391             else
2392                 x264_log(h, X264_LOG_WARNING, "try reducing target bitrate\n");
2393         }
2394         else if(expected_bits > all_available_bits && avgq > h->param.rc.i_qp_max - 2)
2395         {
2396             if(h->param.rc.i_qp_max < 51)
2397                 x264_log(h, X264_LOG_WARNING, "try increasing target bitrate or increasing qp_max (currently %d)\n", h->param.rc.i_qp_max);
2398             else
2399                 x264_log(h, X264_LOG_WARNING, "try increasing target bitrate\n");
2400         }
2401         else if(!(rcc->b_2pass && rcc->b_vbv))
2402             x264_log(h, X264_LOG_WARNING, "internal error\n");
2403     }
2404
2405     return 0;
2406 fail:
2407     return -1;
2408 }