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