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