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 "common.h"
     20 #include "ratectrl.h"
     21 #include "entropymode.h"
     22 #include "vpx_mem/vpx_mem.h"
     23 #include "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 const int vp8_bits_per_mb[2][QINDEX_RANGE] =
     49 {
     50     // (Updated 19 March 08) Baseline estimate of INTRA-frame Bits Per MB at each Q:
     51     {
     52         674781, 606845, 553905, 524293, 500428, 452540, 435379, 414719,
     53         390970, 371082, 359416, 341807, 336957, 317263, 303724, 298402,
     54         285688, 275237, 268455, 262560, 256038, 248734, 241087, 237615,
     55         229247, 225211, 219112, 213920, 211559, 202714, 198482, 193401,
     56         187866, 183453, 179212, 175965, 171852, 167235, 163972, 160560,
     57         156032, 154349, 151390, 148725, 145708, 142311, 139981, 137700,
     58         134084, 131863, 129746, 128498, 126077, 123461, 121290, 117782,
     59         114883, 112332, 108410, 105685, 103434, 101192,  98587,  95959,
     60         94059,  92017,  89970,  87936,  86142,  84801,  82736,  81106,
     61         79668,  78135,  76641,  75103,  73943,  72693,  71401,  70098,
     62         69165,  67901,  67170,  65987,  64923,  63534,  62378,  61302,
     63         59921,  58941,  57844,  56782,  55960,  54973,  54257,  53454,
     64         52230,  50938,  49962,  49190,  48288,  47270,  46738,  46037,
     65         45020,  44027,  43216,  42287,  41594,  40702,  40081,  39414,
     66         38282,  37627,  36987,  36375,  35808,  35236,  34710,  34162,
     67         33659,  33327,  32751,  32384,  31936,  31461,  30982,  30582,
     68     },
     69 
     70     // (Updated 19 March 08) Baseline estimate of INTER-frame Bits Per MB at each Q:
     71     {
     72         497401, 426316, 372064, 352732, 335763, 283921, 273848, 253321,
     73         233181, 217727, 210030, 196685, 194836, 178396, 167753, 164116,
     74         154119, 146929, 142254, 138488, 133591, 127741, 123166, 120226,
     75         114188, 111756, 107882, 104749, 102522,  96451,  94424,  90905,
     76         87286,  84931,  82111,  80534,  77610,  74700,  73037,  70715,
     77         68006,  67235,  65374,  64009,  62134,  60180,  59105,  57691,
     78         55509,  54512,  53318,  52693,  51194,  49840,  48944,  46980,
     79         45668,  44177,  42348,  40994,  39859,  38889,  37717,  36391,
     80         35482,  34622,  33795,  32756,  32002,  31492,  30573,  29737,
     81         29152,  28514,  27941,  27356,  26859,  26329,  25874,  25364,
     82         24957,  24510,  24290,  23689,  23380,  22845,  22481,  22066,
     83         21587,  21219,  20880,  20452,  20260,  19926,  19661,  19334,
     84         18915,  18391,  18046,  17833,  17441,  17105,  16888,  16729,
     85         16383,  16023,  15706,  15442,  15222,  14938,  14673,  14452,
     86         14005,  13807,  13611,  13447,  13223,  13102,  12963,  12801,
     87         12627,  12534,  12356,  12228,  12056,  11907,  11746,  11643,
     88     }
     89 };
     90 
     91 const int vp8_kf_boost_qadjustment[QINDEX_RANGE] =
     92 {
     93     128, 129, 130, 131, 132, 133, 134, 135,
     94     136, 137, 138, 139, 140, 141, 142, 143,
     95     144, 145, 146, 147, 148, 149, 150, 151,
     96     152, 153, 154, 155, 156, 157, 158, 159,
     97     160, 161, 162, 163, 164, 165, 166, 167,
     98     168, 169, 170, 171, 172, 173, 174, 175,
     99     176, 177, 178, 179, 180, 181, 182, 183,
    100     184, 185, 186, 187, 188, 189, 190, 191,
    101     192, 193, 194, 195, 196, 197, 198, 199,
    102     200, 200, 201, 201, 202, 203, 203, 203,
    103     204, 204, 205, 205, 206, 206, 207, 207,
    104     208, 208, 209, 209, 210, 210, 211, 211,
    105     212, 212, 213, 213, 214, 214, 215, 215,
    106     216, 216, 217, 217, 218, 218, 219, 219,
    107     220, 220, 220, 220, 220, 220, 220, 220,
    108     220, 220, 220, 220, 220, 220, 220, 220,
    109 };
    110 
    111 //#define GFQ_ADJUSTMENT (Q+100)
    112 #define GFQ_ADJUSTMENT vp8_gf_boost_qadjustment[Q]
    113 const int vp8_gf_boost_qadjustment[QINDEX_RANGE] =
    114 {
    115     80, 82, 84, 86, 88, 90, 92, 94,
    116     96, 97, 98, 99, 100, 101, 102, 103,
    117     104, 105, 106, 107, 108, 109, 110, 111,
    118     112, 113, 114, 115, 116, 117, 118, 119,
    119     120, 121, 122, 123, 124, 125, 126, 127,
    120     128, 129, 130, 131, 132, 133, 134, 135,
    121     136, 137, 138, 139, 140, 141, 142, 143,
    122     144, 145, 146, 147, 148, 149, 150, 151,
    123     152, 153, 154, 155, 156, 157, 158, 159,
    124     160, 161, 162, 163, 164, 165, 166, 167,
    125     168, 169, 170, 171, 172, 173, 174, 175,
    126     176, 177, 178, 179, 180, 181, 182, 183,
    127     184, 184, 185, 185, 186, 186, 187, 187,
    128     188, 188, 189, 189, 190, 190, 191, 191,
    129     192, 192, 193, 193, 194, 194, 194, 194,
    130     195, 195, 196, 196, 197, 197, 198, 198
    131 };
    132 
    133 /*
    134 const int vp8_gf_boost_qadjustment[QINDEX_RANGE] =
    135 {
    136     100,101,102,103,104,105,105,106,
    137     106,107,107,108,109,109,110,111,
    138     112,113,114,115,116,117,118,119,
    139     120,121,122,123,124,125,126,127,
    140     128,129,130,131,132,133,134,135,
    141     136,137,138,139,140,141,142,143,
    142     144,145,146,147,148,149,150,151,
    143     152,153,154,155,156,157,158,159,
    144     160,161,162,163,164,165,166,167,
    145     168,169,170,170,171,171,172,172,
    146     173,173,173,174,174,174,175,175,
    147     175,176,176,176,177,177,177,177,
    148     178,178,179,179,180,180,181,181,
    149     182,182,183,183,184,184,185,185,
    150     186,186,187,187,188,188,189,189,
    151     190,190,191,191,192,192,193,193,
    152 };
    153 */
    154 
    155 const int vp8_kf_gf_boost_qlimits[QINDEX_RANGE] =
    156 {
    157     150, 155, 160, 165, 170, 175, 180, 185,
    158     190, 195, 200, 205, 210, 215, 220, 225,
    159     230, 235, 240, 245, 250, 255, 260, 265,
    160     270, 275, 280, 285, 290, 295, 300, 305,
    161     310, 320, 330, 340, 350, 360, 370, 380,
    162     390, 400, 410, 420, 430, 440, 450, 460,
    163     470, 480, 490, 500, 510, 520, 530, 540,
    164     550, 560, 570, 580, 590, 600, 600, 600,
    165     600, 600, 600, 600, 600, 600, 600, 600,
    166     600, 600, 600, 600, 600, 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 };
    174 
    175 // % adjustment to target kf size based on seperation from previous frame
    176 const int vp8_kf_boost_seperationt_adjustment[16] =
    177 {
    178     30,   40,   50,   55,   60,   65,   70,   75,
    179     80,   85,   90,   95,  100,  100,  100,  100,
    180 };
    181 
    182 
    183 const int vp8_gf_adjust_table[101] =
    184 {
    185     100,
    186     115, 130, 145, 160, 175, 190, 200, 210, 220, 230,
    187     240, 260, 270, 280, 290, 300, 310, 320, 330, 340,
    188     350, 360, 370, 380, 390, 400, 400, 400, 400, 400,
    189     400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
    190     400, 400, 400, 400, 400, 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 };
    197 
    198 const int vp8_gf_intra_useage_adjustment[20] =
    199 {
    200     125, 120, 115, 110, 105, 100,  95,  85,  80,  75,
    201     70,  65,  60,  55,  50,  50,  50,  50,  50,  50,
    202 };
    203 
    204 const int vp8_gf_interval_table[101] =
    205 {
    206     7,
    207     7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    208     7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    209     7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    210     8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
    211     8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
    212     9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
    213     9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
    214     10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
    215     10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
    216     11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
    217 };
    218 
    219 static const unsigned int prior_key_frame_weight[KEY_FRAME_CONTEXT] = { 1, 2, 3, 4, 5 };
    220 
    221 
    222 void vp8_save_coding_context(VP8_COMP *cpi)
    223 {
    224     CODING_CONTEXT *const cc = & cpi->coding_context;
    225 
    226     // Stores a snapshot of key state variables which can subsequently be
    227     // restored with a call to vp8_restore_coding_context. These functions are
    228     // intended for use in a re-code loop in vp8_compress_frame where the
    229     // quantizer value is adjusted between loop iterations.
    230 
    231     cc->frames_since_key          = cpi->frames_since_key;
    232     cc->filter_level             = cpi->common.filter_level;
    233     cc->frames_till_gf_update_due   = cpi->frames_till_gf_update_due;
    234     cc->frames_since_golden       = cpi->common.frames_since_golden;
    235 
    236     vp8_copy(cc->mvc,      cpi->common.fc.mvc);
    237     vp8_copy(cc->mvcosts,  cpi->mb.mvcosts);
    238 
    239     vp8_copy(cc->kf_ymode_prob,   cpi->common.kf_ymode_prob);
    240     vp8_copy(cc->ymode_prob,   cpi->common.fc.ymode_prob);
    241     vp8_copy(cc->kf_uv_mode_prob,  cpi->common.kf_uv_mode_prob);
    242     vp8_copy(cc->uv_mode_prob,  cpi->common.fc.uv_mode_prob);
    243 
    244     vp8_copy(cc->ymode_count, cpi->ymode_count);
    245     vp8_copy(cc->uv_mode_count, cpi->uv_mode_count);
    246 
    247 
    248     // Stats
    249 #ifdef MODE_STATS
    250     vp8_copy(cc->y_modes,       y_modes);
    251     vp8_copy(cc->uv_modes,      uv_modes);
    252     vp8_copy(cc->b_modes,       b_modes);
    253     vp8_copy(cc->inter_y_modes,  inter_y_modes);
    254     vp8_copy(cc->inter_uv_modes, inter_uv_modes);
    255     vp8_copy(cc->inter_b_modes,  inter_b_modes);
    256 #endif
    257 
    258     cc->this_frame_percent_intra = cpi->this_frame_percent_intra;
    259 }
    260 
    261 
    262 void vp8_restore_coding_context(VP8_COMP *cpi)
    263 {
    264     CODING_CONTEXT *const cc = & cpi->coding_context;
    265 
    266     // Restore key state variables to the snapshot state stored in the
    267     // previous call to vp8_save_coding_context.
    268 
    269     cpi->frames_since_key         =   cc->frames_since_key;
    270     cpi->common.filter_level     =   cc->filter_level;
    271     cpi->frames_till_gf_update_due  =   cc->frames_till_gf_update_due;
    272     cpi->common.frames_since_golden       =   cc->frames_since_golden;
    273 
    274     vp8_copy(cpi->common.fc.mvc, cc->mvc);
    275 
    276     vp8_copy(cpi->mb.mvcosts, cc->mvcosts);
    277 
    278     vp8_copy(cpi->common.kf_ymode_prob,   cc->kf_ymode_prob);
    279     vp8_copy(cpi->common.fc.ymode_prob,   cc->ymode_prob);
    280     vp8_copy(cpi->common.kf_uv_mode_prob,  cc->kf_uv_mode_prob);
    281     vp8_copy(cpi->common.fc.uv_mode_prob,  cc->uv_mode_prob);
    282 
    283     vp8_copy(cpi->ymode_count, cc->ymode_count);
    284     vp8_copy(cpi->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     vp8_kf_default_bmode_probs(cpi->common.kf_bmode_prob);
    307 
    308     vpx_memcpy(cpi->common.fc.mvc, vp8_default_mv_context, sizeof(vp8_default_mv_context));
    309     {
    310         int flag[2] = {1, 1};
    311         vp8_build_component_cost_table(cpi->mb.mvcost, cpi->mb.mvsadcost, (const MV_CONTEXT *) cpi->common.fc.mvc, flag);
    312     }
    313 
    314     vpx_memset(cpi->common.fc.pre_mvc, 0, sizeof(cpi->common.fc.pre_mvc));  //initialize pre_mvc to all zero.
    315 
    316     //cpi->common.filter_level = 0;      // Reset every key frame.
    317     cpi->common.filter_level = cpi->common.base_qindex * 3 / 8 ;
    318 
    319     // Provisional interval before next GF
    320     if (cpi->auto_gold)
    321         //cpi->frames_till_gf_update_due = DEFAULT_GF_INTERVAL;
    322         cpi->frames_till_gf_update_due = cpi->baseline_gf_interval;
    323     else
    324         cpi->frames_till_gf_update_due = cpi->goldfreq;
    325 
    326     cpi->common.refresh_golden_frame = TRUE;
    327 }
    328 
    329 void vp8_calc_auto_iframe_target_size(VP8_COMP *cpi)
    330 {
    331     // boost defaults to half second
    332     int kf_boost;
    333 
    334     // Clear down mmx registers to allow floating point in what follows
    335     vp8_clear_system_state();  //__asm emms;
    336 
    337     if (cpi->oxcf.fixed_q >= 0)
    338     {
    339         vp8_calc_iframe_target_size(cpi);
    340         return;
    341     }
    342 
    343     if (cpi->pass == 2)
    344     {
    345         cpi->this_frame_target = cpi->per_frame_bandwidth;      // New Two pass RC
    346     }
    347     else
    348     {
    349         // Boost depends somewhat on frame rate
    350         kf_boost = (int)(2 * cpi->output_frame_rate - 16);
    351 
    352         // adjustment up based on q
    353         kf_boost = kf_boost * vp8_kf_boost_qadjustment[cpi->ni_av_qi] / 100;
    354 
    355         // frame separation adjustment ( down)
    356         if (cpi->frames_since_key  < cpi->output_frame_rate / 2)
    357             kf_boost = (int)(kf_boost * cpi->frames_since_key / (cpi->output_frame_rate / 2));
    358 
    359         if (kf_boost < 16)
    360             kf_boost = 16;
    361 
    362         // Reset the active worst quality to the baseline value for key frames.
    363         cpi->active_worst_quality = cpi->worst_quality;
    364 
    365         cpi->this_frame_target = ((16 + kf_boost)  * cpi->per_frame_bandwidth) >> 4;
    366     }
    367 
    368 
    369     // Should the next frame be an altref frame
    370     if (cpi->pass != 2)
    371     {
    372         // For now Alt ref is not allowed except in 2 pass modes.
    373         cpi->source_alt_ref_pending = FALSE;
    374 
    375         /*if ( cpi->oxcf.fixed_q == -1)
    376         {
    377             if ( cpi->oxcf.play_alternate && ( (cpi->last_boost/2) > (100+(AF_THRESH*cpi->frames_till_gf_update_due)) ) )
    378                 cpi->source_alt_ref_pending = TRUE;
    379             else
    380                 cpi->source_alt_ref_pending = FALSE;
    381         }*/
    382     }
    383 
    384     if (0)
    385     {
    386         FILE *f;
    387 
    388         f = fopen("kf_boost.stt", "a");
    389         //fprintf(f, " %8d %10d %10d %10d %10d %10d %10d\n",
    390         //  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 );
    391 
    392         fprintf(f, " %8u %10d %10d %10d\n",
    393                 cpi->common.current_video_frame,  cpi->gfu_boost, cpi->baseline_gf_interval, cpi->source_alt_ref_pending);
    394 
    395         fclose(f);
    396     }
    397 }
    398 
    399 //  Do the best we can to define the parameteres for the next GF based on what information we have available.
    400 static void calc_gf_params(VP8_COMP *cpi)
    401 {
    402     int Q = (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME] : cpi->oxcf.fixed_q;
    403     int Boost = 0;
    404 
    405     int gf_frame_useage = 0;      // Golden frame useage since last GF
    406     int tot_mbs = cpi->recent_ref_frame_usage[INTRA_FRAME]  +
    407                   cpi->recent_ref_frame_usage[LAST_FRAME]   +
    408                   cpi->recent_ref_frame_usage[GOLDEN_FRAME] +
    409                   cpi->recent_ref_frame_usage[ALTREF_FRAME];
    410 
    411     int pct_gf_active = (100 * cpi->gf_active_count) / (cpi->common.mb_rows * cpi->common.mb_cols);
    412 
    413     // Reset the last boost indicator
    414     //cpi->last_boost = 100;
    415 
    416     if (tot_mbs)
    417         gf_frame_useage = (cpi->recent_ref_frame_usage[GOLDEN_FRAME] + cpi->recent_ref_frame_usage[ALTREF_FRAME]) * 100 / tot_mbs;
    418 
    419     if (pct_gf_active > gf_frame_useage)
    420         gf_frame_useage = pct_gf_active;
    421 
    422     // Not two pass
    423     if (cpi->pass != 2)
    424     {
    425         // Single Pass lagged mode: TBD
    426         if (FALSE)
    427         {
    428         }
    429 
    430         // Single Pass compression: Has to use current and historical data
    431         else
    432         {
    433 #if 0
    434             // Experimental code
    435             int index = cpi->one_pass_frame_index;
    436             int frames_to_scan = (cpi->max_gf_interval <= MAX_LAG_BUFFERS) ? cpi->max_gf_interval : MAX_LAG_BUFFERS;
    437 
    438             /*
    439             // *************** Experimental code - incomplete
    440             double decay_val = 1.0;
    441             double IIAccumulator = 0.0;
    442             double last_iiaccumulator = 0.0;
    443             double IIRatio;
    444 
    445             cpi->one_pass_frame_index = cpi->common.current_video_frame%MAX_LAG_BUFFERS;
    446 
    447             for ( i = 0; i < (frames_to_scan - 1); i++ )
    448             {
    449                 if ( index < 0 )
    450                     index = MAX_LAG_BUFFERS;
    451                 index --;
    452 
    453                 if ( cpi->one_pass_frame_stats[index].frame_coded_error > 0.0 )
    454                 {
    455                     IIRatio = cpi->one_pass_frame_stats[index].frame_intra_error / cpi->one_pass_frame_stats[index].frame_coded_error;
    456 
    457                     if ( IIRatio > 30.0 )
    458                         IIRatio = 30.0;
    459                 }
    460                 else
    461                     IIRatio = 30.0;
    462 
    463                 IIAccumulator += IIRatio * decay_val;
    464 
    465                 decay_val = decay_val * cpi->one_pass_frame_stats[index].frame_pcnt_inter;
    466 
    467                 if (    (i > MIN_GF_INTERVAL) &&
    468                         ((IIAccumulator - last_iiaccumulator) < 2.0) )
    469                 {
    470                     break;
    471                 }
    472                 last_iiaccumulator = IIAccumulator;
    473             }
    474 
    475             Boost = IIAccumulator*100.0/16.0;
    476             cpi->baseline_gf_interval = i;
    477 
    478             */
    479 #else
    480 
    481             /*************************************************************/
    482             // OLD code
    483 
    484             // Adjust boost based upon ambient Q
    485             Boost = GFQ_ADJUSTMENT;
    486 
    487             // Adjust based upon most recently measure intra useage
    488             Boost = Boost * vp8_gf_intra_useage_adjustment[(cpi->this_frame_percent_intra < 15) ? cpi->this_frame_percent_intra : 14] / 100;
    489 
    490             // Adjust gf boost based upon GF usage since last GF
    491             Boost = Boost * vp8_gf_adjust_table[gf_frame_useage] / 100;
    492 #endif
    493         }
    494 
    495         // golden frame boost without recode loop often goes awry.  be safe by keeping numbers down.
    496         if (!cpi->sf.recode_loop)
    497         {
    498             if (cpi->compressor_speed == 2)
    499                 Boost = Boost / 2;
    500         }
    501 
    502         // Apply an upper limit based on Q for 1 pass encodes
    503         if (Boost > vp8_kf_gf_boost_qlimits[Q] && (cpi->pass == 0))
    504             Boost = vp8_kf_gf_boost_qlimits[Q];
    505 
    506         // Apply lower limits to boost.
    507         else if (Boost < 110)
    508             Boost = 110;
    509 
    510         // Note the boost used
    511         cpi->last_boost = Boost;
    512 
    513     }
    514 
    515     // Estimate next interval
    516     // This is updated once the real frame size/boost is known.
    517     if (cpi->oxcf.fixed_q == -1)
    518     {
    519         if (cpi->pass == 2)         // 2 Pass
    520         {
    521             cpi->frames_till_gf_update_due = cpi->baseline_gf_interval;
    522         }
    523         else                            // 1 Pass
    524         {
    525             cpi->frames_till_gf_update_due = cpi->baseline_gf_interval;
    526 
    527             if (cpi->last_boost > 750)
    528                 cpi->frames_till_gf_update_due++;
    529 
    530             if (cpi->last_boost > 1000)
    531                 cpi->frames_till_gf_update_due++;
    532 
    533             if (cpi->last_boost > 1250)
    534                 cpi->frames_till_gf_update_due++;
    535 
    536             if (cpi->last_boost >= 1500)
    537                 cpi->frames_till_gf_update_due ++;
    538 
    539             if (vp8_gf_interval_table[gf_frame_useage] > cpi->frames_till_gf_update_due)
    540                 cpi->frames_till_gf_update_due = vp8_gf_interval_table[gf_frame_useage];
    541 
    542             if (cpi->frames_till_gf_update_due > cpi->max_gf_interval)
    543                 cpi->frames_till_gf_update_due = cpi->max_gf_interval;
    544         }
    545     }
    546     else
    547         cpi->frames_till_gf_update_due = cpi->baseline_gf_interval;
    548 
    549     // ARF on or off
    550     if (cpi->pass != 2)
    551     {
    552         // For now Alt ref is not allowed except in 2 pass modes.
    553         cpi->source_alt_ref_pending = FALSE;
    554 
    555         /*if ( cpi->oxcf.fixed_q == -1)
    556         {
    557             if ( cpi->oxcf.play_alternate && (cpi->last_boost > (100 + (AF_THRESH*cpi->frames_till_gf_update_due)) ) )
    558                 cpi->source_alt_ref_pending = TRUE;
    559             else
    560                 cpi->source_alt_ref_pending = FALSE;
    561         }*/
    562     }
    563 }
    564 /* This is equvialent to estimate_bits_at_q without the rate_correction_factor. */
    565 static int baseline_bits_at_q(int frame_kind, int Q, int MBs)
    566 {
    567     int Bpm = vp8_bits_per_mb[frame_kind][Q];
    568 
    569     /* Attempt to retain reasonable accuracy without overflow. The cutoff is
    570      * chosen such that the maximum product of Bpm and MBs fits 31 bits. The
    571      * largest Bpm takes 20 bits.
    572      */
    573     if (MBs > (1 << 11))
    574         return (Bpm >> BPER_MB_NORMBITS) * MBs;
    575     else
    576         return (Bpm * MBs) >> BPER_MB_NORMBITS;
    577 }
    578 
    579 void vp8_calc_iframe_target_size(VP8_COMP *cpi)
    580 {
    581     int Q;
    582     int Boost = 100;
    583 
    584     Q = (cpi->oxcf.fixed_q >= 0) ? cpi->oxcf.fixed_q : cpi->avg_frame_qindex;
    585 
    586     if (cpi->auto_adjust_key_quantizer == 1)
    587     {
    588         // If (auto_adjust_key_quantizer==1) then a lower Q is selected for key-frames.
    589         // The enhanced Q is calculated so as to boost the key frame size by a factor
    590         // specified in kf_boost_qadjustment. Also, can adjust based on distance
    591         // between key frames.
    592 
    593         // Adjust boost based upon ambient Q
    594         Boost = vp8_kf_boost_qadjustment[Q];
    595 
    596         // Make the Key frame boost less if the seperation from the previous key frame is small
    597         if (cpi->frames_since_key < 16)
    598             Boost = Boost * vp8_kf_boost_seperationt_adjustment[cpi->frames_since_key] / 100;
    599         else
    600             Boost = Boost * vp8_kf_boost_seperationt_adjustment[15] / 100;
    601 
    602         // Apply limits on boost
    603         if (Boost > vp8_kf_gf_boost_qlimits[Q])
    604             Boost = vp8_kf_gf_boost_qlimits[Q];
    605         else if (Boost < 120)
    606             Boost = 120;
    607     }
    608 
    609     // Keep a record of the boost that was used
    610     cpi->last_boost = Boost;
    611 
    612     // Should the next frame be an altref frame
    613     if (cpi->pass != 2)
    614     {
    615         // For now Alt ref is not allowed except in 2 pass modes.
    616         cpi->source_alt_ref_pending = FALSE;
    617 
    618         /*if ( cpi->oxcf.fixed_q == -1)
    619         {
    620             if ( cpi->oxcf.play_alternate && ( (cpi->last_boost/2) > (100+(AF_THRESH*cpi->frames_till_gf_update_due)) ) )
    621                 cpi->source_alt_ref_pending = TRUE;
    622             else
    623                 cpi->source_alt_ref_pending = FALSE;
    624         }*/
    625     }
    626 
    627     if (cpi->oxcf.fixed_q >= 0)
    628     {
    629         cpi->this_frame_target = (baseline_bits_at_q(0, Q, cpi->common.MBs) * Boost) / 100;
    630     }
    631     else
    632     {
    633 
    634         int bits_per_mb_at_this_q ;
    635 
    636         if (cpi->oxcf.error_resilient_mode == 1)
    637         {
    638             cpi->this_frame_target = 2 * cpi->av_per_frame_bandwidth;
    639             return;
    640         }
    641 
    642         // Rate targetted scenario:
    643         // Be careful of 32-bit OVERFLOW if restructuring the caluclation of cpi->this_frame_target
    644         bits_per_mb_at_this_q = (int)(.5 +
    645                                       cpi->key_frame_rate_correction_factor * vp8_bits_per_mb[0][Q]);
    646 
    647         cpi->this_frame_target = (((bits_per_mb_at_this_q * cpi->common.MBs) >> BPER_MB_NORMBITS) * Boost) / 100;
    648 
    649         // Reset the active worst quality to the baseline value for key frames.
    650         if (cpi->pass < 2)
    651             cpi->active_worst_quality = cpi->worst_quality;
    652     }
    653 }
    654 
    655 
    656 
    657 void vp8_calc_pframe_target_size(VP8_COMP *cpi)
    658 {
    659     int min_frame_target;
    660     int Adjustment;
    661 
    662     // Set the min frame bandwidth.
    663     //min_frame_target = estimate_min_frame_size( cpi );
    664     min_frame_target = 0;
    665 
    666     if (cpi->pass == 2)
    667     {
    668         min_frame_target = cpi->min_frame_bandwidth;
    669 
    670         if (min_frame_target < (cpi->av_per_frame_bandwidth >> 5))
    671             min_frame_target = cpi->av_per_frame_bandwidth >> 5;
    672     }
    673     else if (min_frame_target < cpi->per_frame_bandwidth / 4)
    674         min_frame_target = cpi->per_frame_bandwidth / 4;
    675 
    676 
    677     // Special alt reference frame case
    678     if (cpi->common.refresh_alt_ref_frame)
    679     {
    680         if (cpi->pass == 2)
    681         {
    682             cpi->per_frame_bandwidth = cpi->gf_bits;                       // Per frame bit target for the alt ref frame
    683             cpi->this_frame_target = cpi->per_frame_bandwidth;
    684         }
    685 
    686         /* One Pass ??? TBD */
    687         /*else
    688         {
    689             int frames_in_section;
    690             int allocation_chunks;
    691             int Q = (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME] : cpi->oxcf.fixed_q;
    692             int alt_boost;
    693             int max_arf_rate;
    694 
    695             alt_boost = (cpi->gfu_boost * 3 * GFQ_ADJUSTMENT) / (2 * 100);
    696             alt_boost += (cpi->frames_till_gf_update_due * 50);
    697 
    698             // If alt ref is not currently active then we have a pottential double hit with GF and ARF so reduce the boost a bit.
    699             // A similar thing is done on GFs that preceed a arf update.
    700             if ( !cpi->source_alt_ref_active )
    701                 alt_boost = alt_boost * 3 / 4;
    702 
    703             frames_in_section = cpi->frames_till_gf_update_due+1;                                   // Standard frames + GF
    704             allocation_chunks = (frames_in_section * 100) + alt_boost;
    705 
    706             // Normalize Altboost and allocations chunck down to prevent overflow
    707             while ( alt_boost > 1000 )
    708             {
    709                 alt_boost /= 2;
    710                 allocation_chunks /= 2;
    711             }
    712 
    713             else
    714             {
    715                 int bits_in_section;
    716 
    717                 if ( cpi->kf_overspend_bits > 0 )
    718                 {
    719                     Adjustment = (cpi->kf_bitrate_adjustment <= cpi->kf_overspend_bits) ? cpi->kf_bitrate_adjustment : cpi->kf_overspend_bits;
    720 
    721                     if ( Adjustment > (cpi->per_frame_bandwidth - min_frame_target) )
    722                         Adjustment = (cpi->per_frame_bandwidth - min_frame_target);
    723 
    724                     cpi->kf_overspend_bits -= Adjustment;
    725 
    726                     // Calculate an inter frame bandwidth target for the next few frames designed to recover
    727                     // any extra bits spent on the key frame.
    728                     cpi->inter_frame_target = cpi->per_frame_bandwidth - Adjustment;
    729                     if ( cpi->inter_frame_target < min_frame_target )
    730                         cpi->inter_frame_target = min_frame_target;
    731                 }
    732                 else
    733                     cpi->inter_frame_target = cpi->per_frame_bandwidth;
    734 
    735                 bits_in_section = cpi->inter_frame_target * frames_in_section;
    736 
    737                 // Avoid loss of precision but avoid overflow
    738                 if ( (bits_in_section>>7) > allocation_chunks )
    739                     cpi->this_frame_target = alt_boost * (bits_in_section / allocation_chunks);
    740                 else
    741                     cpi->this_frame_target = (alt_boost * bits_in_section) / allocation_chunks;
    742             }
    743         }
    744         */
    745     }
    746 
    747     // Normal frames (gf,and inter)
    748     else
    749     {
    750         // 2 pass
    751         if (cpi->pass == 2)
    752         {
    753             cpi->this_frame_target = cpi->per_frame_bandwidth;
    754         }
    755         // 1 pass
    756         else
    757         {
    758             // Make rate adjustment to recover bits spent in key frame
    759             // Test to see if the key frame inter data rate correction should still be in force
    760             if (cpi->kf_overspend_bits > 0)
    761             {
    762                 Adjustment = (cpi->kf_bitrate_adjustment <= cpi->kf_overspend_bits) ? cpi->kf_bitrate_adjustment : cpi->kf_overspend_bits;
    763 
    764                 if (Adjustment > (cpi->per_frame_bandwidth - min_frame_target))
    765                     Adjustment = (cpi->per_frame_bandwidth - min_frame_target);
    766 
    767                 cpi->kf_overspend_bits -= Adjustment;
    768 
    769                 // Calculate an inter frame bandwidth target for the next few frames designed to recover
    770                 // any extra bits spent on the key frame.
    771                 cpi->this_frame_target = cpi->per_frame_bandwidth - Adjustment;
    772 
    773                 if (cpi->this_frame_target < min_frame_target)
    774                     cpi->this_frame_target = min_frame_target;
    775             }
    776             else
    777                 cpi->this_frame_target = cpi->per_frame_bandwidth;
    778 
    779             // If appropriate make an adjustment to recover bits spent on a recent GF
    780             if ((cpi->gf_overspend_bits > 0) && (cpi->this_frame_target > min_frame_target))
    781             {
    782                 int Adjustment = (cpi->non_gf_bitrate_adjustment <= cpi->gf_overspend_bits) ? cpi->non_gf_bitrate_adjustment : cpi->gf_overspend_bits;
    783 
    784                 if (Adjustment > (cpi->this_frame_target - min_frame_target))
    785                     Adjustment = (cpi->this_frame_target - min_frame_target);
    786 
    787                 cpi->gf_overspend_bits -= Adjustment;
    788                 cpi->this_frame_target -= Adjustment;
    789             }
    790 
    791             // Apply small + and - boosts for non gf frames
    792             if ((cpi->last_boost > 150) && (cpi->frames_till_gf_update_due > 0) &&
    793                 (cpi->current_gf_interval >= (MIN_GF_INTERVAL << 1)))
    794             {
    795                 // % Adjustment limited to the range 1% to 10%
    796                 Adjustment = (cpi->last_boost - 100) >> 5;
    797 
    798                 if (Adjustment < 1)
    799                     Adjustment = 1;
    800                 else if (Adjustment > 10)
    801                     Adjustment = 10;
    802 
    803                 // Convert to bits
    804                 Adjustment = (cpi->this_frame_target * Adjustment) / 100;
    805 
    806                 if (Adjustment > (cpi->this_frame_target - min_frame_target))
    807                     Adjustment = (cpi->this_frame_target - min_frame_target);
    808 
    809                 if (cpi->common.frames_since_golden == (cpi->current_gf_interval >> 1))
    810                     cpi->this_frame_target += ((cpi->current_gf_interval - 1) * Adjustment);
    811                 else
    812                     cpi->this_frame_target -= Adjustment;
    813             }
    814         }
    815     }
    816 
    817     // Set a reduced data rate target for our initial Q calculation.
    818     // This should help to save bits during earier sections.
    819     if ((cpi->oxcf.under_shoot_pct > 0) && (cpi->oxcf.under_shoot_pct <= 100))
    820         cpi->this_frame_target = (cpi->this_frame_target * cpi->oxcf.under_shoot_pct) / 100;
    821 
    822     // Sanity check that the total sum of adjustments is not above the maximum allowed
    823     // That is that having allowed for KF and GF penalties we have not pushed the
    824     // current interframe target to low. If the adjustment we apply here is not capable of recovering
    825     // all the extra bits we have spent in the KF or GF then the remainder will have to be recovered over
    826     // a longer time span via other buffer / rate control mechanisms.
    827     if (cpi->this_frame_target < min_frame_target)
    828         cpi->this_frame_target = min_frame_target;
    829 
    830     if (!cpi->common.refresh_alt_ref_frame)
    831         // Note the baseline target data rate for this inter frame.
    832         cpi->inter_frame_target = cpi->this_frame_target;
    833 
    834     // One Pass specific code
    835     if (cpi->pass == 0)
    836     {
    837         // Adapt target frame size with respect to any buffering constraints:
    838         if (cpi->buffered_mode)
    839         {
    840             int one_percent_bits = 1 + cpi->oxcf.optimal_buffer_level / 100;
    841 
    842             if ((cpi->buffer_level < cpi->oxcf.optimal_buffer_level) || (cpi->bits_off_target < cpi->oxcf.optimal_buffer_level))
    843             {
    844                 int percent_low = 0;
    845 
    846                 // Decide whether or not we need to adjust the frame data rate target.
    847                 //
    848                 // If we are are below the optimal buffer fullness level and adherence
    849                 // to buffering contraints is important to the end useage then adjust
    850                 // the per frame target.
    851                 if ((cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) && (cpi->buffer_level < cpi->oxcf.optimal_buffer_level))
    852                 {
    853                     percent_low = (cpi->oxcf.optimal_buffer_level - cpi->buffer_level) / one_percent_bits;
    854 
    855                     if (percent_low > 100)
    856                         percent_low = 100;
    857                     else if (percent_low < 0)
    858                         percent_low = 0;
    859                 }
    860                 // Are we overshooting the long term clip data rate...
    861                 else if (cpi->bits_off_target < 0)
    862                 {
    863                     // Adjust per frame data target downwards to compensate.
    864                     percent_low = (int)(100 * -cpi->bits_off_target / (cpi->total_byte_count * 8));
    865 
    866                     if (percent_low > 100)
    867                         percent_low = 100;
    868                     else if (percent_low < 0)
    869                         percent_low = 0;
    870                 }
    871 
    872                 // lower the target bandwidth for this frame.
    873                 cpi->this_frame_target = (cpi->this_frame_target * (100 - (percent_low / 2))) / 100;
    874 
    875                 // Are we using allowing control of active_worst_allowed_q according to buffer level.
    876                 if (cpi->auto_worst_q)
    877                 {
    878                     int critical_buffer_level;
    879 
    880                     // For streaming applications the most important factor is cpi->buffer_level as this takes
    881                     // into account the specified short term buffering constraints. However, hitting the long
    882                     // term clip data rate target is also important.
    883                     if (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER)
    884                     {
    885                         // Take the smaller of cpi->buffer_level and cpi->bits_off_target
    886                         critical_buffer_level = (cpi->buffer_level < cpi->bits_off_target) ? cpi->buffer_level : cpi->bits_off_target;
    887                     }
    888                     // For local file playback short term buffering contraints are less of an issue
    889                     else
    890                     {
    891                         // Consider only how we are doing for the clip as a whole
    892                         critical_buffer_level = cpi->bits_off_target;
    893                     }
    894 
    895                     // Set the active worst quality based upon the selected buffer fullness number.
    896                     if (critical_buffer_level < cpi->oxcf.optimal_buffer_level)
    897                     {
    898                         if (critical_buffer_level > (cpi->oxcf.optimal_buffer_level / 4))
    899                         {
    900                             int qadjustment_range = cpi->worst_quality - cpi->ni_av_qi;
    901                             int above_base = (critical_buffer_level - (cpi->oxcf.optimal_buffer_level / 4));
    902 
    903                             // Step active worst quality down from cpi->ni_av_qi when (critical_buffer_level == cpi->optimal_buffer_level)
    904                             // to cpi->oxcf.worst_allowed_q when (critical_buffer_level == cpi->optimal_buffer_level/4)
    905                             cpi->active_worst_quality = cpi->worst_quality - ((qadjustment_range * above_base) / (cpi->oxcf.optimal_buffer_level * 3 / 4));
    906                         }
    907                         else
    908                         {
    909                             cpi->active_worst_quality = cpi->worst_quality;
    910                         }
    911                     }
    912                     else
    913                     {
    914                         cpi->active_worst_quality = cpi->ni_av_qi;
    915                     }
    916                 }
    917                 else
    918                 {
    919                     cpi->active_worst_quality = cpi->worst_quality;
    920                 }
    921             }
    922             else
    923             {
    924                 int percent_high;
    925 
    926                 if (cpi->bits_off_target > cpi->oxcf.optimal_buffer_level)
    927                 {
    928                     percent_high = (int)(100 * (cpi->bits_off_target - cpi->oxcf.optimal_buffer_level) / (cpi->total_byte_count * 8));
    929 
    930                     if (percent_high > 100)
    931                         percent_high = 100;
    932                     else if (percent_high < 0)
    933                         percent_high = 0;
    934 
    935                     cpi->this_frame_target = (cpi->this_frame_target * (100 + (percent_high / 2))) / 100;
    936 
    937                 }
    938 
    939                 // Are we allowing control of active_worst_allowed_q according to bufferl level.
    940                 if (cpi->auto_worst_q)
    941                 {
    942                     // When using the relaxed buffer model stick to the user specified value
    943                     cpi->active_worst_quality = cpi->ni_av_qi;
    944                 }
    945                 else
    946                 {
    947                     cpi->active_worst_quality = cpi->worst_quality;
    948                 }
    949             }
    950 
    951             // Set active_best_quality to prevent quality rising too high
    952             cpi->active_best_quality = cpi->best_quality;
    953 
    954             // Worst quality obviously must not be better than best quality
    955             if (cpi->active_worst_quality <= cpi->active_best_quality)
    956                 cpi->active_worst_quality = cpi->active_best_quality + 1;
    957 
    958         }
    959         // Unbuffered mode (eg. video conferencing)
    960         else
    961         {
    962             // Set the active worst quality
    963             cpi->active_worst_quality = cpi->worst_quality;
    964         }
    965     }
    966 
    967     // Test to see if we have to drop a frame
    968     // The auto-drop frame code is only used in buffered mode.
    969     // In unbufferd mode (eg vide conferencing) the descision to
    970     // code or drop a frame is made outside the codec in response to real
    971     // world comms or buffer considerations.
    972     if (cpi->drop_frames_allowed && cpi->buffered_mode &&
    973         (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) &&
    974         ((cpi->common.frame_type != KEY_FRAME))) //|| !cpi->oxcf.allow_spatial_resampling) )
    975     {
    976         // Check for a buffer underun-crisis in which case we have to drop a frame
    977         if ((cpi->buffer_level < 0))
    978         {
    979 #if 0
    980             FILE *f = fopen("dec.stt", "a");
    981             fprintf(f, "%10d %10d %10d %10d ***** BUFFER EMPTY\n",
    982                     (int) cpi->common.current_video_frame,
    983                     cpi->decimation_factor, cpi->common.horiz_scale,
    984                     (cpi->buffer_level * 100) / cpi->oxcf.optimal_buffer_level);
    985             fclose(f);
    986 #endif
    987             //vpx_log("Decoder: Drop frame due to bandwidth: %d \n",cpi->buffer_level, cpi->av_per_frame_bandwidth);
    988 
    989             cpi->drop_frame = TRUE;
    990         }
    991 
    992 #if 0
    993         // Check for other drop frame crtieria (Note 2 pass cbr uses decimation on whole KF sections)
    994         else if ((cpi->buffer_level < cpi->oxcf.drop_frames_water_mark * cpi->oxcf.optimal_buffer_level / 100) &&
    995                  (cpi->drop_count < cpi->max_drop_count) && (cpi->pass == 0))
    996         {
    997             cpi->drop_frame = TRUE;
    998         }
    999 
   1000 #endif
   1001 
   1002         if (cpi->drop_frame)
   1003         {
   1004             // Update the buffer level variable.
   1005             cpi->bits_off_target += cpi->av_per_frame_bandwidth;
   1006             cpi->buffer_level = cpi->bits_off_target;
   1007         }
   1008         else
   1009             cpi->drop_count = 0;
   1010     }
   1011 
   1012     // Adjust target frame size for Golden Frames:
   1013     if (cpi->oxcf.error_resilient_mode == 0 &&
   1014         (cpi->frames_till_gf_update_due == 0) && !cpi->drop_frame)
   1015     {
   1016         //int Boost = 0;
   1017         int Q = (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME] : cpi->oxcf.fixed_q;
   1018 
   1019         int gf_frame_useage = 0;      // Golden frame useage since last GF
   1020         int tot_mbs = cpi->recent_ref_frame_usage[INTRA_FRAME]  +
   1021                       cpi->recent_ref_frame_usage[LAST_FRAME]   +
   1022                       cpi->recent_ref_frame_usage[GOLDEN_FRAME] +
   1023                       cpi->recent_ref_frame_usage[ALTREF_FRAME];
   1024 
   1025         int pct_gf_active = (100 * cpi->gf_active_count) / (cpi->common.mb_rows * cpi->common.mb_cols);
   1026 
   1027         // Reset the last boost indicator
   1028         //cpi->last_boost = 100;
   1029 
   1030         if (tot_mbs)
   1031             gf_frame_useage = (cpi->recent_ref_frame_usage[GOLDEN_FRAME] + cpi->recent_ref_frame_usage[ALTREF_FRAME]) * 100 / tot_mbs;
   1032 
   1033         if (pct_gf_active > gf_frame_useage)
   1034             gf_frame_useage = pct_gf_active;
   1035 
   1036         // Is a fixed manual GF frequency being used
   1037         if (!cpi->auto_gold)
   1038             cpi->common.refresh_golden_frame = TRUE;
   1039         else
   1040         {
   1041             // For one pass throw a GF if recent frame intra useage is low or the GF useage is high
   1042             if ((cpi->pass == 0) && (cpi->this_frame_percent_intra < 15 || gf_frame_useage >= 5))
   1043                 cpi->common.refresh_golden_frame = TRUE;
   1044 
   1045             // Two pass GF descision
   1046             else if (cpi->pass == 2)
   1047                 cpi->common.refresh_golden_frame = TRUE;
   1048         }
   1049 
   1050 #if 0
   1051 
   1052         // Debug stats
   1053         if (0)
   1054         {
   1055             FILE *f;
   1056 
   1057             f = fopen("gf_useaget.stt", "a");
   1058             fprintf(f, " %8ld %10ld %10ld %10ld %10ld\n",
   1059                     cpi->common.current_video_frame,  cpi->gfu_boost, GFQ_ADJUSTMENT, cpi->gfu_boost, gf_frame_useage);
   1060             fclose(f);
   1061         }
   1062 
   1063 #endif
   1064 
   1065         if (cpi->common.refresh_golden_frame == TRUE)
   1066         {
   1067 #if 0
   1068 
   1069             if (0)   // p_gw
   1070             {
   1071                 FILE *f;
   1072 
   1073                 f = fopen("GFexit.stt", "a");
   1074                 fprintf(f, "%8ld GF coded\n", cpi->common.current_video_frame);
   1075                 fclose(f);
   1076             }
   1077 
   1078 #endif
   1079             cpi->initial_gf_use = 0;
   1080 
   1081             if (cpi->auto_adjust_gold_quantizer)
   1082             {
   1083                 calc_gf_params(cpi);
   1084             }
   1085 
   1086             // If we are using alternate ref instead of gf then do not apply the boost
   1087             // It will instead be applied to the altref update
   1088             // Jims modified boost
   1089             if (!cpi->source_alt_ref_active)
   1090             {
   1091                 if (cpi->oxcf.fixed_q < 0)
   1092                 {
   1093                     if (cpi->pass == 2)
   1094                     {
   1095                         cpi->this_frame_target = cpi->per_frame_bandwidth;          // The spend on the GF is defined in the two pass code for two pass encodes
   1096                     }
   1097                     else
   1098                     {
   1099                         int Boost = cpi->last_boost;
   1100                         int frames_in_section = cpi->frames_till_gf_update_due + 1;
   1101                         int allocation_chunks = (frames_in_section * 100) + (Boost - 100);
   1102                         int bits_in_section = cpi->inter_frame_target * frames_in_section;
   1103 
   1104                         // Normalize Altboost and allocations chunck down to prevent overflow
   1105                         while (Boost > 1000)
   1106                         {
   1107                             Boost /= 2;
   1108                             allocation_chunks /= 2;
   1109                         }
   1110 
   1111                         // Avoid loss of precision but avoid overflow
   1112                         if ((bits_in_section >> 7) > allocation_chunks)
   1113                             cpi->this_frame_target = Boost * (bits_in_section / allocation_chunks);
   1114                         else
   1115                             cpi->this_frame_target = (Boost * bits_in_section) / allocation_chunks;
   1116                     }
   1117                 }
   1118                 else
   1119                     cpi->this_frame_target = (baseline_bits_at_q(1, Q, cpi->common.MBs) * cpi->last_boost) / 100;
   1120 
   1121             }
   1122             // If there is an active ARF at this location use the minimum
   1123             // bits on this frame even if it is a contructed arf.
   1124             // The active maximum quantizer insures that an appropriate
   1125             // number of bits will be spent if needed for contstructed ARFs.
   1126             else
   1127             {
   1128                 cpi->this_frame_target = 0;
   1129             }
   1130 
   1131             cpi->current_gf_interval = cpi->frames_till_gf_update_due;
   1132 
   1133         }
   1134     }
   1135 }
   1136 
   1137 
   1138 void vp8_update_rate_correction_factors(VP8_COMP *cpi, int damp_var)
   1139 {
   1140     int    Q = cpi->common.base_qindex;
   1141     int    correction_factor = 100;
   1142     double rate_correction_factor;
   1143     double adjustment_limit;
   1144 
   1145     int    projected_size_based_on_q = 0;
   1146 
   1147     // Clear down mmx registers to allow floating point in what follows
   1148     vp8_clear_system_state();  //__asm emms;
   1149 
   1150     if (cpi->common.frame_type == KEY_FRAME)
   1151     {
   1152         rate_correction_factor = cpi->key_frame_rate_correction_factor;
   1153     }
   1154     else
   1155     {
   1156         if (cpi->common.refresh_alt_ref_frame || cpi->common.refresh_golden_frame)
   1157             rate_correction_factor = cpi->gf_rate_correction_factor;
   1158         else
   1159             rate_correction_factor = cpi->rate_correction_factor;
   1160     }
   1161 
   1162     // Work out how big we would have expected the frame to be at this Q given the current correction factor.
   1163     // Stay in double to avoid int overflow when values are large
   1164     //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;
   1165     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));
   1166 
   1167     // Make some allowance for cpi->zbin_over_quant
   1168     if (cpi->zbin_over_quant > 0)
   1169     {
   1170         int Z = cpi->zbin_over_quant;
   1171         double Factor = 0.99;
   1172         double factor_adjustment = 0.01 / 256.0; //(double)ZBIN_OQ_MAX;
   1173 
   1174         while (Z > 0)
   1175         {
   1176             Z --;
   1177             projected_size_based_on_q =
   1178                 (int)(Factor * projected_size_based_on_q);
   1179             Factor += factor_adjustment;
   1180 
   1181             if (Factor  >= 0.999)
   1182                 Factor = 0.999;
   1183         }
   1184     }
   1185 
   1186     // Work out a size correction factor.
   1187     //if ( cpi->this_frame_target > 0 )
   1188     //  correction_factor = (100 * cpi->projected_frame_size) / cpi->this_frame_target;
   1189     if (projected_size_based_on_q > 0)
   1190         correction_factor = (100 * cpi->projected_frame_size) / projected_size_based_on_q;
   1191 
   1192     // More heavily damped adjustment used if we have been oscillating either side of target
   1193     switch (damp_var)
   1194     {
   1195     case 0:
   1196         adjustment_limit = 0.75;
   1197         break;
   1198     case 1:
   1199         adjustment_limit = 0.375;
   1200         break;
   1201     case 2:
   1202     default:
   1203         adjustment_limit = 0.25;
   1204         break;
   1205     }
   1206 
   1207     //if ( (correction_factor > 102) && (Q < cpi->active_worst_quality) )
   1208     if (correction_factor > 102)
   1209     {
   1210         // We are not already at the worst allowable quality
   1211         correction_factor = (int)(100.5 + ((correction_factor - 100) * adjustment_limit));
   1212         rate_correction_factor = ((rate_correction_factor * correction_factor) / 100);
   1213 
   1214         // Keep rate_correction_factor within limits
   1215         if (rate_correction_factor > MAX_BPB_FACTOR)
   1216             rate_correction_factor = MAX_BPB_FACTOR;
   1217     }
   1218     //else if ( (correction_factor < 99) && (Q > cpi->active_best_quality) )
   1219     else if (correction_factor < 99)
   1220     {
   1221         // We are not already at the best allowable quality
   1222         correction_factor = (int)(100.5 - ((100 - correction_factor) * adjustment_limit));
   1223         rate_correction_factor = ((rate_correction_factor * correction_factor) / 100);
   1224 
   1225         // Keep rate_correction_factor within limits
   1226         if (rate_correction_factor < MIN_BPB_FACTOR)
   1227             rate_correction_factor = MIN_BPB_FACTOR;
   1228     }
   1229 
   1230     if (cpi->common.frame_type == KEY_FRAME)
   1231         cpi->key_frame_rate_correction_factor = rate_correction_factor;
   1232     else
   1233     {
   1234         if (cpi->common.refresh_alt_ref_frame || cpi->common.refresh_golden_frame)
   1235             cpi->gf_rate_correction_factor = rate_correction_factor;
   1236         else
   1237             cpi->rate_correction_factor = rate_correction_factor;
   1238     }
   1239 }
   1240 
   1241 static int estimate_bits_at_q(VP8_COMP *cpi, int Q)
   1242 {
   1243     int Bpm = (int)(.5 + cpi->rate_correction_factor * vp8_bits_per_mb[INTER_FRAME][Q]);
   1244 
   1245     /* Attempt to retain reasonable accuracy without overflow. The cutoff is
   1246      * chosen such that the maximum product of Bpm and MBs fits 31 bits. The
   1247      * largest Bpm takes 20 bits.
   1248      */
   1249     if (cpi->common.MBs > (1 << 11))
   1250         return (Bpm >> BPER_MB_NORMBITS) * cpi->common.MBs;
   1251     else
   1252         return (Bpm * cpi->common.MBs) >> BPER_MB_NORMBITS;
   1253 
   1254 }
   1255 
   1256 
   1257 int vp8_regulate_q(VP8_COMP *cpi, int target_bits_per_frame)
   1258 {
   1259     int Q = cpi->active_worst_quality;
   1260 
   1261     // Reset Zbin OQ value
   1262     cpi->zbin_over_quant = 0;
   1263 
   1264     if (cpi->oxcf.fixed_q >= 0)
   1265     {
   1266         Q = cpi->oxcf.fixed_q;
   1267 
   1268         if (cpi->common.frame_type == KEY_FRAME)
   1269         {
   1270             Q = cpi->oxcf.key_q;
   1271         }
   1272         else if (cpi->common.refresh_alt_ref_frame)
   1273         {
   1274             Q = cpi->oxcf.alt_q;
   1275         }
   1276         else if (cpi->common.refresh_golden_frame)
   1277         {
   1278             Q = cpi->oxcf.gold_q;
   1279         }
   1280 
   1281     }
   1282     else
   1283     {
   1284         int i;
   1285         int last_error = INT_MAX;
   1286         int target_bits_per_mb;
   1287         int bits_per_mb_at_this_q;
   1288         double correction_factor;
   1289 
   1290         // Select the appropriate correction factor based upon type of frame.
   1291         if (cpi->common.frame_type == KEY_FRAME)
   1292             correction_factor = cpi->key_frame_rate_correction_factor;
   1293         else
   1294         {
   1295             if (cpi->common.refresh_alt_ref_frame || cpi->common.refresh_golden_frame)
   1296                 correction_factor = cpi->gf_rate_correction_factor;
   1297             else
   1298                 correction_factor = cpi->rate_correction_factor;
   1299         }
   1300 
   1301         // Calculate required scaling factor based on target frame size and size of frame produced using previous Q
   1302         if (target_bits_per_frame >= (INT_MAX >> BPER_MB_NORMBITS))
   1303             target_bits_per_mb = (target_bits_per_frame / cpi->common.MBs) << BPER_MB_NORMBITS;       // Case where we would overflow int
   1304         else
   1305             target_bits_per_mb = (target_bits_per_frame << BPER_MB_NORMBITS) / cpi->common.MBs;
   1306 
   1307         i = cpi->active_best_quality;
   1308 
   1309         do
   1310         {
   1311             bits_per_mb_at_this_q = (int)(.5 + correction_factor * vp8_bits_per_mb[cpi->common.frame_type][i]);
   1312 
   1313             if (bits_per_mb_at_this_q <= target_bits_per_mb)
   1314             {
   1315                 if ((target_bits_per_mb - bits_per_mb_at_this_q) <= last_error)
   1316                     Q = i;
   1317                 else
   1318                     Q = i - 1;
   1319 
   1320                 break;
   1321             }
   1322             else
   1323                 last_error = bits_per_mb_at_this_q - target_bits_per_mb;
   1324         }
   1325         while (++i <= cpi->active_worst_quality);
   1326 
   1327 
   1328         // If we are at MAXQ then enable Q over-run which seeks to claw back additional bits through things like
   1329         // the RD multiplier and zero bin size.
   1330         if (Q >= MAXQ)
   1331         {
   1332             int zbin_oqmax;
   1333 
   1334             double Factor = 0.99;
   1335             double factor_adjustment = 0.01 / 256.0; //(double)ZBIN_OQ_MAX;
   1336 
   1337             if (cpi->common.frame_type == KEY_FRAME)
   1338                 zbin_oqmax = 0; //ZBIN_OQ_MAX/16
   1339             else if (cpi->common.refresh_alt_ref_frame || (cpi->common.refresh_golden_frame && !cpi->source_alt_ref_active))
   1340                 zbin_oqmax = 16;
   1341             else
   1342                 zbin_oqmax = ZBIN_OQ_MAX;
   1343 
   1344             /*{
   1345                 double Factor = (double)target_bits_per_mb/(double)bits_per_mb_at_this_q;
   1346                 double Oq;
   1347 
   1348                 Factor = Factor/1.2683;
   1349 
   1350                 Oq = pow( Factor, (1.0/-0.165) );
   1351 
   1352                 if ( Oq > zbin_oqmax )
   1353                     Oq = zbin_oqmax;
   1354 
   1355                 cpi->zbin_over_quant = (int)Oq;
   1356             }*/
   1357 
   1358             // Each incrment in the zbin is assumed to have a fixed effect on bitrate. This is not of course true.
   1359             // The effect will be highly clip dependent and may well have sudden steps.
   1360             // The idea here is to acheive higher effective quantizers than the normal maximum by expanding the zero
   1361             // bin and hence decreasing the number of low magnitude non zero coefficients.
   1362             while (cpi->zbin_over_quant < zbin_oqmax)
   1363             {
   1364                 cpi->zbin_over_quant ++;
   1365 
   1366                 if (cpi->zbin_over_quant > zbin_oqmax)
   1367                     cpi->zbin_over_quant = zbin_oqmax;
   1368 
   1369                 // Adjust bits_per_mb_at_this_q estimate
   1370                 bits_per_mb_at_this_q = (int)(Factor * bits_per_mb_at_this_q);
   1371                 Factor += factor_adjustment;
   1372 
   1373                 if (Factor  >= 0.999)
   1374                     Factor = 0.999;
   1375 
   1376                 if (bits_per_mb_at_this_q <= target_bits_per_mb)    // Break out if we get down to the target rate
   1377                     break;
   1378             }
   1379 
   1380         }
   1381     }
   1382 
   1383     return Q;
   1384 }
   1385 
   1386 static int estimate_min_frame_size(VP8_COMP *cpi)
   1387 {
   1388     double correction_factor;
   1389     int bits_per_mb_at_max_q;
   1390 
   1391     // This funtion returns a default value for the first few frames untill the correction factor has had time to adapt.
   1392     if (cpi->common.current_video_frame < 10)
   1393     {
   1394         if (cpi->pass == 2)
   1395             return (cpi->min_frame_bandwidth);
   1396         else
   1397             return cpi->per_frame_bandwidth / 3;
   1398     }
   1399 
   1400     /*  // Select the appropriate correction factor based upon type of frame.
   1401         if ( cpi->common.frame_type == KEY_FRAME )
   1402             correction_factor = cpi->key_frame_rate_correction_factor;
   1403         else
   1404         {
   1405             if ( cpi->common.refresh_alt_ref_frame || cpi->common.refresh_golden_frame )
   1406                 correction_factor = cpi->gf_rate_correction_factor;
   1407             else
   1408                 correction_factor = cpi->rate_correction_factor;
   1409         }*/
   1410 
   1411     // We estimate at half the value we get from vp8_bits_per_mb
   1412     correction_factor = cpi->rate_correction_factor / 2.0;
   1413 
   1414     bits_per_mb_at_max_q = (int)(.5 + correction_factor * vp8_bits_per_mb[cpi->common.frame_type][MAXQ]);
   1415 
   1416     return (bits_per_mb_at_max_q * cpi->common.MBs) >> BPER_MB_NORMBITS;
   1417 }
   1418 
   1419 void vp8_adjust_key_frame_context(VP8_COMP *cpi)
   1420 {
   1421     int i;
   1422     int av_key_frames_per_second;
   1423 
   1424     // Average key frame frequency and size
   1425     unsigned int total_weight = 0;
   1426     unsigned int av_key_frame_frequency = 0;
   1427     unsigned int av_key_frame_bits = 0;
   1428 
   1429     unsigned int output_frame_rate = (unsigned int)(100 * cpi->output_frame_rate);
   1430     unsigned int target_bandwidth = (unsigned int)(100 * cpi->target_bandwidth);
   1431 
   1432     // Clear down mmx registers to allow floating point in what follows
   1433     vp8_clear_system_state();  //__asm emms;
   1434 
   1435     // Update the count of total key frame bits
   1436     cpi->tot_key_frame_bits += cpi->projected_frame_size;
   1437 
   1438     // First key frame at start of sequence is a special case. We have no frequency data.
   1439     if (cpi->key_frame_count == 1)
   1440     {
   1441         av_key_frame_frequency = (int)cpi->output_frame_rate * 2;            // Assume a default of 1 kf every 2 seconds
   1442         av_key_frame_bits = cpi->projected_frame_size;
   1443         av_key_frames_per_second  = output_frame_rate / av_key_frame_frequency;  // Note output_frame_rate not cpi->output_frame_rate
   1444     }
   1445     else
   1446     {
   1447         int last_kf_interval =
   1448                 (cpi->frames_since_key > 0) ? cpi->frames_since_key : 1;
   1449 
   1450         // reset keyframe context and calculate weighted average of last KEY_FRAME_CONTEXT keyframes
   1451         for (i = 0; i < KEY_FRAME_CONTEXT; i++)
   1452         {
   1453             if (i < KEY_FRAME_CONTEXT - 1)
   1454             {
   1455                 cpi->prior_key_frame_size[i]     = cpi->prior_key_frame_size[i+1];
   1456                 cpi->prior_key_frame_distance[i] = cpi->prior_key_frame_distance[i+1];
   1457             }
   1458             else
   1459             {
   1460                 cpi->prior_key_frame_size[i]     = cpi->projected_frame_size;
   1461                 cpi->prior_key_frame_distance[i] = last_kf_interval;
   1462             }
   1463 
   1464             av_key_frame_bits      += prior_key_frame_weight[i] * cpi->prior_key_frame_size[i];
   1465             av_key_frame_frequency += prior_key_frame_weight[i] * cpi->prior_key_frame_distance[i];
   1466             total_weight         += prior_key_frame_weight[i];
   1467         }
   1468 
   1469         av_key_frame_bits       /= total_weight;
   1470         av_key_frame_frequency  /= total_weight;
   1471         av_key_frames_per_second  = output_frame_rate / av_key_frame_frequency;
   1472 
   1473     }
   1474 
   1475     // Do we have any key frame overspend to recover?
   1476     if ((cpi->pass != 2) && (cpi->projected_frame_size > cpi->per_frame_bandwidth))
   1477     {
   1478         // Update the count of key frame overspend to be recovered in subsequent frames
   1479         // A portion of the KF overspend is treated as gf overspend (and hence recovered more quickly)
   1480         // as the kf is also a gf. Otherwise the few frames following each kf tend to get more bits
   1481         // allocated than those following other gfs.
   1482         cpi->kf_overspend_bits += (cpi->projected_frame_size - cpi->per_frame_bandwidth) * 7 / 8;
   1483         cpi->gf_overspend_bits += (cpi->projected_frame_size - cpi->per_frame_bandwidth) * 1 / 8;
   1484         if(!av_key_frame_frequency)
   1485             av_key_frame_frequency = 60;
   1486 
   1487         // Work out how much to try and recover per frame.
   1488         // For one pass we estimate the number of frames to spread it over based upon past history.
   1489         // For two pass we know how many frames there will be till the next kf.
   1490         if (cpi->pass == 2)
   1491         {
   1492             if (cpi->frames_to_key > 16)
   1493                 cpi->kf_bitrate_adjustment = cpi->kf_overspend_bits / (int)cpi->frames_to_key;
   1494             else
   1495                 cpi->kf_bitrate_adjustment = cpi->kf_overspend_bits / 16;
   1496         }
   1497         else
   1498             cpi->kf_bitrate_adjustment = cpi->kf_overspend_bits / (int)av_key_frame_frequency;
   1499     }
   1500 
   1501     cpi->frames_since_key = 0;
   1502     cpi->last_key_frame_size = cpi->projected_frame_size;
   1503     cpi->key_frame_count++;
   1504 }
   1505 
   1506 void vp8_compute_frame_size_bounds(VP8_COMP *cpi, int *frame_under_shoot_limit, int *frame_over_shoot_limit)
   1507 {
   1508     // Set-up bounds on acceptable frame size:
   1509     if (cpi->oxcf.fixed_q >= 0)
   1510     {
   1511         // Fixed Q scenario: frame size never outranges target (there is no target!)
   1512         *frame_under_shoot_limit = 0;
   1513         *frame_over_shoot_limit  = INT_MAX;
   1514     }
   1515     else
   1516     {
   1517         if (cpi->common.frame_type == KEY_FRAME)
   1518         {
   1519             *frame_over_shoot_limit  = cpi->this_frame_target * 9 / 8;
   1520             *frame_under_shoot_limit = cpi->this_frame_target * 7 / 8;
   1521         }
   1522         else
   1523         {
   1524             if (cpi->common.refresh_alt_ref_frame || cpi->common.refresh_golden_frame)
   1525             {
   1526                 *frame_over_shoot_limit  = cpi->this_frame_target * 9 / 8;
   1527                 *frame_under_shoot_limit = cpi->this_frame_target * 7 / 8;
   1528             }
   1529             else
   1530             {
   1531                 // For CBR take buffer fullness into account
   1532                 if (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER)
   1533                 {
   1534                     if (cpi->buffer_level >= ((cpi->oxcf.optimal_buffer_level + cpi->oxcf.maximum_buffer_size) >> 1))
   1535                     {
   1536                         // Buffer is too full so relax overshoot and tighten undershoot
   1537                         *frame_over_shoot_limit  = cpi->this_frame_target * 12 / 8;
   1538                         *frame_under_shoot_limit = cpi->this_frame_target * 6 / 8;
   1539                     }
   1540                     else if (cpi->buffer_level <= (cpi->oxcf.optimal_buffer_level >> 1))
   1541                     {
   1542                         // Buffer is too low so relax undershoot and tighten overshoot
   1543                         *frame_over_shoot_limit  = cpi->this_frame_target * 10 / 8;
   1544                         *frame_under_shoot_limit = cpi->this_frame_target * 4 / 8;
   1545                     }
   1546                     else
   1547                     {
   1548                         *frame_over_shoot_limit  = cpi->this_frame_target * 11 / 8;
   1549                         *frame_under_shoot_limit = cpi->this_frame_target * 5 / 8;
   1550                     }
   1551                 }
   1552                 // VBR
   1553                 // Note that tighter restrictions here can help quality but hurt encode speed
   1554                 else
   1555                 {
   1556                     *frame_over_shoot_limit  = cpi->this_frame_target * 11 / 8;
   1557                     *frame_under_shoot_limit = cpi->this_frame_target * 5 / 8;
   1558                 }
   1559             }
   1560         }
   1561     }
   1562 }
   1563