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 static 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 
    192 static 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 
    198 static 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 
    213 static const unsigned int prior_key_frame_weight[KEY_FRAME_CONTEXT] = { 1, 2, 3, 4, 5 };
    214 
    215 
    216 void 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 
    255 void 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 
    293 void 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 
    325 static 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 
    341 static 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  */
    440 static 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 
    606 static 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 == (uint32_t)(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 
   1101 void 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 
   1208 int 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 
   1353 static 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 
   1410 void 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 
   1448 void 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 */
   1537 int 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