1/*
2 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11
12#include <stdlib.h>
13#include <stdio.h>
14#include <string.h>
15#include <limits.h>
16#include <assert.h>
17
18#include "math.h"
19#include "vp8/common/common.h"
20#include "ratectrl.h"
21#include "vp8/common/entropymode.h"
22#include "vpx_mem/vpx_mem.h"
23#include "vp8/common/systemdependent.h"
24#include "encodemv.h"
25
26
27#define MIN_BPB_FACTOR          0.01
28#define MAX_BPB_FACTOR          50
29
30extern const MB_PREDICTION_MODE vp8_mode_order[MAX_MODES];
31
32
33
34#ifdef MODE_STATS
35extern int y_modes[5];
36extern int uv_modes[4];
37extern int b_modes[10];
38
39extern int inter_y_modes[10];
40extern int inter_uv_modes[4];
41extern int inter_b_modes[10];
42#endif
43
44/* Bits Per MB at different Q (Multiplied by 512) */
45#define BPER_MB_NORMBITS    9
46
47/* Work in progress recalibration of baseline rate tables based on
48 * the assumption that bits per mb is inversely proportional to the
49 * quantizer value.
50 */
51const int vp8_bits_per_mb[2][QINDEX_RANGE] =
52{
53    /* Intra case 450000/Qintra */
54    {
55        1125000,900000, 750000, 642857, 562500, 500000, 450000, 450000,
56        409090, 375000, 346153, 321428, 300000, 281250, 264705, 264705,
57        250000, 236842, 225000, 225000, 214285, 214285, 204545, 204545,
58        195652, 195652, 187500, 180000, 180000, 173076, 166666, 160714,
59        155172, 150000, 145161, 140625, 136363, 132352, 128571, 125000,
60        121621, 121621, 118421, 115384, 112500, 109756, 107142, 104651,
61        102272, 100000, 97826,  97826,  95744,  93750,  91836,  90000,
62        88235,  86538,  84905,  83333,  81818,  80357,  78947,  77586,
63        76271,  75000,  73770,  72580,  71428,  70312,  69230,  68181,
64        67164,  66176,  65217,  64285,  63380,  62500,  61643,  60810,
65        60000,  59210,  59210,  58441,  57692,  56962,  56250,  55555,
66        54878,  54216,  53571,  52941,  52325,  51724,  51136,  50561,
67        49450,  48387,  47368,  46875,  45918,  45000,  44554,  44117,
68        43269,  42452,  41666,  40909,  40178,  39473,  38793,  38135,
69        36885,  36290,  35714,  35156,  34615,  34090,  33582,  33088,
70        32608,  32142,  31468,  31034,  30405,  29801,  29220,  28662,
71    },
72    /* Inter case 285000/Qinter */
73    {
74        712500, 570000, 475000, 407142, 356250, 316666, 285000, 259090,
75        237500, 219230, 203571, 190000, 178125, 167647, 158333, 150000,
76        142500, 135714, 129545, 123913, 118750, 114000, 109615, 105555,
77        101785, 98275,  95000,  91935,  89062,  86363,  83823,  81428,
78        79166,  77027,  75000,  73076,  71250,  69512,  67857,  66279,
79        64772,  63333,  61956,  60638,  59375,  58163,  57000,  55882,
80        54807,  53773,  52777,  51818,  50892,  50000,  49137,  47500,
81        45967,  44531,  43181,  41911,  40714,  39583,  38513,  37500,
82        36538,  35625,  34756,  33928,  33139,  32386,  31666,  30978,
83        30319,  29687,  29081,  28500,  27941,  27403,  26886,  26388,
84        25909,  25446,  25000,  24568,  23949,  23360,  22800,  22265,
85        21755,  21268,  20802,  20357,  19930,  19520,  19127,  18750,
86        18387,  18037,  17701,  17378,  17065,  16764,  16473,  16101,
87        15745,  15405,  15079,  14766,  14467,  14179,  13902,  13636,
88        13380,  13133,  12895,  12666,  12445,  12179,  11924,  11632,
89        11445,  11220,  11003,  10795,  10594,  10401,  10215,  10035,
90    }
91};
92
93static const int kf_boost_qadjustment[QINDEX_RANGE] =
94{
95    128, 129, 130, 131, 132, 133, 134, 135,
96    136, 137, 138, 139, 140, 141, 142, 143,
97    144, 145, 146, 147, 148, 149, 150, 151,
98    152, 153, 154, 155, 156, 157, 158, 159,
99    160, 161, 162, 163, 164, 165, 166, 167,
100    168, 169, 170, 171, 172, 173, 174, 175,
101    176, 177, 178, 179, 180, 181, 182, 183,
102    184, 185, 186, 187, 188, 189, 190, 191,
103    192, 193, 194, 195, 196, 197, 198, 199,
104    200, 200, 201, 201, 202, 203, 203, 203,
105    204, 204, 205, 205, 206, 206, 207, 207,
106    208, 208, 209, 209, 210, 210, 211, 211,
107    212, 212, 213, 213, 214, 214, 215, 215,
108    216, 216, 217, 217, 218, 218, 219, 219,
109    220, 220, 220, 220, 220, 220, 220, 220,
110    220, 220, 220, 220, 220, 220, 220, 220,
111};
112
113/* #define GFQ_ADJUSTMENT (Q+100) */
114#define GFQ_ADJUSTMENT vp8_gf_boost_qadjustment[Q]
115const int vp8_gf_boost_qadjustment[QINDEX_RANGE] =
116{
117    80, 82, 84, 86, 88, 90, 92, 94,
118    96, 97, 98, 99, 100, 101, 102, 103,
119    104, 105, 106, 107, 108, 109, 110, 111,
120    112, 113, 114, 115, 116, 117, 118, 119,
121    120, 121, 122, 123, 124, 125, 126, 127,
122    128, 129, 130, 131, 132, 133, 134, 135,
123    136, 137, 138, 139, 140, 141, 142, 143,
124    144, 145, 146, 147, 148, 149, 150, 151,
125    152, 153, 154, 155, 156, 157, 158, 159,
126    160, 161, 162, 163, 164, 165, 166, 167,
127    168, 169, 170, 171, 172, 173, 174, 175,
128    176, 177, 178, 179, 180, 181, 182, 183,
129    184, 184, 185, 185, 186, 186, 187, 187,
130    188, 188, 189, 189, 190, 190, 191, 191,
131    192, 192, 193, 193, 194, 194, 194, 194,
132    195, 195, 196, 196, 197, 197, 198, 198
133};
134
135/*
136const int vp8_gf_boost_qadjustment[QINDEX_RANGE] =
137{
138    100,101,102,103,104,105,105,106,
139    106,107,107,108,109,109,110,111,
140    112,113,114,115,116,117,118,119,
141    120,121,122,123,124,125,126,127,
142    128,129,130,131,132,133,134,135,
143    136,137,138,139,140,141,142,143,
144    144,145,146,147,148,149,150,151,
145    152,153,154,155,156,157,158,159,
146    160,161,162,163,164,165,166,167,
147    168,169,170,170,171,171,172,172,
148    173,173,173,174,174,174,175,175,
149    175,176,176,176,177,177,177,177,
150    178,178,179,179,180,180,181,181,
151    182,182,183,183,184,184,185,185,
152    186,186,187,187,188,188,189,189,
153    190,190,191,191,192,192,193,193,
154};
155*/
156
157static const int kf_gf_boost_qlimits[QINDEX_RANGE] =
158{
159    150, 155, 160, 165, 170, 175, 180, 185,
160    190, 195, 200, 205, 210, 215, 220, 225,
161    230, 235, 240, 245, 250, 255, 260, 265,
162    270, 275, 280, 285, 290, 295, 300, 305,
163    310, 320, 330, 340, 350, 360, 370, 380,
164    390, 400, 410, 420, 430, 440, 450, 460,
165    470, 480, 490, 500, 510, 520, 530, 540,
166    550, 560, 570, 580, 590, 600, 600, 600,
167    600, 600, 600, 600, 600, 600, 600, 600,
168    600, 600, 600, 600, 600, 600, 600, 600,
169    600, 600, 600, 600, 600, 600, 600, 600,
170    600, 600, 600, 600, 600, 600, 600, 600,
171    600, 600, 600, 600, 600, 600, 600, 600,
172    600, 600, 600, 600, 600, 600, 600, 600,
173    600, 600, 600, 600, 600, 600, 600, 600,
174    600, 600, 600, 600, 600, 600, 600, 600,
175};
176
177static const int gf_adjust_table[101] =
178{
179    100,
180    115, 130, 145, 160, 175, 190, 200, 210, 220, 230,
181    240, 260, 270, 280, 290, 300, 310, 320, 330, 340,
182    350, 360, 370, 380, 390, 400, 400, 400, 400, 400,
183    400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
184    400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
185    400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
186    400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
187    400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
188    400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
189    400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
190};
191
192static const int gf_intra_usage_adjustment[20] =
193{
194    125, 120, 115, 110, 105, 100,  95,  85,  80,  75,
195    70,  65,  60,  55,  50,  50,  50,  50,  50,  50,
196};
197
198static const int gf_interval_table[101] =
199{
200    7,
201    7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
202    7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
203    7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
204    8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
205    8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
206    9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
207    9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
208    10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
209    10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
210    11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
211};
212
213static const unsigned int prior_key_frame_weight[KEY_FRAME_CONTEXT] = { 1, 2, 3, 4, 5 };
214
215
216void vp8_save_coding_context(VP8_COMP *cpi)
217{
218    CODING_CONTEXT *const cc = & cpi->coding_context;
219
220    /* Stores a snapshot of key state variables which can subsequently be
221     * restored with a call to vp8_restore_coding_context. These functions are
222     * intended for use in a re-code loop in vp8_compress_frame where the
223     * quantizer value is adjusted between loop iterations.
224     */
225
226    cc->frames_since_key          = cpi->frames_since_key;
227    cc->filter_level             = cpi->common.filter_level;
228    cc->frames_till_gf_update_due   = cpi->frames_till_gf_update_due;
229    cc->frames_since_golden       = cpi->frames_since_golden;
230
231    vp8_copy(cc->mvc,      cpi->common.fc.mvc);
232    vp8_copy(cc->mvcosts,  cpi->rd_costs.mvcosts);
233
234    vp8_copy(cc->ymode_prob,   cpi->common.fc.ymode_prob);
235    vp8_copy(cc->uv_mode_prob,  cpi->common.fc.uv_mode_prob);
236
237    vp8_copy(cc->ymode_count, cpi->mb.ymode_count);
238    vp8_copy(cc->uv_mode_count, cpi->mb.uv_mode_count);
239
240
241    /* Stats */
242#ifdef MODE_STATS
243    vp8_copy(cc->y_modes,       y_modes);
244    vp8_copy(cc->uv_modes,      uv_modes);
245    vp8_copy(cc->b_modes,       b_modes);
246    vp8_copy(cc->inter_y_modes,  inter_y_modes);
247    vp8_copy(cc->inter_uv_modes, inter_uv_modes);
248    vp8_copy(cc->inter_b_modes,  inter_b_modes);
249#endif
250
251    cc->this_frame_percent_intra = cpi->this_frame_percent_intra;
252}
253
254
255void vp8_restore_coding_context(VP8_COMP *cpi)
256{
257    CODING_CONTEXT *const cc = & cpi->coding_context;
258
259    /* Restore key state variables to the snapshot state stored in the
260     * previous call to vp8_save_coding_context.
261     */
262
263    cpi->frames_since_key         =   cc->frames_since_key;
264    cpi->common.filter_level     =   cc->filter_level;
265    cpi->frames_till_gf_update_due  =   cc->frames_till_gf_update_due;
266    cpi->frames_since_golden       =   cc->frames_since_golden;
267
268    vp8_copy(cpi->common.fc.mvc, cc->mvc);
269
270    vp8_copy(cpi->rd_costs.mvcosts, cc->mvcosts);
271
272    vp8_copy(cpi->common.fc.ymode_prob,   cc->ymode_prob);
273    vp8_copy(cpi->common.fc.uv_mode_prob,  cc->uv_mode_prob);
274
275    vp8_copy(cpi->mb.ymode_count, cc->ymode_count);
276    vp8_copy(cpi->mb.uv_mode_count, cc->uv_mode_count);
277
278    /* Stats */
279#ifdef MODE_STATS
280    vp8_copy(y_modes, cc->y_modes);
281    vp8_copy(uv_modes, cc->uv_modes);
282    vp8_copy(b_modes, cc->b_modes);
283    vp8_copy(inter_y_modes, cc->inter_y_modes);
284    vp8_copy(inter_uv_modes, cc->inter_uv_modes);
285    vp8_copy(inter_b_modes, cc->inter_b_modes);
286#endif
287
288
289    cpi->this_frame_percent_intra = cc->this_frame_percent_intra;
290}
291
292
293void vp8_setup_key_frame(VP8_COMP *cpi)
294{
295    /* Setup for Key frame: */
296
297    vp8_default_coef_probs(& cpi->common);
298
299    vpx_memcpy(cpi->common.fc.mvc, vp8_default_mv_context, sizeof(vp8_default_mv_context));
300    {
301        int flag[2] = {1, 1};
302        vp8_build_component_cost_table(cpi->mb.mvcost, (const MV_CONTEXT *) cpi->common.fc.mvc, flag);
303    }
304
305    /* Make sure we initialize separate contexts for altref,gold, and normal.
306     * TODO shouldn't need 3 different copies of structure to do this!
307     */
308    vpx_memcpy(&cpi->lfc_a, &cpi->common.fc, sizeof(cpi->common.fc));
309    vpx_memcpy(&cpi->lfc_g, &cpi->common.fc, sizeof(cpi->common.fc));
310    vpx_memcpy(&cpi->lfc_n, &cpi->common.fc, sizeof(cpi->common.fc));
311
312    cpi->common.filter_level = cpi->common.base_qindex * 3 / 8 ;
313
314    /* Provisional interval before next GF */
315    if (cpi->auto_gold)
316        cpi->frames_till_gf_update_due = cpi->baseline_gf_interval;
317    else
318        cpi->frames_till_gf_update_due = DEFAULT_GF_INTERVAL;
319
320    cpi->common.refresh_golden_frame = 1;
321    cpi->common.refresh_alt_ref_frame = 1;
322}
323
324
325static int estimate_bits_at_q(int frame_kind, int Q, int MBs,
326                              double correction_factor)
327{
328    int Bpm = (int)(.5 + correction_factor * vp8_bits_per_mb[frame_kind][Q]);
329
330    /* Attempt to retain reasonable accuracy without overflow. The cutoff is
331     * chosen such that the maximum product of Bpm and MBs fits 31 bits. The
332     * largest Bpm takes 20 bits.
333     */
334    if (MBs > (1 << 11))
335        return (Bpm >> BPER_MB_NORMBITS) * MBs;
336    else
337        return (Bpm * MBs) >> BPER_MB_NORMBITS;
338}
339
340
341static void calc_iframe_target_size(VP8_COMP *cpi)
342{
343    /* boost defaults to half second */
344    int kf_boost;
345    uint64_t target;
346
347    /* Clear down mmx registers to allow floating point in what follows */
348    vp8_clear_system_state();
349
350    if (cpi->oxcf.fixed_q >= 0)
351    {
352        int Q = cpi->oxcf.key_q;
353
354        target = estimate_bits_at_q(INTRA_FRAME, Q, cpi->common.MBs,
355                                    cpi->key_frame_rate_correction_factor);
356    }
357    else if (cpi->pass == 2)
358    {
359        /* New Two pass RC */
360        target = cpi->per_frame_bandwidth;
361    }
362    /* First Frame is a special case */
363    else if (cpi->common.current_video_frame == 0)
364    {
365        /* 1 Pass there is no information on which to base size so use
366         * bandwidth per second * fraction of the initial buffer
367         * level
368         */
369        target = cpi->oxcf.starting_buffer_level / 2;
370
371        if(target > cpi->oxcf.target_bandwidth * 3 / 2)
372            target = cpi->oxcf.target_bandwidth * 3 / 2;
373    }
374    else
375    {
376        /* if this keyframe was forced, use a more recent Q estimate */
377        int Q = (cpi->common.frame_flags & FRAMEFLAGS_KEY)
378                ? cpi->avg_frame_qindex : cpi->ni_av_qi;
379
380        int initial_boost = 32; /* |3.0 * per_frame_bandwidth| */
381        /* Boost depends somewhat on frame rate: only used for 1 layer case. */
382        if (cpi->oxcf.number_of_layers == 1) {
383          kf_boost = MAX(initial_boost, (int)(2 * cpi->output_framerate - 16));
384        }
385        else {
386          /* Initial factor: set target size to: |3.0 * per_frame_bandwidth|. */
387          kf_boost = initial_boost;
388        }
389
390        /* adjustment up based on q: this factor ranges from ~1.2 to 2.2. */
391        kf_boost = kf_boost * kf_boost_qadjustment[Q] / 100;
392
393        /* frame separation adjustment ( down) */
394        if (cpi->frames_since_key  < cpi->output_framerate / 2)
395            kf_boost = (int)(kf_boost
396                       * cpi->frames_since_key / (cpi->output_framerate / 2));
397
398        /* Minimal target size is |2* per_frame_bandwidth|. */
399        if (kf_boost < 16)
400            kf_boost = 16;
401
402        target = ((16 + kf_boost) * cpi->per_frame_bandwidth) >> 4;
403    }
404
405
406    if (cpi->oxcf.rc_max_intra_bitrate_pct)
407    {
408        unsigned int max_rate = cpi->per_frame_bandwidth
409                                * cpi->oxcf.rc_max_intra_bitrate_pct / 100;
410
411        if (target > max_rate)
412            target = max_rate;
413    }
414
415    cpi->this_frame_target = (int)target;
416
417    /* TODO: if we separate rate targeting from Q targetting, move this.
418     * Reset the active worst quality to the baseline value for key frames.
419     */
420    if (cpi->pass != 2)
421        cpi->active_worst_quality = cpi->worst_quality;
422
423#if 0
424    {
425        FILE *f;
426
427        f = fopen("kf_boost.stt", "a");
428        fprintf(f, " %8u %10d %10d %10d\n",
429                cpi->common.current_video_frame,  cpi->gfu_boost, cpi->baseline_gf_interval, cpi->source_alt_ref_pending);
430
431        fclose(f);
432    }
433#endif
434}
435
436
437/* Do the best we can to define the parameters for the next GF based on what
438 * information we have available.
439 */
440static void calc_gf_params(VP8_COMP *cpi)
441{
442    int Q = (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME] : cpi->oxcf.fixed_q;
443    int Boost = 0;
444
445    int gf_frame_useage = 0;      /* Golden frame useage since last GF */
446    int tot_mbs = cpi->recent_ref_frame_usage[INTRA_FRAME]  +
447                  cpi->recent_ref_frame_usage[LAST_FRAME]   +
448                  cpi->recent_ref_frame_usage[GOLDEN_FRAME] +
449                  cpi->recent_ref_frame_usage[ALTREF_FRAME];
450
451    int pct_gf_active = (100 * cpi->gf_active_count) / (cpi->common.mb_rows * cpi->common.mb_cols);
452
453    if (tot_mbs)
454        gf_frame_useage = (cpi->recent_ref_frame_usage[GOLDEN_FRAME] + cpi->recent_ref_frame_usage[ALTREF_FRAME]) * 100 / tot_mbs;
455
456    if (pct_gf_active > gf_frame_useage)
457        gf_frame_useage = pct_gf_active;
458
459    /* Not two pass */
460    if (cpi->pass != 2)
461    {
462        /* Single Pass lagged mode: TBD */
463        if (0)
464        {
465        }
466
467        /* Single Pass compression: Has to use current and historical data */
468        else
469        {
470#if 0
471            /* Experimental code */
472            int index = cpi->one_pass_frame_index;
473            int frames_to_scan = (cpi->max_gf_interval <= MAX_LAG_BUFFERS) ? cpi->max_gf_interval : MAX_LAG_BUFFERS;
474
475            /* ************** Experimental code - incomplete */
476            /*
477            double decay_val = 1.0;
478            double IIAccumulator = 0.0;
479            double last_iiaccumulator = 0.0;
480            double IIRatio;
481
482            cpi->one_pass_frame_index = cpi->common.current_video_frame%MAX_LAG_BUFFERS;
483
484            for ( i = 0; i < (frames_to_scan - 1); i++ )
485            {
486                if ( index < 0 )
487                    index = MAX_LAG_BUFFERS;
488                index --;
489
490                if ( cpi->one_pass_frame_stats[index].frame_coded_error > 0.0 )
491                {
492                    IIRatio = cpi->one_pass_frame_stats[index].frame_intra_error / cpi->one_pass_frame_stats[index].frame_coded_error;
493
494                    if ( IIRatio > 30.0 )
495                        IIRatio = 30.0;
496                }
497                else
498                    IIRatio = 30.0;
499
500                IIAccumulator += IIRatio * decay_val;
501
502                decay_val = decay_val * cpi->one_pass_frame_stats[index].frame_pcnt_inter;
503
504                if (    (i > MIN_GF_INTERVAL) &&
505                        ((IIAccumulator - last_iiaccumulator) < 2.0) )
506                {
507                    break;
508                }
509                last_iiaccumulator = IIAccumulator;
510            }
511
512            Boost = IIAccumulator*100.0/16.0;
513            cpi->baseline_gf_interval = i;
514
515            */
516#else
517
518            /*************************************************************/
519            /* OLD code */
520
521            /* Adjust boost based upon ambient Q */
522            Boost = GFQ_ADJUSTMENT;
523
524            /* Adjust based upon most recently measure intra useage */
525            Boost = Boost * gf_intra_usage_adjustment[(cpi->this_frame_percent_intra < 15) ? cpi->this_frame_percent_intra : 14] / 100;
526
527            /* Adjust gf boost based upon GF usage since last GF */
528            Boost = Boost * gf_adjust_table[gf_frame_useage] / 100;
529#endif
530        }
531
532        /* golden frame boost without recode loop often goes awry.  be
533         * safe by keeping numbers down.
534         */
535        if (!cpi->sf.recode_loop)
536        {
537            if (cpi->compressor_speed == 2)
538                Boost = Boost / 2;
539        }
540
541        /* Apply an upper limit based on Q for 1 pass encodes */
542        if (Boost > kf_gf_boost_qlimits[Q] && (cpi->pass == 0))
543            Boost = kf_gf_boost_qlimits[Q];
544
545        /* Apply lower limits to boost. */
546        else if (Boost < 110)
547            Boost = 110;
548
549        /* Note the boost used */
550        cpi->last_boost = Boost;
551
552    }
553
554    /* Estimate next interval
555     * This is updated once the real frame size/boost is known.
556     */
557    if (cpi->oxcf.fixed_q == -1)
558    {
559        if (cpi->pass == 2)         /* 2 Pass */
560        {
561            cpi->frames_till_gf_update_due = cpi->baseline_gf_interval;
562        }
563        else                            /* 1 Pass */
564        {
565            cpi->frames_till_gf_update_due = cpi->baseline_gf_interval;
566
567            if (cpi->last_boost > 750)
568                cpi->frames_till_gf_update_due++;
569
570            if (cpi->last_boost > 1000)
571                cpi->frames_till_gf_update_due++;
572
573            if (cpi->last_boost > 1250)
574                cpi->frames_till_gf_update_due++;
575
576            if (cpi->last_boost >= 1500)
577                cpi->frames_till_gf_update_due ++;
578
579            if (gf_interval_table[gf_frame_useage] > cpi->frames_till_gf_update_due)
580                cpi->frames_till_gf_update_due = gf_interval_table[gf_frame_useage];
581
582            if (cpi->frames_till_gf_update_due > cpi->max_gf_interval)
583                cpi->frames_till_gf_update_due = cpi->max_gf_interval;
584        }
585    }
586    else
587        cpi->frames_till_gf_update_due = cpi->baseline_gf_interval;
588
589    /* ARF on or off */
590    if (cpi->pass != 2)
591    {
592        /* For now Alt ref is not allowed except in 2 pass modes. */
593        cpi->source_alt_ref_pending = 0;
594
595        /*if ( cpi->oxcf.fixed_q == -1)
596        {
597            if ( cpi->oxcf.play_alternate && (cpi->last_boost > (100 + (AF_THRESH*cpi->frames_till_gf_update_due)) ) )
598                cpi->source_alt_ref_pending = 1;
599            else
600                cpi->source_alt_ref_pending = 0;
601        }*/
602    }
603}
604
605
606static void calc_pframe_target_size(VP8_COMP *cpi)
607{
608    int min_frame_target;
609    int old_per_frame_bandwidth = cpi->per_frame_bandwidth;
610
611    if ( cpi->current_layer > 0)
612        cpi->per_frame_bandwidth =
613            cpi->layer_context[cpi->current_layer].avg_frame_size_for_layer;
614
615    min_frame_target = 0;
616
617    if (cpi->pass == 2)
618    {
619        min_frame_target = cpi->min_frame_bandwidth;
620
621        if (min_frame_target < (cpi->av_per_frame_bandwidth >> 5))
622            min_frame_target = cpi->av_per_frame_bandwidth >> 5;
623    }
624    else if (min_frame_target < cpi->per_frame_bandwidth / 4)
625        min_frame_target = cpi->per_frame_bandwidth / 4;
626
627
628    /* Special alt reference frame case */
629    if((cpi->common.refresh_alt_ref_frame) && (cpi->oxcf.number_of_layers == 1))
630    {
631        if (cpi->pass == 2)
632        {
633            /* Per frame bit target for the alt ref frame */
634            cpi->per_frame_bandwidth = cpi->twopass.gf_bits;
635            cpi->this_frame_target = cpi->per_frame_bandwidth;
636        }
637
638        /* One Pass ??? TBD */
639    }
640
641    /* Normal frames (gf,and inter) */
642    else
643    {
644        /* 2 pass */
645        if (cpi->pass == 2)
646        {
647            cpi->this_frame_target = cpi->per_frame_bandwidth;
648        }
649        /* 1 pass */
650        else
651        {
652            int Adjustment;
653            /* Make rate adjustment to recover bits spent in key frame
654             * Test to see if the key frame inter data rate correction
655             * should still be in force
656             */
657            if (cpi->kf_overspend_bits > 0)
658            {
659                Adjustment = (cpi->kf_bitrate_adjustment <= cpi->kf_overspend_bits) ? cpi->kf_bitrate_adjustment : cpi->kf_overspend_bits;
660
661                if (Adjustment > (cpi->per_frame_bandwidth - min_frame_target))
662                    Adjustment = (cpi->per_frame_bandwidth - min_frame_target);
663
664                cpi->kf_overspend_bits -= Adjustment;
665
666                /* Calculate an inter frame bandwidth target for the next
667                 * few frames designed to recover any extra bits spent on
668                 * the key frame.
669                 */
670                cpi->this_frame_target = cpi->per_frame_bandwidth - Adjustment;
671
672                if (cpi->this_frame_target < min_frame_target)
673                    cpi->this_frame_target = min_frame_target;
674            }
675            else
676                cpi->this_frame_target = cpi->per_frame_bandwidth;
677
678            /* If appropriate make an adjustment to recover bits spent on a
679             * recent GF
680             */
681            if ((cpi->gf_overspend_bits > 0) && (cpi->this_frame_target > min_frame_target))
682            {
683                Adjustment = (cpi->non_gf_bitrate_adjustment <= cpi->gf_overspend_bits) ? cpi->non_gf_bitrate_adjustment : cpi->gf_overspend_bits;
684
685                if (Adjustment > (cpi->this_frame_target - min_frame_target))
686                    Adjustment = (cpi->this_frame_target - min_frame_target);
687
688                cpi->gf_overspend_bits -= Adjustment;
689                cpi->this_frame_target -= Adjustment;
690            }
691
692            /* Apply small + and - boosts for non gf frames */
693            if ((cpi->last_boost > 150) && (cpi->frames_till_gf_update_due > 0) &&
694                (cpi->current_gf_interval >= (MIN_GF_INTERVAL << 1)))
695            {
696                /* % Adjustment limited to the range 1% to 10% */
697                Adjustment = (cpi->last_boost - 100) >> 5;
698
699                if (Adjustment < 1)
700                    Adjustment = 1;
701                else if (Adjustment > 10)
702                    Adjustment = 10;
703
704                /* Convert to bits */
705                Adjustment = (cpi->this_frame_target * Adjustment) / 100;
706
707                if (Adjustment > (cpi->this_frame_target - min_frame_target))
708                    Adjustment = (cpi->this_frame_target - min_frame_target);
709
710                if (cpi->frames_since_golden == (cpi->current_gf_interval >> 1))
711                    cpi->this_frame_target += ((cpi->current_gf_interval - 1) * Adjustment);
712                else
713                    cpi->this_frame_target -= Adjustment;
714            }
715        }
716    }
717
718    /* Sanity check that the total sum of adjustments is not above the
719     * maximum allowed That is that having allowed for KF and GF penalties
720     * we have not pushed the current interframe target to low. If the
721     * adjustment we apply here is not capable of recovering all the extra
722     * bits we have spent in the KF or GF then the remainder will have to
723     * be recovered over a longer time span via other buffer / rate control
724     * mechanisms.
725     */
726    if (cpi->this_frame_target < min_frame_target)
727        cpi->this_frame_target = min_frame_target;
728
729    if (!cpi->common.refresh_alt_ref_frame)
730        /* Note the baseline target data rate for this inter frame. */
731        cpi->inter_frame_target = cpi->this_frame_target;
732
733    /* One Pass specific code */
734    if (cpi->pass == 0)
735    {
736        /* Adapt target frame size with respect to any buffering constraints: */
737        if (cpi->buffered_mode)
738        {
739            int one_percent_bits = (int)
740                (1 + cpi->oxcf.optimal_buffer_level / 100);
741
742            if ((cpi->buffer_level < cpi->oxcf.optimal_buffer_level) ||
743                (cpi->bits_off_target < cpi->oxcf.optimal_buffer_level))
744            {
745                int percent_low = 0;
746
747                /* Decide whether or not we need to adjust the frame data
748                 * rate target.
749                 *
750                 * If we are are below the optimal buffer fullness level
751                 * and adherence to buffering constraints is important to
752                 * the end usage then adjust the per frame target.
753                 */
754                if ((cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) &&
755                    (cpi->buffer_level < cpi->oxcf.optimal_buffer_level))
756                {
757                    percent_low = (int)
758                        ((cpi->oxcf.optimal_buffer_level - cpi->buffer_level) /
759                        one_percent_bits);
760                }
761                /* Are we overshooting the long term clip data rate... */
762                else if (cpi->bits_off_target < 0)
763                {
764                    /* Adjust per frame data target downwards to compensate. */
765                    percent_low = (int)(100 * -cpi->bits_off_target /
766                                       (cpi->total_byte_count * 8));
767                }
768
769                if (percent_low > cpi->oxcf.under_shoot_pct)
770                    percent_low = cpi->oxcf.under_shoot_pct;
771                else if (percent_low < 0)
772                    percent_low = 0;
773
774                /* lower the target bandwidth for this frame. */
775                cpi->this_frame_target -=
776                        (cpi->this_frame_target * percent_low) / 200;
777
778                /* Are we using allowing control of active_worst_allowed_q
779                 * according to buffer level.
780                 */
781                if (cpi->auto_worst_q && cpi->ni_frames > 150)
782                {
783                    int64_t critical_buffer_level;
784
785                    /* For streaming applications the most important factor is
786                     * cpi->buffer_level as this takes into account the
787                     * specified short term buffering constraints. However,
788                     * hitting the long term clip data rate target is also
789                     * important.
790                     */
791                    if (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER)
792                    {
793                        /* Take the smaller of cpi->buffer_level and
794                         * cpi->bits_off_target
795                         */
796                        critical_buffer_level =
797                            (cpi->buffer_level < cpi->bits_off_target)
798                            ? cpi->buffer_level : cpi->bits_off_target;
799                    }
800                    /* For local file playback short term buffering constraints
801                     * are less of an issue
802                     */
803                    else
804                    {
805                        /* Consider only how we are doing for the clip as a
806                         * whole
807                         */
808                        critical_buffer_level = cpi->bits_off_target;
809                    }
810
811                    /* Set the active worst quality based upon the selected
812                     * buffer fullness number.
813                     */
814                    if (critical_buffer_level < cpi->oxcf.optimal_buffer_level)
815                    {
816                        if ( critical_buffer_level >
817                             (cpi->oxcf.optimal_buffer_level >> 2) )
818                        {
819                            int64_t qadjustment_range =
820                                      cpi->worst_quality - cpi->ni_av_qi;
821                            int64_t above_base =
822                                      (critical_buffer_level -
823                                       (cpi->oxcf.optimal_buffer_level >> 2));
824
825                            /* Step active worst quality down from
826                             * cpi->ni_av_qi when (critical_buffer_level ==
827                             * cpi->optimal_buffer_level) to
828                             * cpi->worst_quality when
829                             * (critical_buffer_level ==
830                             *     cpi->optimal_buffer_level >> 2)
831                             */
832                            cpi->active_worst_quality =
833                                cpi->worst_quality -
834                                (int)((qadjustment_range * above_base) /
835                                 (cpi->oxcf.optimal_buffer_level*3>>2));
836                        }
837                        else
838                        {
839                            cpi->active_worst_quality = cpi->worst_quality;
840                        }
841                    }
842                    else
843                    {
844                        cpi->active_worst_quality = cpi->ni_av_qi;
845                    }
846                }
847                else
848                {
849                    cpi->active_worst_quality = cpi->worst_quality;
850                }
851            }
852            else
853            {
854                int percent_high = 0;
855
856                if ((cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER)
857                     && (cpi->buffer_level > cpi->oxcf.optimal_buffer_level))
858                {
859                    percent_high = (int)((cpi->buffer_level
860                                    - cpi->oxcf.optimal_buffer_level)
861                                   / one_percent_bits);
862                }
863                else if (cpi->bits_off_target > cpi->oxcf.optimal_buffer_level)
864                {
865                    percent_high = (int)((100 * cpi->bits_off_target)
866                                         / (cpi->total_byte_count * 8));
867                }
868
869                if (percent_high > cpi->oxcf.over_shoot_pct)
870                    percent_high = cpi->oxcf.over_shoot_pct;
871                else if (percent_high < 0)
872                    percent_high = 0;
873
874                cpi->this_frame_target += (cpi->this_frame_target *
875                                          percent_high) / 200;
876
877                /* Are we allowing control of active_worst_allowed_q according
878                 * to buffer level.
879                 */
880                if (cpi->auto_worst_q && cpi->ni_frames > 150)
881                {
882                    /* When using the relaxed buffer model stick to the
883                     * user specified value
884                     */
885                    cpi->active_worst_quality = cpi->ni_av_qi;
886                }
887                else
888                {
889                    cpi->active_worst_quality = cpi->worst_quality;
890                }
891            }
892
893            /* Set active_best_quality to prevent quality rising too high */
894            cpi->active_best_quality = cpi->best_quality;
895
896            /* Worst quality obviously must not be better than best quality */
897            if (cpi->active_worst_quality <= cpi->active_best_quality)
898                cpi->active_worst_quality = cpi->active_best_quality + 1;
899
900            if(cpi->active_worst_quality > 127)
901                cpi->active_worst_quality = 127;
902        }
903        /* Unbuffered mode (eg. video conferencing) */
904        else
905        {
906            /* Set the active worst quality */
907            cpi->active_worst_quality = cpi->worst_quality;
908        }
909
910        /* Special trap for constrained quality mode
911         * "active_worst_quality" may never drop below cq level
912         * for any frame type.
913         */
914        if ( cpi->oxcf.end_usage == USAGE_CONSTRAINED_QUALITY &&
915             cpi->active_worst_quality < cpi->cq_target_quality)
916        {
917            cpi->active_worst_quality = cpi->cq_target_quality;
918        }
919    }
920
921    /* Test to see if we have to drop a frame
922     * The auto-drop frame code is only used in buffered mode.
923     * In unbufferd mode (eg vide conferencing) the descision to
924     * code or drop a frame is made outside the codec in response to real
925     * world comms or buffer considerations.
926     */
927    if (cpi->drop_frames_allowed &&
928        (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) &&
929        ((cpi->common.frame_type != KEY_FRAME)))
930    {
931        /* Check for a buffer underun-crisis in which case we have to drop
932         * a frame
933         */
934        if ((cpi->buffer_level < 0))
935        {
936#if 0
937            FILE *f = fopen("dec.stt", "a");
938            fprintf(f, "%10d %10d %10d %10d ***** BUFFER EMPTY\n",
939                    (int) cpi->common.current_video_frame,
940                    cpi->decimation_factor, cpi->common.horiz_scale,
941                    (cpi->buffer_level * 100) / cpi->oxcf.optimal_buffer_level);
942            fclose(f);
943#endif
944            cpi->drop_frame = 1;
945
946            /* Update the buffer level variable. */
947            cpi->bits_off_target += cpi->av_per_frame_bandwidth;
948            if (cpi->bits_off_target > cpi->oxcf.maximum_buffer_size)
949              cpi->bits_off_target = (int)cpi->oxcf.maximum_buffer_size;
950            cpi->buffer_level = cpi->bits_off_target;
951
952            if (cpi->oxcf.number_of_layers > 1) {
953              unsigned int i;
954
955              // Propagate bits saved by dropping the frame to higher layers.
956              for (i = cpi->current_layer + 1; i < cpi->oxcf.number_of_layers;
957                  i++) {
958                LAYER_CONTEXT *lc = &cpi->layer_context[i];
959                lc->bits_off_target += (int)(lc->target_bandwidth /
960                                             lc->framerate);
961                if (lc->bits_off_target > lc->maximum_buffer_size)
962                  lc->bits_off_target = lc->maximum_buffer_size;
963                lc->buffer_level = lc->bits_off_target;
964              }
965            }
966        }
967    }
968
969    /* Adjust target frame size for Golden Frames: */
970    if (cpi->oxcf.error_resilient_mode == 0 &&
971        (cpi->frames_till_gf_update_due == 0) && !cpi->drop_frame)
972    {
973        int Q = (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME] : cpi->oxcf.fixed_q;
974
975        int gf_frame_useage = 0;      /* Golden frame useage since last GF */
976        int tot_mbs = cpi->recent_ref_frame_usage[INTRA_FRAME]  +
977                      cpi->recent_ref_frame_usage[LAST_FRAME]   +
978                      cpi->recent_ref_frame_usage[GOLDEN_FRAME] +
979                      cpi->recent_ref_frame_usage[ALTREF_FRAME];
980
981        int pct_gf_active = (100 * cpi->gf_active_count) / (cpi->common.mb_rows * cpi->common.mb_cols);
982
983        if (tot_mbs)
984            gf_frame_useage = (cpi->recent_ref_frame_usage[GOLDEN_FRAME] + cpi->recent_ref_frame_usage[ALTREF_FRAME]) * 100 / tot_mbs;
985
986        if (pct_gf_active > gf_frame_useage)
987            gf_frame_useage = pct_gf_active;
988
989        /* Is a fixed manual GF frequency being used */
990        if (cpi->auto_gold)
991        {
992            /* For one pass throw a GF if recent frame intra useage is
993             * low or the GF useage is high
994             */
995            if ((cpi->pass == 0) && (cpi->this_frame_percent_intra < 15 || gf_frame_useage >= 5))
996                cpi->common.refresh_golden_frame = 1;
997
998            /* Two pass GF descision */
999            else if (cpi->pass == 2)
1000                cpi->common.refresh_golden_frame = 1;
1001        }
1002
1003#if 0
1004
1005        /* Debug stats */
1006        if (0)
1007        {
1008            FILE *f;
1009
1010            f = fopen("gf_useaget.stt", "a");
1011            fprintf(f, " %8ld %10ld %10ld %10ld %10ld\n",
1012                    cpi->common.current_video_frame,  cpi->gfu_boost, GFQ_ADJUSTMENT, cpi->gfu_boost, gf_frame_useage);
1013            fclose(f);
1014        }
1015
1016#endif
1017
1018        if (cpi->common.refresh_golden_frame == 1)
1019        {
1020#if 0
1021
1022            if (0)
1023            {
1024                FILE *f;
1025
1026                f = fopen("GFexit.stt", "a");
1027                fprintf(f, "%8ld GF coded\n", cpi->common.current_video_frame);
1028                fclose(f);
1029            }
1030
1031#endif
1032
1033            if (cpi->auto_adjust_gold_quantizer)
1034            {
1035                calc_gf_params(cpi);
1036            }
1037
1038            /* If we are using alternate ref instead of gf then do not apply the
1039             * boost It will instead be applied to the altref update Jims
1040             * modified boost
1041             */
1042            if (!cpi->source_alt_ref_active)
1043            {
1044                if (cpi->oxcf.fixed_q < 0)
1045                {
1046                    if (cpi->pass == 2)
1047                    {
1048                        /* The spend on the GF is defined in the two pass
1049                         * code for two pass encodes
1050                         */
1051                        cpi->this_frame_target = cpi->per_frame_bandwidth;
1052                    }
1053                    else
1054                    {
1055                        int Boost = cpi->last_boost;
1056                        int frames_in_section = cpi->frames_till_gf_update_due + 1;
1057                        int allocation_chunks = (frames_in_section * 100) + (Boost - 100);
1058                        int bits_in_section = cpi->inter_frame_target * frames_in_section;
1059
1060                        /* Normalize Altboost and allocations chunck down to
1061                         * prevent overflow
1062                         */
1063                        while (Boost > 1000)
1064                        {
1065                            Boost /= 2;
1066                            allocation_chunks /= 2;
1067                        }
1068
1069                        /* Avoid loss of precision but avoid overflow */
1070                        if ((bits_in_section >> 7) > allocation_chunks)
1071                            cpi->this_frame_target = Boost * (bits_in_section / allocation_chunks);
1072                        else
1073                            cpi->this_frame_target = (Boost * bits_in_section) / allocation_chunks;
1074                    }
1075                }
1076                else
1077                    cpi->this_frame_target =
1078                        (estimate_bits_at_q(1, Q, cpi->common.MBs, 1.0)
1079                         * cpi->last_boost) / 100;
1080
1081            }
1082            /* If there is an active ARF at this location use the minimum
1083             * bits on this frame even if it is a contructed arf.
1084             * The active maximum quantizer insures that an appropriate
1085             * number of bits will be spent if needed for contstructed ARFs.
1086             */
1087            else
1088            {
1089                cpi->this_frame_target = 0;
1090            }
1091
1092            cpi->current_gf_interval = cpi->frames_till_gf_update_due;
1093
1094        }
1095    }
1096
1097    cpi->per_frame_bandwidth = old_per_frame_bandwidth;
1098}
1099
1100
1101void vp8_update_rate_correction_factors(VP8_COMP *cpi, int damp_var)
1102{
1103    int    Q = cpi->common.base_qindex;
1104    int    correction_factor = 100;
1105    double rate_correction_factor;
1106    double adjustment_limit;
1107
1108    int    projected_size_based_on_q = 0;
1109
1110    /* Clear down mmx registers to allow floating point in what follows */
1111    vp8_clear_system_state();
1112
1113    if (cpi->common.frame_type == KEY_FRAME)
1114    {
1115        rate_correction_factor = cpi->key_frame_rate_correction_factor;
1116    }
1117    else
1118    {
1119        if (cpi->oxcf.number_of_layers == 1 &&
1120           (cpi->common.refresh_alt_ref_frame ||
1121            cpi->common.refresh_golden_frame))
1122            rate_correction_factor = cpi->gf_rate_correction_factor;
1123        else
1124            rate_correction_factor = cpi->rate_correction_factor;
1125    }
1126
1127    /* Work out how big we would have expected the frame to be at this Q
1128     * given the current correction factor. Stay in double to avoid int
1129     * overflow when values are large
1130     */
1131    projected_size_based_on_q = (int)(((.5 + rate_correction_factor * vp8_bits_per_mb[cpi->common.frame_type][Q]) * cpi->common.MBs) / (1 << BPER_MB_NORMBITS));
1132
1133    /* Make some allowance for cpi->zbin_over_quant */
1134    if (cpi->mb.zbin_over_quant > 0)
1135    {
1136        int Z = cpi->mb.zbin_over_quant;
1137        double Factor = 0.99;
1138        double factor_adjustment = 0.01 / 256.0;
1139
1140        while (Z > 0)
1141        {
1142            Z --;
1143            projected_size_based_on_q =
1144                (int)(Factor * projected_size_based_on_q);
1145            Factor += factor_adjustment;
1146
1147            if (Factor  >= 0.999)
1148                Factor = 0.999;
1149        }
1150    }
1151
1152    /* Work out a size correction factor. */
1153    if (projected_size_based_on_q > 0)
1154        correction_factor = (100 * cpi->projected_frame_size) / projected_size_based_on_q;
1155
1156    /* More heavily damped adjustment used if we have been oscillating
1157     * either side of target
1158     */
1159    switch (damp_var)
1160    {
1161    case 0:
1162        adjustment_limit = 0.75;
1163        break;
1164    case 1:
1165        adjustment_limit = 0.375;
1166        break;
1167    case 2:
1168    default:
1169        adjustment_limit = 0.25;
1170        break;
1171    }
1172
1173    if (correction_factor > 102)
1174    {
1175        /* We are not already at the worst allowable quality */
1176        correction_factor = (int)(100.5 + ((correction_factor - 100) * adjustment_limit));
1177        rate_correction_factor = ((rate_correction_factor * correction_factor) / 100);
1178
1179        /* Keep rate_correction_factor within limits */
1180        if (rate_correction_factor > MAX_BPB_FACTOR)
1181            rate_correction_factor = MAX_BPB_FACTOR;
1182    }
1183    else if (correction_factor < 99)
1184    {
1185        /* We are not already at the best allowable quality */
1186        correction_factor = (int)(100.5 - ((100 - correction_factor) * adjustment_limit));
1187        rate_correction_factor = ((rate_correction_factor * correction_factor) / 100);
1188
1189        /* Keep rate_correction_factor within limits */
1190        if (rate_correction_factor < MIN_BPB_FACTOR)
1191            rate_correction_factor = MIN_BPB_FACTOR;
1192    }
1193
1194    if (cpi->common.frame_type == KEY_FRAME)
1195        cpi->key_frame_rate_correction_factor = rate_correction_factor;
1196    else
1197    {
1198        if (cpi->oxcf.number_of_layers == 1 &&
1199           (cpi->common.refresh_alt_ref_frame ||
1200            cpi->common.refresh_golden_frame))
1201            cpi->gf_rate_correction_factor = rate_correction_factor;
1202        else
1203            cpi->rate_correction_factor = rate_correction_factor;
1204    }
1205}
1206
1207
1208int vp8_regulate_q(VP8_COMP *cpi, int target_bits_per_frame)
1209{
1210    int Q = cpi->active_worst_quality;
1211
1212    /* Reset Zbin OQ value */
1213    cpi->mb.zbin_over_quant = 0;
1214
1215    if (cpi->oxcf.fixed_q >= 0)
1216    {
1217        Q = cpi->oxcf.fixed_q;
1218
1219        if (cpi->common.frame_type == KEY_FRAME)
1220        {
1221            Q = cpi->oxcf.key_q;
1222        }
1223        else if (cpi->oxcf.number_of_layers == 1 &&
1224            cpi->common.refresh_alt_ref_frame)
1225        {
1226            Q = cpi->oxcf.alt_q;
1227        }
1228        else if (cpi->oxcf.number_of_layers == 1  &&
1229            cpi->common.refresh_golden_frame)
1230        {
1231            Q = cpi->oxcf.gold_q;
1232        }
1233    }
1234    else
1235    {
1236        int i;
1237        int last_error = INT_MAX;
1238        int target_bits_per_mb;
1239        int bits_per_mb_at_this_q;
1240        double correction_factor;
1241
1242        /* Select the appropriate correction factor based upon type of frame. */
1243        if (cpi->common.frame_type == KEY_FRAME)
1244            correction_factor = cpi->key_frame_rate_correction_factor;
1245        else
1246        {
1247            if (cpi->oxcf.number_of_layers == 1 &&
1248               (cpi->common.refresh_alt_ref_frame ||
1249                cpi->common.refresh_golden_frame))
1250                correction_factor = cpi->gf_rate_correction_factor;
1251            else
1252                correction_factor = cpi->rate_correction_factor;
1253        }
1254
1255        /* Calculate required scaling factor based on target frame size and
1256         * size of frame produced using previous Q
1257         */
1258        if (target_bits_per_frame >= (INT_MAX >> BPER_MB_NORMBITS))
1259            /* Case where we would overflow int */
1260            target_bits_per_mb = (target_bits_per_frame / cpi->common.MBs) << BPER_MB_NORMBITS;
1261        else
1262            target_bits_per_mb = (target_bits_per_frame << BPER_MB_NORMBITS) / cpi->common.MBs;
1263
1264        i = cpi->active_best_quality;
1265
1266        do
1267        {
1268            bits_per_mb_at_this_q = (int)(.5 + correction_factor * vp8_bits_per_mb[cpi->common.frame_type][i]);
1269
1270            if (bits_per_mb_at_this_q <= target_bits_per_mb)
1271            {
1272                if ((target_bits_per_mb - bits_per_mb_at_this_q) <= last_error)
1273                    Q = i;
1274                else
1275                    Q = i - 1;
1276
1277                break;
1278            }
1279            else
1280                last_error = bits_per_mb_at_this_q - target_bits_per_mb;
1281        }
1282        while (++i <= cpi->active_worst_quality);
1283
1284
1285        /* If we are at MAXQ then enable Q over-run which seeks to claw
1286         * back additional bits through things like the RD multiplier
1287         * and zero bin size.
1288         */
1289        if (Q >= MAXQ)
1290        {
1291            int zbin_oqmax;
1292
1293            double Factor = 0.99;
1294            double factor_adjustment = 0.01 / 256.0;
1295
1296            if (cpi->common.frame_type == KEY_FRAME)
1297                zbin_oqmax = 0;
1298            else if (cpi->oxcf.number_of_layers == 1 &&
1299                (cpi->common.refresh_alt_ref_frame ||
1300                (cpi->common.refresh_golden_frame &&
1301                 !cpi->source_alt_ref_active)))
1302                zbin_oqmax = 16;
1303            else
1304                zbin_oqmax = ZBIN_OQ_MAX;
1305
1306            /*{
1307                double Factor = (double)target_bits_per_mb/(double)bits_per_mb_at_this_q;
1308                double Oq;
1309
1310                Factor = Factor/1.2683;
1311
1312                Oq = pow( Factor, (1.0/-0.165) );
1313
1314                if ( Oq > zbin_oqmax )
1315                    Oq = zbin_oqmax;
1316
1317                cpi->zbin_over_quant = (int)Oq;
1318            }*/
1319
1320            /* Each incrment in the zbin is assumed to have a fixed effect
1321             * on bitrate. This is not of course true. The effect will be
1322             * highly clip dependent and may well have sudden steps. The
1323             * idea here is to acheive higher effective quantizers than the
1324             * normal maximum by expanding the zero bin and hence
1325             * decreasing the number of low magnitude non zero coefficients.
1326             */
1327            while (cpi->mb.zbin_over_quant < zbin_oqmax)
1328            {
1329                cpi->mb.zbin_over_quant ++;
1330
1331                if (cpi->mb.zbin_over_quant > zbin_oqmax)
1332                    cpi->mb.zbin_over_quant = zbin_oqmax;
1333
1334                /* Adjust bits_per_mb_at_this_q estimate */
1335                bits_per_mb_at_this_q = (int)(Factor * bits_per_mb_at_this_q);
1336                Factor += factor_adjustment;
1337
1338                if (Factor  >= 0.999)
1339                    Factor = 0.999;
1340
1341                /* Break out if we get down to the target rate */
1342                if (bits_per_mb_at_this_q <= target_bits_per_mb)
1343                    break;
1344            }
1345
1346        }
1347    }
1348
1349    return Q;
1350}
1351
1352
1353static int estimate_keyframe_frequency(VP8_COMP *cpi)
1354{
1355    int i;
1356
1357    /* Average key frame frequency */
1358    int av_key_frame_frequency = 0;
1359
1360    /* First key frame at start of sequence is a special case. We have no
1361     * frequency data.
1362     */
1363    if (cpi->key_frame_count == 1)
1364    {
1365        /* Assume a default of 1 kf every 2 seconds, or the max kf interval,
1366         * whichever is smaller.
1367         */
1368        int key_freq = cpi->oxcf.key_freq>0 ? cpi->oxcf.key_freq : 1;
1369        av_key_frame_frequency = 1 + (int)cpi->output_framerate * 2;
1370
1371        if (cpi->oxcf.auto_key && av_key_frame_frequency > key_freq)
1372            av_key_frame_frequency = key_freq;
1373
1374        cpi->prior_key_frame_distance[KEY_FRAME_CONTEXT - 1]
1375            = av_key_frame_frequency;
1376    }
1377    else
1378    {
1379        unsigned int total_weight = 0;
1380        int last_kf_interval =
1381                (cpi->frames_since_key > 0) ? cpi->frames_since_key : 1;
1382
1383        /* reset keyframe context and calculate weighted average of last
1384         * KEY_FRAME_CONTEXT keyframes
1385         */
1386        for (i = 0; i < KEY_FRAME_CONTEXT; i++)
1387        {
1388            if (i < KEY_FRAME_CONTEXT - 1)
1389                cpi->prior_key_frame_distance[i]
1390                    = cpi->prior_key_frame_distance[i+1];
1391            else
1392                cpi->prior_key_frame_distance[i] = last_kf_interval;
1393
1394            av_key_frame_frequency += prior_key_frame_weight[i]
1395                                      * cpi->prior_key_frame_distance[i];
1396            total_weight += prior_key_frame_weight[i];
1397        }
1398
1399        av_key_frame_frequency  /= total_weight;
1400
1401    }
1402    // TODO (marpan): Given the checks above, |av_key_frame_frequency|
1403    // should always be above 0. But for now we keep the sanity check in.
1404    if (av_key_frame_frequency == 0)
1405        av_key_frame_frequency = 1;
1406    return av_key_frame_frequency;
1407}
1408
1409
1410void vp8_adjust_key_frame_context(VP8_COMP *cpi)
1411{
1412    /* Clear down mmx registers to allow floating point in what follows */
1413    vp8_clear_system_state();
1414
1415    /* Do we have any key frame overspend to recover? */
1416    /* Two-pass overspend handled elsewhere. */
1417    if ((cpi->pass != 2)
1418         && (cpi->projected_frame_size > cpi->per_frame_bandwidth))
1419    {
1420        int overspend;
1421
1422        /* Update the count of key frame overspend to be recovered in
1423         * subsequent frames. A portion of the KF overspend is treated as gf
1424         * overspend (and hence recovered more quickly) as the kf is also a
1425         * gf. Otherwise the few frames following each kf tend to get more
1426         * bits allocated than those following other gfs.
1427         */
1428        overspend = (cpi->projected_frame_size - cpi->per_frame_bandwidth);
1429
1430        if (cpi->oxcf.number_of_layers > 1)
1431            cpi->kf_overspend_bits += overspend;
1432        else
1433        {
1434            cpi->kf_overspend_bits += overspend * 7 / 8;
1435            cpi->gf_overspend_bits += overspend * 1 / 8;
1436        }
1437
1438        /* Work out how much to try and recover per frame. */
1439        cpi->kf_bitrate_adjustment = cpi->kf_overspend_bits
1440                                     / estimate_keyframe_frequency(cpi);
1441    }
1442
1443    cpi->frames_since_key = 0;
1444    cpi->key_frame_count++;
1445}
1446
1447
1448void vp8_compute_frame_size_bounds(VP8_COMP *cpi, int *frame_under_shoot_limit, int *frame_over_shoot_limit)
1449{
1450    /* Set-up bounds on acceptable frame size: */
1451    if (cpi->oxcf.fixed_q >= 0)
1452    {
1453        /* Fixed Q scenario: frame size never outranges target
1454         * (there is no target!)
1455         */
1456        *frame_under_shoot_limit = 0;
1457        *frame_over_shoot_limit  = INT_MAX;
1458    }
1459    else
1460    {
1461        if (cpi->common.frame_type == KEY_FRAME)
1462        {
1463            *frame_over_shoot_limit  = cpi->this_frame_target * 9 / 8;
1464            *frame_under_shoot_limit = cpi->this_frame_target * 7 / 8;
1465        }
1466        else
1467        {
1468            if (cpi->oxcf.number_of_layers > 1 ||
1469                cpi->common.refresh_alt_ref_frame ||
1470                cpi->common.refresh_golden_frame)
1471            {
1472                *frame_over_shoot_limit  = cpi->this_frame_target * 9 / 8;
1473                *frame_under_shoot_limit = cpi->this_frame_target * 7 / 8;
1474            }
1475            else
1476            {
1477                /* For CBR take buffer fullness into account */
1478                if (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER)
1479                {
1480                    if (cpi->buffer_level >= ((cpi->oxcf.optimal_buffer_level + cpi->oxcf.maximum_buffer_size) >> 1))
1481                    {
1482                        /* Buffer is too full so relax overshoot and tighten
1483                         * undershoot
1484                         */
1485                        *frame_over_shoot_limit  = cpi->this_frame_target * 12 / 8;
1486                        *frame_under_shoot_limit = cpi->this_frame_target * 6 / 8;
1487                    }
1488                    else if (cpi->buffer_level <= (cpi->oxcf.optimal_buffer_level >> 1))
1489                    {
1490                        /* Buffer is too low so relax undershoot and tighten
1491                         * overshoot
1492                         */
1493                        *frame_over_shoot_limit  = cpi->this_frame_target * 10 / 8;
1494                        *frame_under_shoot_limit = cpi->this_frame_target * 4 / 8;
1495                    }
1496                    else
1497                    {
1498                        *frame_over_shoot_limit  = cpi->this_frame_target * 11 / 8;
1499                        *frame_under_shoot_limit = cpi->this_frame_target * 5 / 8;
1500                    }
1501                }
1502                /* VBR and CQ mode */
1503                /* Note that tighter restrictions here can help quality
1504                 * but hurt encode speed
1505                 */
1506                else
1507                {
1508                    /* Stron overshoot limit for constrained quality */
1509                    if (cpi->oxcf.end_usage == USAGE_CONSTRAINED_QUALITY)
1510                    {
1511                        *frame_over_shoot_limit  = cpi->this_frame_target * 11 / 8;
1512                        *frame_under_shoot_limit = cpi->this_frame_target * 2 / 8;
1513                    }
1514                    else
1515                    {
1516                        *frame_over_shoot_limit  = cpi->this_frame_target * 11 / 8;
1517                        *frame_under_shoot_limit = cpi->this_frame_target * 5 / 8;
1518                    }
1519                }
1520            }
1521        }
1522
1523        /* For very small rate targets where the fractional adjustment
1524         * (eg * 7/8) may be tiny make sure there is at least a minimum
1525         * range.
1526         */
1527        *frame_over_shoot_limit += 200;
1528        *frame_under_shoot_limit -= 200;
1529        if ( *frame_under_shoot_limit < 0 )
1530            *frame_under_shoot_limit = 0;
1531
1532    }
1533}
1534
1535
1536/* return of 0 means drop frame */
1537int vp8_pick_frame_size(VP8_COMP *cpi)
1538{
1539    VP8_COMMON *cm = &cpi->common;
1540
1541    if (cm->frame_type == KEY_FRAME)
1542        calc_iframe_target_size(cpi);
1543    else
1544    {
1545        calc_pframe_target_size(cpi);
1546
1547        /* Check if we're dropping the frame: */
1548        if (cpi->drop_frame)
1549        {
1550            cpi->drop_frame = 0;
1551            return 0;
1552        }
1553    }
1554    return 1;
1555}
1556