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 #include <math.h>
     18 
     19 #include "vp9/common/vp9_alloccommon.h"
     20 #include "vp9/common/vp9_common.h"
     21 #include "vp9/encoder/vp9_ratectrl.h"
     22 #include "vp9/common/vp9_entropymode.h"
     23 #include "vpx_mem/vpx_mem.h"
     24 #include "vp9/common/vp9_systemdependent.h"
     25 #include "vp9/encoder/vp9_encodemv.h"
     26 #include "vp9/common/vp9_quant_common.h"
     27 #include "vp9/common/vp9_seg_common.h"
     28 
     29 #define MIN_BPB_FACTOR 0.005
     30 #define MAX_BPB_FACTOR 50
     31 
     32 // Bits Per MB at different Q (Multiplied by 512)
     33 #define BPER_MB_NORMBITS    9
     34 
     35 static const unsigned int prior_key_frame_weight[KEY_FRAME_CONTEXT] =
     36     { 1, 2, 3, 4, 5 };
     37 
     38 // These functions use formulaic calculations to make playing with the
     39 // quantizer tables easier. If necessary they can be replaced by lookup
     40 // tables if and when things settle down in the experimental bitstream
     41 double vp9_convert_qindex_to_q(int qindex) {
     42   // Convert the index to a real Q value (scaled down to match old Q values)
     43   return vp9_ac_quant(qindex, 0) / 4.0;
     44 }
     45 
     46 int vp9_gfboost_qadjust(int qindex) {
     47   const double q = vp9_convert_qindex_to_q(qindex);
     48   return (int)((0.00000828 * q * q * q) +
     49                (-0.0055 * q * q) +
     50                (1.32 * q) + 79.3);
     51 }
     52 
     53 static int kfboost_qadjust(int qindex) {
     54   const double q = vp9_convert_qindex_to_q(qindex);
     55   return (int)((0.00000973 * q * q * q) +
     56                (-0.00613 * q * q) +
     57                (1.316 * q) + 121.2);
     58 }
     59 
     60 int vp9_bits_per_mb(FRAME_TYPE frame_type, int qindex,
     61                     double correction_factor) {
     62   const double q = vp9_convert_qindex_to_q(qindex);
     63   int enumerator = frame_type == KEY_FRAME ? 3300000 : 2250000;
     64 
     65   // q based adjustment to baseline enumerator
     66   enumerator += (int)(enumerator * q) >> 12;
     67   return (int)(0.5 + (enumerator * correction_factor / q));
     68 }
     69 
     70 void vp9_save_coding_context(VP9_COMP *cpi) {
     71   CODING_CONTEXT *const cc = &cpi->coding_context;
     72   VP9_COMMON *cm = &cpi->common;
     73 
     74   // Stores a snapshot of key state variables which can subsequently be
     75   // restored with a call to vp9_restore_coding_context. These functions are
     76   // intended for use in a re-code loop in vp9_compress_frame where the
     77   // quantizer value is adjusted between loop iterations.
     78   vp9_copy(cc->nmvjointcost,  cpi->mb.nmvjointcost);
     79   vp9_copy(cc->nmvcosts,  cpi->mb.nmvcosts);
     80   vp9_copy(cc->nmvcosts_hp,  cpi->mb.nmvcosts_hp);
     81 
     82   vp9_copy(cc->segment_pred_probs, cm->seg.pred_probs);
     83 
     84   vpx_memcpy(cpi->coding_context.last_frame_seg_map_copy,
     85              cm->last_frame_seg_map, (cm->mi_rows * cm->mi_cols));
     86 
     87   vp9_copy(cc->last_ref_lf_deltas, cm->lf.last_ref_deltas);
     88   vp9_copy(cc->last_mode_lf_deltas, cm->lf.last_mode_deltas);
     89 
     90   cc->fc = cm->fc;
     91 }
     92 
     93 void vp9_restore_coding_context(VP9_COMP *cpi) {
     94   CODING_CONTEXT *const cc = &cpi->coding_context;
     95   VP9_COMMON *cm = &cpi->common;
     96 
     97   // Restore key state variables to the snapshot state stored in the
     98   // previous call to vp9_save_coding_context.
     99   vp9_copy(cpi->mb.nmvjointcost, cc->nmvjointcost);
    100   vp9_copy(cpi->mb.nmvcosts, cc->nmvcosts);
    101   vp9_copy(cpi->mb.nmvcosts_hp, cc->nmvcosts_hp);
    102 
    103   vp9_copy(cm->seg.pred_probs, cc->segment_pred_probs);
    104 
    105   vpx_memcpy(cm->last_frame_seg_map,
    106              cpi->coding_context.last_frame_seg_map_copy,
    107              (cm->mi_rows * cm->mi_cols));
    108 
    109   vp9_copy(cm->lf.last_ref_deltas, cc->last_ref_lf_deltas);
    110   vp9_copy(cm->lf.last_mode_deltas, cc->last_mode_lf_deltas);
    111 
    112   cm->fc = cc->fc;
    113 }
    114 
    115 void vp9_setup_key_frame(VP9_COMP *cpi) {
    116   VP9_COMMON *cm = &cpi->common;
    117 
    118   vp9_setup_past_independence(cm);
    119 
    120   // interval before next GF
    121   cpi->frames_till_gf_update_due = cpi->baseline_gf_interval;
    122   /* All buffers are implicitly updated on key frames. */
    123   cpi->refresh_golden_frame = 1;
    124   cpi->refresh_alt_ref_frame = 1;
    125 }
    126 
    127 void vp9_setup_inter_frame(VP9_COMP *cpi) {
    128   VP9_COMMON *cm = &cpi->common;
    129   if (cm->error_resilient_mode || cm->intra_only)
    130     vp9_setup_past_independence(cm);
    131 
    132   assert(cm->frame_context_idx < NUM_FRAME_CONTEXTS);
    133   cm->fc = cm->frame_contexts[cm->frame_context_idx];
    134 }
    135 
    136 static int estimate_bits_at_q(int frame_kind, int q, int mbs,
    137                               double correction_factor) {
    138   const int bpm = (int)(vp9_bits_per_mb(frame_kind, q, correction_factor));
    139 
    140   // Attempt to retain reasonable accuracy without overflow. The cutoff is
    141   // chosen such that the maximum product of Bpm and MBs fits 31 bits. The
    142   // largest Bpm takes 20 bits.
    143   return (mbs > (1 << 11)) ? (bpm >> BPER_MB_NORMBITS) * mbs
    144                            : (bpm * mbs) >> BPER_MB_NORMBITS;
    145 }
    146 
    147 
    148 static void calc_iframe_target_size(VP9_COMP *cpi) {
    149   // boost defaults to half second
    150   int target;
    151 
    152   // Clear down mmx registers to allow floating point in what follows
    153   vp9_clear_system_state();  // __asm emms;
    154 
    155   // New Two pass RC
    156   target = cpi->per_frame_bandwidth;
    157 
    158   if (cpi->oxcf.rc_max_intra_bitrate_pct) {
    159     int max_rate = cpi->per_frame_bandwidth
    160                  * cpi->oxcf.rc_max_intra_bitrate_pct / 100;
    161 
    162     if (target > max_rate)
    163       target = max_rate;
    164   }
    165 
    166   cpi->this_frame_target = target;
    167 }
    168 
    169 
    170 //  Do the best we can to define the parameters for the next GF based
    171 //  on what information we have available.
    172 //
    173 //  In this experimental code only two pass is supported
    174 //  so we just use the interval determined in the two pass code.
    175 static void calc_gf_params(VP9_COMP *cpi) {
    176   // Set the gf interval
    177   cpi->frames_till_gf_update_due = cpi->baseline_gf_interval;
    178 }
    179 
    180 
    181 static void calc_pframe_target_size(VP9_COMP *cpi) {
    182   const int min_frame_target = MAX(cpi->min_frame_bandwidth,
    183                                    cpi->av_per_frame_bandwidth >> 5);
    184   if (cpi->refresh_alt_ref_frame) {
    185     // Special alt reference frame case
    186     // Per frame bit target for the alt ref frame
    187     cpi->per_frame_bandwidth = cpi->twopass.gf_bits;
    188     cpi->this_frame_target = cpi->per_frame_bandwidth;
    189   } else {
    190     // Normal frames (gf,and inter)
    191     cpi->this_frame_target = cpi->per_frame_bandwidth;
    192   }
    193 
    194   // Check that the total sum of adjustments is not above the maximum allowed.
    195   // That is, having allowed for the KF and GF penalties, we have not pushed
    196   // the current inter-frame target too low. If the adjustment we apply here is
    197   // not capable of recovering all the extra bits we have spent in the KF or GF,
    198   // then the remainder will have to be recovered over a longer time span via
    199   // other buffer / rate control mechanisms.
    200   if (cpi->this_frame_target < min_frame_target)
    201     cpi->this_frame_target = min_frame_target;
    202 
    203   if (!cpi->refresh_alt_ref_frame)
    204     // Note the baseline target data rate for this inter frame.
    205     cpi->inter_frame_target = cpi->this_frame_target;
    206 
    207   // Adjust target frame size for Golden Frames:
    208   if (cpi->frames_till_gf_update_due == 0) {
    209     const int q = (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME]
    210                                           : cpi->oxcf.fixed_q;
    211 
    212     cpi->refresh_golden_frame = 1;
    213 
    214     calc_gf_params(cpi);
    215 
    216     // If we are using alternate ref instead of gf then do not apply the boost
    217     // It will instead be applied to the altref update
    218     // Jims modified boost
    219     if (!cpi->source_alt_ref_active) {
    220       if (cpi->oxcf.fixed_q < 0) {
    221         // The spend on the GF is defined in the two pass code
    222         // for two pass encodes
    223         cpi->this_frame_target = cpi->per_frame_bandwidth;
    224       } else {
    225         cpi->this_frame_target =
    226           (estimate_bits_at_q(1, q, cpi->common.MBs, 1.0)
    227            * cpi->last_boost) / 100;
    228       }
    229     } else {
    230       // If there is an active ARF at this location use the minimum
    231       // bits on this frame even if it is a constructed arf.
    232       // The active maximum quantizer insures that an appropriate
    233       // number of bits will be spent if needed for constructed ARFs.
    234       cpi->this_frame_target = 0;
    235     }
    236   }
    237 }
    238 
    239 
    240 void vp9_update_rate_correction_factors(VP9_COMP *cpi, int damp_var) {
    241   const int q = cpi->common.base_qindex;
    242   int correction_factor = 100;
    243   double rate_correction_factor;
    244   double adjustment_limit;
    245 
    246   int projected_size_based_on_q = 0;
    247 
    248   // Clear down mmx registers to allow floating point in what follows
    249   vp9_clear_system_state();  // __asm emms;
    250 
    251   if (cpi->common.frame_type == KEY_FRAME) {
    252     rate_correction_factor = cpi->key_frame_rate_correction_factor;
    253   } else {
    254     if (cpi->refresh_alt_ref_frame || cpi->refresh_golden_frame)
    255       rate_correction_factor = cpi->gf_rate_correction_factor;
    256     else
    257       rate_correction_factor = cpi->rate_correction_factor;
    258   }
    259 
    260   // Work out how big we would have expected the frame to be at this Q given
    261   // the current correction factor.
    262   // Stay in double to avoid int overflow when values are large
    263   projected_size_based_on_q = estimate_bits_at_q(cpi->common.frame_type, q,
    264                                                  cpi->common.MBs,
    265                                                  rate_correction_factor);
    266 
    267   // Work out a size correction factor.
    268   if (projected_size_based_on_q > 0)
    269     correction_factor =
    270         (100 * cpi->projected_frame_size) / projected_size_based_on_q;
    271 
    272   // More heavily damped adjustment used if we have been oscillating either side
    273   // of target.
    274   switch (damp_var) {
    275     case 0:
    276       adjustment_limit = 0.75;
    277       break;
    278     case 1:
    279       adjustment_limit = 0.375;
    280       break;
    281     case 2:
    282     default:
    283       adjustment_limit = 0.25;
    284       break;
    285   }
    286 
    287   // if ( (correction_factor > 102) && (Q < cpi->active_worst_quality) )
    288   if (correction_factor > 102) {
    289     // We are not already at the worst allowable quality
    290     correction_factor =
    291         (int)(100 + ((correction_factor - 100) * adjustment_limit));
    292     rate_correction_factor =
    293         ((rate_correction_factor * correction_factor) / 100);
    294 
    295     // Keep rate_correction_factor within limits
    296     if (rate_correction_factor > MAX_BPB_FACTOR)
    297       rate_correction_factor = MAX_BPB_FACTOR;
    298   } else if (correction_factor < 99) {
    299     // We are not already at the best allowable quality
    300     correction_factor =
    301         (int)(100 - ((100 - correction_factor) * adjustment_limit));
    302     rate_correction_factor =
    303         ((rate_correction_factor * correction_factor) / 100);
    304 
    305     // Keep rate_correction_factor within limits
    306     if (rate_correction_factor < MIN_BPB_FACTOR)
    307       rate_correction_factor = MIN_BPB_FACTOR;
    308   }
    309 
    310   if (cpi->common.frame_type == KEY_FRAME) {
    311     cpi->key_frame_rate_correction_factor = rate_correction_factor;
    312   } else {
    313     if (cpi->refresh_alt_ref_frame || cpi->refresh_golden_frame)
    314       cpi->gf_rate_correction_factor = rate_correction_factor;
    315     else
    316       cpi->rate_correction_factor = rate_correction_factor;
    317   }
    318 }
    319 
    320 
    321 int vp9_regulate_q(VP9_COMP *cpi, int target_bits_per_frame) {
    322   int q = cpi->active_worst_quality;
    323 
    324   int i;
    325   int last_error = INT_MAX;
    326   int target_bits_per_mb;
    327   int bits_per_mb_at_this_q;
    328   double correction_factor;
    329 
    330   // Select the appropriate correction factor based upon type of frame.
    331   if (cpi->common.frame_type == KEY_FRAME) {
    332     correction_factor = cpi->key_frame_rate_correction_factor;
    333   } else {
    334     if (cpi->refresh_alt_ref_frame || cpi->refresh_golden_frame)
    335       correction_factor = cpi->gf_rate_correction_factor;
    336     else
    337       correction_factor = cpi->rate_correction_factor;
    338   }
    339 
    340   // Calculate required scaling factor based on target frame size and size of
    341   // frame produced using previous Q.
    342   if (target_bits_per_frame >= (INT_MAX >> BPER_MB_NORMBITS))
    343     target_bits_per_mb =
    344         (target_bits_per_frame / cpi->common.MBs)
    345         << BPER_MB_NORMBITS;  // Case where we would overflow int
    346   else
    347     target_bits_per_mb =
    348         (target_bits_per_frame << BPER_MB_NORMBITS) / cpi->common.MBs;
    349 
    350   i = cpi->active_best_quality;
    351 
    352   do {
    353     bits_per_mb_at_this_q = (int)vp9_bits_per_mb(cpi->common.frame_type, i,
    354                                                  correction_factor);
    355 
    356     if (bits_per_mb_at_this_q <= target_bits_per_mb) {
    357       if ((target_bits_per_mb - bits_per_mb_at_this_q) <= last_error)
    358         q = i;
    359       else
    360         q = i - 1;
    361 
    362       break;
    363     } else {
    364       last_error = bits_per_mb_at_this_q - target_bits_per_mb;
    365     }
    366   } while (++i <= cpi->active_worst_quality);
    367 
    368   return q;
    369 }
    370 
    371 
    372 static int estimate_keyframe_frequency(VP9_COMP *cpi) {
    373   int i;
    374 
    375   // Average key frame frequency
    376   int av_key_frame_frequency = 0;
    377 
    378   /* First key frame at start of sequence is a special case. We have no
    379    * frequency data.
    380    */
    381   if (cpi->key_frame_count == 1) {
    382     /* Assume a default of 1 kf every 2 seconds, or the max kf interval,
    383      * whichever is smaller.
    384      */
    385     int key_freq = cpi->oxcf.key_freq > 0 ? cpi->oxcf.key_freq : 1;
    386     av_key_frame_frequency = (int)cpi->output_framerate * 2;
    387 
    388     if (cpi->oxcf.auto_key && av_key_frame_frequency > key_freq)
    389       av_key_frame_frequency = cpi->oxcf.key_freq;
    390 
    391     cpi->prior_key_frame_distance[KEY_FRAME_CONTEXT - 1]
    392       = av_key_frame_frequency;
    393   } else {
    394     unsigned int total_weight = 0;
    395     int last_kf_interval =
    396       (cpi->frames_since_key > 0) ? cpi->frames_since_key : 1;
    397 
    398     /* reset keyframe context and calculate weighted average of last
    399      * KEY_FRAME_CONTEXT keyframes
    400      */
    401     for (i = 0; i < KEY_FRAME_CONTEXT; i++) {
    402       if (i < KEY_FRAME_CONTEXT - 1)
    403         cpi->prior_key_frame_distance[i]
    404           = cpi->prior_key_frame_distance[i + 1];
    405       else
    406         cpi->prior_key_frame_distance[i] = last_kf_interval;
    407 
    408       av_key_frame_frequency += prior_key_frame_weight[i]
    409                                 * cpi->prior_key_frame_distance[i];
    410       total_weight += prior_key_frame_weight[i];
    411     }
    412 
    413     av_key_frame_frequency /= total_weight;
    414   }
    415   return av_key_frame_frequency;
    416 }
    417 
    418 
    419 void vp9_adjust_key_frame_context(VP9_COMP *cpi) {
    420   // Clear down mmx registers to allow floating point in what follows
    421   vp9_clear_system_state();
    422 
    423   cpi->frames_since_key = 0;
    424   cpi->key_frame_count++;
    425 }
    426 
    427 
    428 void vp9_compute_frame_size_bounds(VP9_COMP *cpi, int *frame_under_shoot_limit,
    429                                    int *frame_over_shoot_limit) {
    430   // Set-up bounds on acceptable frame size:
    431   if (cpi->oxcf.fixed_q >= 0) {
    432     // Fixed Q scenario: frame size never outranges target (there is no target!)
    433     *frame_under_shoot_limit = 0;
    434     *frame_over_shoot_limit  = INT_MAX;
    435   } else {
    436     if (cpi->common.frame_type == KEY_FRAME) {
    437       *frame_over_shoot_limit  = cpi->this_frame_target * 9 / 8;
    438       *frame_under_shoot_limit = cpi->this_frame_target * 7 / 8;
    439     } else {
    440       if (cpi->refresh_alt_ref_frame || cpi->refresh_golden_frame) {
    441         *frame_over_shoot_limit  = cpi->this_frame_target * 9 / 8;
    442         *frame_under_shoot_limit = cpi->this_frame_target * 7 / 8;
    443       } else {
    444         // Stron overshoot limit for constrained quality
    445         if (cpi->oxcf.end_usage == USAGE_CONSTRAINED_QUALITY) {
    446           *frame_over_shoot_limit  = cpi->this_frame_target * 11 / 8;
    447           *frame_under_shoot_limit = cpi->this_frame_target * 2 / 8;
    448         } else {
    449           *frame_over_shoot_limit  = cpi->this_frame_target * 11 / 8;
    450           *frame_under_shoot_limit = cpi->this_frame_target * 5 / 8;
    451         }
    452       }
    453     }
    454 
    455     // For very small rate targets where the fractional adjustment
    456     // (eg * 7/8) may be tiny make sure there is at least a minimum
    457     // range.
    458     *frame_over_shoot_limit += 200;
    459     *frame_under_shoot_limit -= 200;
    460     if (*frame_under_shoot_limit < 0)
    461       *frame_under_shoot_limit = 0;
    462   }
    463 }
    464 
    465 
    466 // return of 0 means drop frame
    467 int vp9_pick_frame_size(VP9_COMP *cpi) {
    468   VP9_COMMON *cm = &cpi->common;
    469 
    470   if (cm->frame_type == KEY_FRAME)
    471     calc_iframe_target_size(cpi);
    472   else
    473     calc_pframe_target_size(cpi);
    474 
    475   return 1;
    476 }
    477