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->common.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->common.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_frame_rate - 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_frame_rate / 2)
    403             kf_boost = (int)(kf_boost
    404                        * cpi->frames_since_key / (cpi->output_frame_rate / 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 Adjustment;
    618     int old_per_frame_bandwidth = cpi->per_frame_bandwidth;
    619 
    620     if ( cpi->current_layer > 0)
    621         cpi->per_frame_bandwidth =
    622             cpi->layer_context[cpi->current_layer].avg_frame_size_for_layer;
    623 
    624     min_frame_target = 0;
    625 
    626     if (cpi->pass == 2)
    627     {
    628         min_frame_target = cpi->min_frame_bandwidth;
    629 
    630         if (min_frame_target < (cpi->av_per_frame_bandwidth >> 5))
    631             min_frame_target = cpi->av_per_frame_bandwidth >> 5;
    632     }
    633     else if (min_frame_target < cpi->per_frame_bandwidth / 4)
    634         min_frame_target = cpi->per_frame_bandwidth / 4;
    635 
    636 
    637     /* Special alt reference frame case */
    638     if((cpi->common.refresh_alt_ref_frame) && (cpi->oxcf.number_of_layers == 1))
    639     {
    640         if (cpi->pass == 2)
    641         {
    642             /* Per frame bit target for the alt ref frame */
    643             cpi->per_frame_bandwidth = cpi->twopass.gf_bits;
    644             cpi->this_frame_target = cpi->per_frame_bandwidth;
    645         }
    646 
    647         /* One Pass ??? TBD */
    648     }
    649 
    650     /* Normal frames (gf,and inter) */
    651     else
    652     {
    653         /* 2 pass */
    654         if (cpi->pass == 2)
    655         {
    656             cpi->this_frame_target = cpi->per_frame_bandwidth;
    657         }
    658         /* 1 pass */
    659         else
    660         {
    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                 int 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->common.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     }
    961 
    962     /* Adjust target frame size for Golden Frames: */
    963     if (cpi->oxcf.error_resilient_mode == 0 &&
    964         (cpi->frames_till_gf_update_due == 0) && !cpi->drop_frame)
    965     {
    966         int Q = (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME] : cpi->oxcf.fixed_q;
    967 
    968         int gf_frame_useage = 0;      /* Golden frame useage since last GF */
    969         int tot_mbs = cpi->recent_ref_frame_usage[INTRA_FRAME]  +
    970                       cpi->recent_ref_frame_usage[LAST_FRAME]   +
    971                       cpi->recent_ref_frame_usage[GOLDEN_FRAME] +
    972                       cpi->recent_ref_frame_usage[ALTREF_FRAME];
    973 
    974         int pct_gf_active = (100 * cpi->gf_active_count) / (cpi->common.mb_rows * cpi->common.mb_cols);
    975 
    976         if (tot_mbs)
    977             gf_frame_useage = (cpi->recent_ref_frame_usage[GOLDEN_FRAME] + cpi->recent_ref_frame_usage[ALTREF_FRAME]) * 100 / tot_mbs;
    978 
    979         if (pct_gf_active > gf_frame_useage)
    980             gf_frame_useage = pct_gf_active;
    981 
    982         /* Is a fixed manual GF frequency being used */
    983         if (cpi->auto_gold)
    984         {
    985             /* For one pass throw a GF if recent frame intra useage is
    986              * low or the GF useage is high
    987              */
    988             if ((cpi->pass == 0) && (cpi->this_frame_percent_intra < 15 || gf_frame_useage >= 5))
    989                 cpi->common.refresh_golden_frame = 1;
    990 
    991             /* Two pass GF descision */
    992             else if (cpi->pass == 2)
    993                 cpi->common.refresh_golden_frame = 1;
    994         }
    995 
    996 #if 0
    997 
    998         /* Debug stats */
    999         if (0)
   1000         {
   1001             FILE *f;
   1002 
   1003             f = fopen("gf_useaget.stt", "a");
   1004             fprintf(f, " %8ld %10ld %10ld %10ld %10ld\n",
   1005                     cpi->common.current_video_frame,  cpi->gfu_boost, GFQ_ADJUSTMENT, cpi->gfu_boost, gf_frame_useage);
   1006             fclose(f);
   1007         }
   1008 
   1009 #endif
   1010 
   1011         if (cpi->common.refresh_golden_frame == 1)
   1012         {
   1013 #if 0
   1014 
   1015             if (0)
   1016             {
   1017                 FILE *f;
   1018 
   1019                 f = fopen("GFexit.stt", "a");
   1020                 fprintf(f, "%8ld GF coded\n", cpi->common.current_video_frame);
   1021                 fclose(f);
   1022             }
   1023 
   1024 #endif
   1025 
   1026             if (cpi->auto_adjust_gold_quantizer)
   1027             {
   1028                 calc_gf_params(cpi);
   1029             }
   1030 
   1031             /* If we are using alternate ref instead of gf then do not apply the
   1032              * boost It will instead be applied to the altref update Jims
   1033              * modified boost
   1034              */
   1035             if (!cpi->source_alt_ref_active)
   1036             {
   1037                 if (cpi->oxcf.fixed_q < 0)
   1038                 {
   1039                     if (cpi->pass == 2)
   1040                     {
   1041                         /* The spend on the GF is defined in the two pass
   1042                          * code for two pass encodes
   1043                          */
   1044                         cpi->this_frame_target = cpi->per_frame_bandwidth;
   1045                     }
   1046                     else
   1047                     {
   1048                         int Boost = cpi->last_boost;
   1049                         int frames_in_section = cpi->frames_till_gf_update_due + 1;
   1050                         int allocation_chunks = (frames_in_section * 100) + (Boost - 100);
   1051                         int bits_in_section = cpi->inter_frame_target * frames_in_section;
   1052 
   1053                         /* Normalize Altboost and allocations chunck down to
   1054                          * prevent overflow
   1055                          */
   1056                         while (Boost > 1000)
   1057                         {
   1058                             Boost /= 2;
   1059                             allocation_chunks /= 2;
   1060                         }
   1061 
   1062                         /* Avoid loss of precision but avoid overflow */
   1063                         if ((bits_in_section >> 7) > allocation_chunks)
   1064                             cpi->this_frame_target = Boost * (bits_in_section / allocation_chunks);
   1065                         else
   1066                             cpi->this_frame_target = (Boost * bits_in_section) / allocation_chunks;
   1067                     }
   1068                 }
   1069                 else
   1070                     cpi->this_frame_target =
   1071                         (estimate_bits_at_q(1, Q, cpi->common.MBs, 1.0)
   1072                          * cpi->last_boost) / 100;
   1073 
   1074             }
   1075             /* If there is an active ARF at this location use the minimum
   1076              * bits on this frame even if it is a contructed arf.
   1077              * The active maximum quantizer insures that an appropriate
   1078              * number of bits will be spent if needed for contstructed ARFs.
   1079              */
   1080             else
   1081             {
   1082                 cpi->this_frame_target = 0;
   1083             }
   1084 
   1085             cpi->current_gf_interval = cpi->frames_till_gf_update_due;
   1086 
   1087         }
   1088     }
   1089 
   1090     cpi->per_frame_bandwidth = old_per_frame_bandwidth;
   1091 }
   1092 
   1093 
   1094 void vp8_update_rate_correction_factors(VP8_COMP *cpi, int damp_var)
   1095 {
   1096     int    Q = cpi->common.base_qindex;
   1097     int    correction_factor = 100;
   1098     double rate_correction_factor;
   1099     double adjustment_limit;
   1100 
   1101     int    projected_size_based_on_q = 0;
   1102 
   1103     /* Clear down mmx registers to allow floating point in what follows */
   1104     vp8_clear_system_state();
   1105 
   1106     if (cpi->common.frame_type == KEY_FRAME)
   1107     {
   1108         rate_correction_factor = cpi->key_frame_rate_correction_factor;
   1109     }
   1110     else
   1111     {
   1112         if (cpi->common.refresh_alt_ref_frame || cpi->common.refresh_golden_frame)
   1113             rate_correction_factor = cpi->gf_rate_correction_factor;
   1114         else
   1115             rate_correction_factor = cpi->rate_correction_factor;
   1116     }
   1117 
   1118     /* Work out how big we would have expected the frame to be at this Q
   1119      * given the current correction factor. Stay in double to avoid int
   1120      * overflow when values are large
   1121      */
   1122     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));
   1123 
   1124     /* Make some allowance for cpi->zbin_over_quant */
   1125     if (cpi->zbin_over_quant > 0)
   1126     {
   1127         int Z = cpi->zbin_over_quant;
   1128         double Factor = 0.99;
   1129         double factor_adjustment = 0.01 / 256.0;
   1130 
   1131         while (Z > 0)
   1132         {
   1133             Z --;
   1134             projected_size_based_on_q =
   1135                 (int)(Factor * projected_size_based_on_q);
   1136             Factor += factor_adjustment;
   1137 
   1138             if (Factor  >= 0.999)
   1139                 Factor = 0.999;
   1140         }
   1141     }
   1142 
   1143     /* Work out a size correction factor. */
   1144     if (projected_size_based_on_q > 0)
   1145         correction_factor = (100 * cpi->projected_frame_size) / projected_size_based_on_q;
   1146 
   1147     /* More heavily damped adjustment used if we have been oscillating
   1148      * either side of target
   1149      */
   1150     switch (damp_var)
   1151     {
   1152     case 0:
   1153         adjustment_limit = 0.75;
   1154         break;
   1155     case 1:
   1156         adjustment_limit = 0.375;
   1157         break;
   1158     case 2:
   1159     default:
   1160         adjustment_limit = 0.25;
   1161         break;
   1162     }
   1163 
   1164     if (correction_factor > 102)
   1165     {
   1166         /* We are not already at the worst allowable quality */
   1167         correction_factor = (int)(100.5 + ((correction_factor - 100) * adjustment_limit));
   1168         rate_correction_factor = ((rate_correction_factor * correction_factor) / 100);
   1169 
   1170         /* Keep rate_correction_factor within limits */
   1171         if (rate_correction_factor > MAX_BPB_FACTOR)
   1172             rate_correction_factor = MAX_BPB_FACTOR;
   1173     }
   1174     else if (correction_factor < 99)
   1175     {
   1176         /* We are not already at the best allowable quality */
   1177         correction_factor = (int)(100.5 - ((100 - correction_factor) * adjustment_limit));
   1178         rate_correction_factor = ((rate_correction_factor * correction_factor) / 100);
   1179 
   1180         /* Keep rate_correction_factor within limits */
   1181         if (rate_correction_factor < MIN_BPB_FACTOR)
   1182             rate_correction_factor = MIN_BPB_FACTOR;
   1183     }
   1184 
   1185     if (cpi->common.frame_type == KEY_FRAME)
   1186         cpi->key_frame_rate_correction_factor = rate_correction_factor;
   1187     else
   1188     {
   1189         if (cpi->common.refresh_alt_ref_frame || cpi->common.refresh_golden_frame)
   1190             cpi->gf_rate_correction_factor = rate_correction_factor;
   1191         else
   1192             cpi->rate_correction_factor = rate_correction_factor;
   1193     }
   1194 }
   1195 
   1196 
   1197 int vp8_regulate_q(VP8_COMP *cpi, int target_bits_per_frame)
   1198 {
   1199     int Q = cpi->active_worst_quality;
   1200 
   1201     /* Reset Zbin OQ value */
   1202     cpi->zbin_over_quant = 0;
   1203 
   1204     if (cpi->oxcf.fixed_q >= 0)
   1205     {
   1206         Q = cpi->oxcf.fixed_q;
   1207 
   1208         if (cpi->common.frame_type == KEY_FRAME)
   1209         {
   1210             Q = cpi->oxcf.key_q;
   1211         }
   1212         else if (cpi->common.refresh_alt_ref_frame)
   1213         {
   1214             Q = cpi->oxcf.alt_q;
   1215         }
   1216         else if (cpi->common.refresh_golden_frame)
   1217         {
   1218             Q = cpi->oxcf.gold_q;
   1219         }
   1220 
   1221     }
   1222     else
   1223     {
   1224         int i;
   1225         int last_error = INT_MAX;
   1226         int target_bits_per_mb;
   1227         int bits_per_mb_at_this_q;
   1228         double correction_factor;
   1229 
   1230         /* Select the appropriate correction factor based upon type of frame. */
   1231         if (cpi->common.frame_type == KEY_FRAME)
   1232             correction_factor = cpi->key_frame_rate_correction_factor;
   1233         else
   1234         {
   1235             if (cpi->common.refresh_alt_ref_frame || cpi->common.refresh_golden_frame)
   1236                 correction_factor = cpi->gf_rate_correction_factor;
   1237             else
   1238                 correction_factor = cpi->rate_correction_factor;
   1239         }
   1240 
   1241         /* Calculate required scaling factor based on target frame size and
   1242          * size of frame produced using previous Q
   1243          */
   1244         if (target_bits_per_frame >= (INT_MAX >> BPER_MB_NORMBITS))
   1245             /* Case where we would overflow int */
   1246             target_bits_per_mb = (target_bits_per_frame / cpi->common.MBs) << BPER_MB_NORMBITS;
   1247         else
   1248             target_bits_per_mb = (target_bits_per_frame << BPER_MB_NORMBITS) / cpi->common.MBs;
   1249 
   1250         i = cpi->active_best_quality;
   1251 
   1252         do
   1253         {
   1254             bits_per_mb_at_this_q = (int)(.5 + correction_factor * vp8_bits_per_mb[cpi->common.frame_type][i]);
   1255 
   1256             if (bits_per_mb_at_this_q <= target_bits_per_mb)
   1257             {
   1258                 if ((target_bits_per_mb - bits_per_mb_at_this_q) <= last_error)
   1259                     Q = i;
   1260                 else
   1261                     Q = i - 1;
   1262 
   1263                 break;
   1264             }
   1265             else
   1266                 last_error = bits_per_mb_at_this_q - target_bits_per_mb;
   1267         }
   1268         while (++i <= cpi->active_worst_quality);
   1269 
   1270 
   1271         /* If we are at MAXQ then enable Q over-run which seeks to claw
   1272          * back additional bits through things like the RD multiplier
   1273          * and zero bin size.
   1274          */
   1275         if (Q >= MAXQ)
   1276         {
   1277             int zbin_oqmax;
   1278 
   1279             double Factor = 0.99;
   1280             double factor_adjustment = 0.01 / 256.0;
   1281 
   1282             if (cpi->common.frame_type == KEY_FRAME)
   1283                 zbin_oqmax = 0;
   1284             else if (cpi->common.refresh_alt_ref_frame || (cpi->common.refresh_golden_frame && !cpi->source_alt_ref_active))
   1285                 zbin_oqmax = 16;
   1286             else
   1287                 zbin_oqmax = ZBIN_OQ_MAX;
   1288 
   1289             /*{
   1290                 double Factor = (double)target_bits_per_mb/(double)bits_per_mb_at_this_q;
   1291                 double Oq;
   1292 
   1293                 Factor = Factor/1.2683;
   1294 
   1295                 Oq = pow( Factor, (1.0/-0.165) );
   1296 
   1297                 if ( Oq > zbin_oqmax )
   1298                     Oq = zbin_oqmax;
   1299 
   1300                 cpi->zbin_over_quant = (int)Oq;
   1301             }*/
   1302 
   1303             /* Each incrment in the zbin is assumed to have a fixed effect
   1304              * on bitrate. This is not of course true. The effect will be
   1305              * highly clip dependent and may well have sudden steps. The
   1306              * idea here is to acheive higher effective quantizers than the
   1307              * normal maximum by expanding the zero bin and hence
   1308              * decreasing the number of low magnitude non zero coefficients.
   1309              */
   1310             while (cpi->zbin_over_quant < zbin_oqmax)
   1311             {
   1312                 cpi->zbin_over_quant ++;
   1313 
   1314                 if (cpi->zbin_over_quant > zbin_oqmax)
   1315                     cpi->zbin_over_quant = zbin_oqmax;
   1316 
   1317                 /* Adjust bits_per_mb_at_this_q estimate */
   1318                 bits_per_mb_at_this_q = (int)(Factor * bits_per_mb_at_this_q);
   1319                 Factor += factor_adjustment;
   1320 
   1321                 if (Factor  >= 0.999)
   1322                     Factor = 0.999;
   1323 
   1324                 /* Break out if we get down to the target rate */
   1325                 if (bits_per_mb_at_this_q <= target_bits_per_mb)
   1326                     break;
   1327             }
   1328 
   1329         }
   1330     }
   1331 
   1332     return Q;
   1333 }
   1334 
   1335 
   1336 static int estimate_keyframe_frequency(VP8_COMP *cpi)
   1337 {
   1338     int i;
   1339 
   1340     /* Average key frame frequency */
   1341     int av_key_frame_frequency = 0;
   1342 
   1343     /* First key frame at start of sequence is a special case. We have no
   1344      * frequency data.
   1345      */
   1346     if (cpi->key_frame_count == 1)
   1347     {
   1348         /* Assume a default of 1 kf every 2 seconds, or the max kf interval,
   1349          * whichever is smaller.
   1350          */
   1351         int key_freq = cpi->oxcf.key_freq>0 ? cpi->oxcf.key_freq : 1;
   1352         av_key_frame_frequency = (int)cpi->output_frame_rate * 2;
   1353 
   1354         if (cpi->oxcf.auto_key && av_key_frame_frequency > key_freq)
   1355             av_key_frame_frequency = cpi->oxcf.key_freq;
   1356 
   1357         cpi->prior_key_frame_distance[KEY_FRAME_CONTEXT - 1]
   1358             = av_key_frame_frequency;
   1359     }
   1360     else
   1361     {
   1362         unsigned int total_weight = 0;
   1363         int last_kf_interval =
   1364                 (cpi->frames_since_key > 0) ? cpi->frames_since_key : 1;
   1365 
   1366         /* reset keyframe context and calculate weighted average of last
   1367          * KEY_FRAME_CONTEXT keyframes
   1368          */
   1369         for (i = 0; i < KEY_FRAME_CONTEXT; i++)
   1370         {
   1371             if (i < KEY_FRAME_CONTEXT - 1)
   1372                 cpi->prior_key_frame_distance[i]
   1373                     = cpi->prior_key_frame_distance[i+1];
   1374             else
   1375                 cpi->prior_key_frame_distance[i] = last_kf_interval;
   1376 
   1377             av_key_frame_frequency += prior_key_frame_weight[i]
   1378                                       * cpi->prior_key_frame_distance[i];
   1379             total_weight += prior_key_frame_weight[i];
   1380         }
   1381 
   1382         av_key_frame_frequency  /= total_weight;
   1383 
   1384     }
   1385     return av_key_frame_frequency;
   1386 }
   1387 
   1388 
   1389 void vp8_adjust_key_frame_context(VP8_COMP *cpi)
   1390 {
   1391     /* Clear down mmx registers to allow floating point in what follows */
   1392     vp8_clear_system_state();
   1393 
   1394     /* Do we have any key frame overspend to recover? */
   1395     /* Two-pass overspend handled elsewhere. */
   1396     if ((cpi->pass != 2)
   1397          && (cpi->projected_frame_size > cpi->per_frame_bandwidth))
   1398     {
   1399         int overspend;
   1400 
   1401         /* Update the count of key frame overspend to be recovered in
   1402          * subsequent frames. A portion of the KF overspend is treated as gf
   1403          * overspend (and hence recovered more quickly) as the kf is also a
   1404          * gf. Otherwise the few frames following each kf tend to get more
   1405          * bits allocated than those following other gfs.
   1406          */
   1407         overspend = (cpi->projected_frame_size - cpi->per_frame_bandwidth);
   1408 
   1409         if (cpi->oxcf.number_of_layers > 1)
   1410             cpi->kf_overspend_bits += overspend;
   1411         else
   1412         {
   1413             cpi->kf_overspend_bits += overspend * 7 / 8;
   1414             cpi->gf_overspend_bits += overspend * 1 / 8;
   1415         }
   1416 
   1417         /* Work out how much to try and recover per frame. */
   1418         cpi->kf_bitrate_adjustment = cpi->kf_overspend_bits
   1419                                      / estimate_keyframe_frequency(cpi);
   1420     }
   1421 
   1422     cpi->frames_since_key = 0;
   1423     cpi->key_frame_count++;
   1424 }
   1425 
   1426 
   1427 void vp8_compute_frame_size_bounds(VP8_COMP *cpi, int *frame_under_shoot_limit, int *frame_over_shoot_limit)
   1428 {
   1429     /* Set-up bounds on acceptable frame size: */
   1430     if (cpi->oxcf.fixed_q >= 0)
   1431     {
   1432         /* Fixed Q scenario: frame size never outranges target
   1433          * (there is no target!)
   1434          */
   1435         *frame_under_shoot_limit = 0;
   1436         *frame_over_shoot_limit  = INT_MAX;
   1437     }
   1438     else
   1439     {
   1440         if (cpi->common.frame_type == KEY_FRAME)
   1441         {
   1442             *frame_over_shoot_limit  = cpi->this_frame_target * 9 / 8;
   1443             *frame_under_shoot_limit = cpi->this_frame_target * 7 / 8;
   1444         }
   1445         else
   1446         {
   1447             if (cpi->oxcf.number_of_layers > 1 ||
   1448                 cpi->common.refresh_alt_ref_frame ||
   1449                 cpi->common.refresh_golden_frame)
   1450             {
   1451                 *frame_over_shoot_limit  = cpi->this_frame_target * 9 / 8;
   1452                 *frame_under_shoot_limit = cpi->this_frame_target * 7 / 8;
   1453             }
   1454             else
   1455             {
   1456                 /* For CBR take buffer fullness into account */
   1457                 if (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER)
   1458                 {
   1459                     if (cpi->buffer_level >= ((cpi->oxcf.optimal_buffer_level + cpi->oxcf.maximum_buffer_size) >> 1))
   1460                     {
   1461                         /* Buffer is too full so relax overshoot and tighten
   1462                          * undershoot
   1463                          */
   1464                         *frame_over_shoot_limit  = cpi->this_frame_target * 12 / 8;
   1465                         *frame_under_shoot_limit = cpi->this_frame_target * 6 / 8;
   1466                     }
   1467                     else if (cpi->buffer_level <= (cpi->oxcf.optimal_buffer_level >> 1))
   1468                     {
   1469                         /* Buffer is too low so relax undershoot and tighten
   1470                          * overshoot
   1471                          */
   1472                         *frame_over_shoot_limit  = cpi->this_frame_target * 10 / 8;
   1473                         *frame_under_shoot_limit = cpi->this_frame_target * 4 / 8;
   1474                     }
   1475                     else
   1476                     {
   1477                         *frame_over_shoot_limit  = cpi->this_frame_target * 11 / 8;
   1478                         *frame_under_shoot_limit = cpi->this_frame_target * 5 / 8;
   1479                     }
   1480                 }
   1481                 /* VBR and CQ mode */
   1482                 /* Note that tighter restrictions here can help quality
   1483                  * but hurt encode speed
   1484                  */
   1485                 else
   1486                 {
   1487                     /* Stron overshoot limit for constrained quality */
   1488                     if (cpi->oxcf.end_usage == USAGE_CONSTRAINED_QUALITY)
   1489                     {
   1490                         *frame_over_shoot_limit  = cpi->this_frame_target * 11 / 8;
   1491                         *frame_under_shoot_limit = cpi->this_frame_target * 2 / 8;
   1492                     }
   1493                     else
   1494                     {
   1495                         *frame_over_shoot_limit  = cpi->this_frame_target * 11 / 8;
   1496                         *frame_under_shoot_limit = cpi->this_frame_target * 5 / 8;
   1497                     }
   1498                 }
   1499             }
   1500         }
   1501 
   1502         /* For very small rate targets where the fractional adjustment
   1503          * (eg * 7/8) may be tiny make sure there is at least a minimum
   1504          * range.
   1505          */
   1506         *frame_over_shoot_limit += 200;
   1507         *frame_under_shoot_limit -= 200;
   1508         if ( *frame_under_shoot_limit < 0 )
   1509             *frame_under_shoot_limit = 0;
   1510 
   1511     }
   1512 }
   1513 
   1514 
   1515 /* return of 0 means drop frame */
   1516 int vp8_pick_frame_size(VP8_COMP *cpi)
   1517 {
   1518     VP8_COMMON *cm = &cpi->common;
   1519 
   1520     if (cm->frame_type == KEY_FRAME)
   1521         calc_iframe_target_size(cpi);
   1522     else
   1523     {
   1524         calc_pframe_target_size(cpi);
   1525 
   1526         /* Check if we're dropping the frame: */
   1527         if (cpi->drop_frame)
   1528         {
   1529             cpi->drop_frame = 0;
   1530             return 0;
   1531         }
   1532     }
   1533     return 1;
   1534 }
   1535