tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ratectrl.h (23367B)


      1 /*
      2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
      3 *
      4 * This source code is subject to the terms of the BSD 2 Clause License and
      5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
      6 * was not distributed with this source code in the LICENSE file, you can
      7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
      8 * Media Patent License 1.0 was not distributed with this source code in the
      9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
     10 */
     11 
     12 #ifndef AOM_AV1_ENCODER_RATECTRL_H_
     13 #define AOM_AV1_ENCODER_RATECTRL_H_
     14 
     15 #include "aom/aom_codec.h"
     16 #include "aom/aom_integer.h"
     17 
     18 #include "aom_ports/mem.h"
     19 
     20 #include "av1/common/av1_common_int.h"
     21 #include "av1/common/blockd.h"
     22 
     23 #ifdef __cplusplus
     24 extern "C" {
     25 #endif
     26 
     27 /*!\cond */
     28 
     29 // Bits Per MB at different Q (Multiplied by 512)
     30 #define BPER_MB_NORMBITS 9
     31 
     32 // Use this macro to turn on/off use of alt-refs in one-pass mode.
     33 #define USE_ALTREF_FOR_ONE_PASS 1
     34 
     35 // Threshold used to define if a KF group is static (e.g. a slide show).
     36 // Essentially, this means that no frame in the group has more than 1% of MBs
     37 // that are not marked as coded with 0,0 motion in the first pass.
     38 #define STATIC_KF_GROUP_THRESH 99
     39 #define STATIC_KF_GROUP_FLOAT_THRESH 0.99
     40 
     41 // The maximum duration of a GF group that is static (e.g. a slide show).
     42 #define MAX_STATIC_GF_GROUP_LENGTH 250
     43 
     44 #define MIN_GF_INTERVAL 4
     45 #define MAX_GF_INTERVAL 32
     46 #define FIXED_GF_INTERVAL 16
     47 #define MAX_GF_LENGTH_LAP 16
     48 
     49 #define FIXED_GF_INTERVAL_RT 80
     50 #define MAX_GF_INTERVAL_RT 160
     51 
     52 #define MAX_NUM_GF_INTERVALS 15
     53 
     54 #define MAX_ARF_LAYERS 6
     55 // #define STRICT_RC
     56 
     57 #define DEFAULT_KF_BOOST_RT 2300
     58 #define DEFAULT_GF_BOOST_RT 2000
     59 
     60 // A passive rate control strategy for screen content type in real-time mode.
     61 // When it is turned on, the compression performance is improved by
     62 // 7.8% (overall_psnr), 5.0% (VMAF) on average. Some clips see gains
     63 // over 20% on metric.
     64 // The downside is that it does not guarantee frame size.
     65 // Since RT mode has a tight restriction on buffer overflow control, we
     66 // turn it off by default.
     67 #define RT_PASSIVE_STRATEGY 0
     68 #define MAX_Q_HISTORY 1000
     69 
     70 typedef struct {
     71  int resize_width;
     72  int resize_height;
     73  uint8_t superres_denom;
     74 } size_params_type;
     75 
     76 enum {
     77  INTER_NORMAL,
     78  GF_ARF_LOW,
     79  GF_ARF_STD,
     80  KF_STD,
     81  RATE_FACTOR_LEVELS
     82 } UENUM1BYTE(RATE_FACTOR_LEVEL);
     83 
     84 enum {
     85  KF_UPDATE,
     86  LF_UPDATE,
     87  GF_UPDATE,
     88  ARF_UPDATE,
     89  OVERLAY_UPDATE,
     90  INTNL_OVERLAY_UPDATE,  // Internal Overlay Frame
     91  INTNL_ARF_UPDATE,      // Internal Altref Frame
     92  FRAME_UPDATE_TYPES
     93 } UENUM1BYTE(FRAME_UPDATE_TYPE);
     94 
     95 enum {
     96  REFBUF_RESET,   // Clear reference frame buffer
     97  REFBUF_UPDATE,  // Refresh reference frame buffer
     98  REFBUF_STATES
     99 } UENUM1BYTE(REFBUF_STATE);
    100 
    101 typedef enum {
    102  NO_RESIZE = 0,
    103  DOWN_THREEFOUR = 1,  // From orig to 3/4.
    104  DOWN_ONEHALF = 2,    // From orig or 3/4 to 1/2.
    105  UP_THREEFOUR = -1,   // From 1/2 to 3/4.
    106  UP_ORIG = -2,        // From 1/2 or 3/4 to orig.
    107 } RESIZE_ACTION;
    108 
    109 typedef enum { ORIG = 0, THREE_QUARTER = 1, ONE_HALF = 2 } RESIZE_STATE;
    110 
    111 #define MAX_FIRSTPASS_ANALYSIS_FRAMES 150
    112 typedef enum region_types {
    113  STABLE_REGION = 0,
    114  HIGH_VAR_REGION = 1,
    115  SCENECUT_REGION = 2,
    116  BLENDING_REGION = 3,
    117 } REGION_TYPES;
    118 
    119 typedef struct regions {
    120  int start;
    121  int last;
    122  double avg_noise_var;
    123  double avg_cor_coeff;
    124  double avg_sr_fr_ratio;
    125  double avg_intra_err;
    126  double avg_coded_err;
    127  REGION_TYPES type;
    128 } REGIONS;
    129 
    130 /*!\endcond */
    131 /*!
    132 * \brief  Rate Control parameters and status
    133 */
    134 typedef struct {
    135  // Rate targetting variables
    136 
    137  /*!
    138   * Baseline target rate for frame before adjustment for previous under or
    139   * over shoot.
    140   */
    141  int base_frame_target;
    142  /*!
    143   * Target rate for frame after adjustment for previous under or over shoot.
    144   */
    145  int this_frame_target;  // Actual frame target after rc adjustment.
    146 
    147  /*!
    148   * Projected size for current frame
    149   */
    150  int projected_frame_size;
    151 
    152  /*!
    153   * Bit size of transform coefficient for current frame.
    154   */
    155  int coefficient_size;
    156 
    157  /*!
    158   * Super block rate target used with some adaptive quantization strategies.
    159   */
    160  int sb64_target_rate;
    161 
    162  /*!
    163   * Number of frames since the last ARF / GF.
    164   */
    165  int frames_since_golden;
    166 
    167  /*!
    168   * Number of frames till the next ARF / GF is due.
    169   */
    170  int frames_till_gf_update_due;
    171 
    172  /*!
    173   * Number of determined gf groups left
    174   */
    175  int intervals_till_gf_calculate_due;
    176 
    177  /*!\cond */
    178  int min_gf_interval;
    179  int max_gf_interval;
    180  int static_scene_max_gf_interval;
    181  /*!\endcond */
    182  /*!
    183   * Frames before the next key frame
    184   */
    185  int frames_to_key;
    186  /*!\cond */
    187  int frames_since_key;
    188  int frames_to_fwd_kf;
    189  int is_src_frame_alt_ref;
    190  int sframe_due;
    191 
    192  int high_source_sad;
    193  int high_motion_content_screen_rtc;
    194  uint64_t avg_source_sad;
    195  uint64_t prev_avg_source_sad;
    196  uint64_t frame_source_sad;
    197  uint64_t frame_spatial_variance;
    198  int static_since_last_scene_change;
    199  int last_encoded_size_keyframe;
    200  int last_target_size_keyframe;
    201  int frames_since_scene_change;
    202  int perc_spatial_flat_blocks;
    203  int num_col_blscroll_last_tl0;
    204  int num_row_blscroll_last_tl0;
    205 
    206  int avg_frame_bandwidth;  // Average frame size target for clip
    207  int min_frame_bandwidth;  // Minimum allocation used for any frame
    208  int max_frame_bandwidth;  // Maximum burst rate allowed for a frame.
    209  int prev_avg_frame_bandwidth;
    210 
    211  int ni_av_qi;
    212  int ni_tot_qi;
    213 
    214  int decimation_factor;
    215  int decimation_count;
    216  int prev_frame_is_dropped;
    217  int drop_count_consec;
    218  int max_consec_drop;
    219  int force_max_q;
    220  int postencode_drop;
    221 
    222  /*!
    223   * Frame number for encoded frames (non-dropped).
    224   * Use for setting the rtc reference structure.
    225   */
    226  unsigned int frame_number_encoded;
    227 
    228  /*!\endcond */
    229  /*!
    230   * User specified maximum Q allowed for current frame
    231   */
    232  int worst_quality;
    233  /*!
    234   * User specified minimum Q allowed for current frame
    235   */
    236  int best_quality;
    237 
    238  /*!\cond */
    239 
    240  // rate control history for last frame(1) and the frame before(2).
    241  // -1: overshoot
    242  //  1: undershoot
    243  //  0: not initialized.
    244  int rc_1_frame;
    245  int rc_2_frame;
    246  int q_1_frame;
    247  int q_2_frame;
    248 
    249  /*!\endcond */
    250  /*!
    251   * Proposed maximum allowed Q for current frame
    252   */
    253  int active_worst_quality;
    254 
    255  /*!\cond */
    256  // Track amount of low motion in scene
    257  int avg_frame_low_motion;
    258  int cnt_zeromv;
    259 
    260  // signals if number of blocks with motion is high
    261  int percent_blocks_with_motion;
    262 
    263  // signals percentage of 16x16 blocks that are inactive, via active_maps
    264  int percent_blocks_inactive;
    265 
    266  // Maximum value of source sad across all blocks of frame.
    267  uint64_t max_block_source_sad;
    268 
    269  // For dynamic resize, 1 pass cbr.
    270  RESIZE_STATE resize_state;
    271  int resize_avg_qp;
    272  int resize_buffer_underflow;
    273  int resize_count;
    274 
    275  // Flag to disable content related qp adjustment.
    276  int rtc_external_ratectrl;
    277 
    278  // Stores fast_extra_bits of the current frame.
    279  int frame_level_fast_extra_bits;
    280 
    281  double frame_level_rate_correction_factors[RATE_FACTOR_LEVELS];
    282 
    283  int frame_num_last_gf_refresh;
    284 
    285  int prev_coded_width;
    286  int prev_coded_height;
    287 
    288  // The ratio used for inter frames in bit estimation.
    289  // TODO(yunqing): if golden frame is treated differently (e.g. gf_cbr_boost_
    290  // pct > THR), consider to add bit_est_ratio_g for golden frames.
    291  int bit_est_ratio;
    292 
    293  // Whether to use a fixed qp for the frame, bypassing internal rate control.
    294  // This flag will reset to 0 after every frame.
    295  int use_external_qp_one_pass;
    296  /*!\endcond */
    297 } RATE_CONTROL;
    298 
    299 /*!
    300 * \brief  Primary Rate Control parameters and status
    301 */
    302 typedef struct {
    303  // Sub-gop level Rate targetting variables
    304 
    305  /*!
    306   * Target bit budget for the current GF / ARF group of frame.
    307   */
    308  int64_t gf_group_bits;
    309 
    310  /*!
    311   * Boost factor used to calculate the extra bits allocated to the key frame
    312   */
    313  int kf_boost;
    314 
    315  /*!
    316   * Boost factor used to calculate the extra bits allocated to ARFs and GFs
    317   */
    318  int gfu_boost;
    319 
    320  /*!
    321   * Stores the determined gf group lengths for a set of gf groups
    322   */
    323  int gf_intervals[MAX_NUM_GF_INTERVALS];
    324 
    325  /*!
    326   * The current group's index into gf_intervals[]
    327   */
    328  int cur_gf_index;
    329 
    330  /*!\cond */
    331  int num_regions;
    332 
    333  REGIONS regions[MAX_FIRSTPASS_ANALYSIS_FRAMES];
    334  int regions_offset;  // offset of regions from the last keyframe
    335  int frames_till_regions_update;
    336 
    337  int baseline_gf_interval;
    338 
    339  int constrained_gf_group;
    340 
    341  int this_key_frame_forced;
    342 
    343  int next_key_frame_forced;
    344  /*!\endcond */
    345 
    346  /*!
    347   * Initial buffuer level in ms for CBR / low delay encoding
    348   */
    349  int64_t starting_buffer_level;
    350 
    351  /*!
    352   * Optimum / target buffuer level in ms for CBR / low delay encoding
    353   */
    354  int64_t optimal_buffer_level;
    355 
    356  /*!
    357   * Maximum target buffuer level in ms for CBR / low delay encoding
    358   */
    359  int64_t maximum_buffer_size;
    360 
    361  /*!
    362   * Q index used for ALT frame
    363   */
    364  int arf_q;
    365 
    366  /*!\cond */
    367  float_t arf_boost_factor;
    368 
    369  int base_layer_qp;
    370 
    371  // Total number of stats used only for kf_boost calculation.
    372  int num_stats_used_for_kf_boost;
    373 
    374  // Total number of stats used only for gfu_boost calculation.
    375  int num_stats_used_for_gfu_boost;
    376 
    377  // Total number of stats required by gfu_boost calculation.
    378  int num_stats_required_for_gfu_boost;
    379 
    380  int enable_scenecut_detection;
    381 
    382  int use_arf_in_this_kf_group;
    383 
    384  int ni_frames;
    385 
    386  double tot_q;
    387  /*!\endcond */
    388 
    389  /*!
    390   * Q used for last boosted (non leaf) frame
    391   */
    392  int last_kf_qindex;
    393 
    394  /*!
    395   * Average of q index of previous encoded frames in a sequence.
    396   */
    397  int avg_frame_qindex[FRAME_TYPES];
    398 
    399 #if CONFIG_FPMT_TEST
    400  /*!
    401   * Temporary variable used in simulating the delayed update of
    402   * active_best_quality.
    403   */
    404  int temp_active_best_quality[MAX_ARF_LAYERS + 1];
    405 
    406  /*!
    407   * Temporary variable used in simulating the delayed update of
    408   * last_boosted_qindex.
    409   */
    410  int temp_last_boosted_qindex;
    411 
    412  /*!
    413   * Temporary variable used in simulating the delayed update of
    414   * avg_q.
    415   */
    416  double temp_avg_q;
    417 
    418  /*!
    419   * Temporary variable used in simulating the delayed update of
    420   * last_q.
    421   */
    422  int temp_last_q[FRAME_TYPES];
    423 
    424  /*!
    425   * Temporary variable used in simulating the delayed update of
    426   * projected_frame_size.
    427   */
    428  int temp_projected_frame_size;
    429 
    430  /*!
    431   * Temporary variable used in simulating the delayed update of
    432   * total_actual_bits.
    433   */
    434  int64_t temp_total_actual_bits;
    435 
    436  /*!
    437   * Temporary variable used in simulating the delayed update of
    438   * buffer_level.
    439   */
    440  int64_t temp_buffer_level;
    441 
    442  /*!
    443   * Temporary variable used in simulating the delayed update of
    444   * vbr_bits_off_target.
    445   */
    446  int64_t temp_vbr_bits_off_target;
    447 
    448  /*!
    449   * Temporary variable used in simulating the delayed update of
    450   * vbr_bits_off_target_fast.
    451   */
    452  int64_t temp_vbr_bits_off_target_fast;
    453 
    454  /*!
    455   * Temporary variable used in simulating the delayed update of
    456   * rate_correction_factors.
    457   */
    458  double temp_rate_correction_factors[RATE_FACTOR_LEVELS];
    459 
    460  /*!
    461   * Temporary variable used in simulating the delayed update of
    462   * rate_error_estimate.
    463   */
    464  int temp_rate_error_estimate;
    465 
    466  /*!
    467   * Temporary variable used in simulating the delayed update of
    468   * rolling_arf_group_target_bits.
    469   */
    470  int temp_rolling_arf_group_target_bits;
    471 
    472  /*!
    473   * Temporary variable used in simulating the delayed update of
    474   * rolling_arf_group_actual_bits;.
    475   */
    476  int temp_rolling_arf_group_actual_bits;
    477 
    478  /*!
    479   * Temporary variable used in simulating the delayed update of
    480   * bits_left;.
    481   */
    482  int64_t temp_bits_left;
    483 
    484  /*!
    485   * Temporary variable used in simulating the delayed update of
    486   * extend_minq.
    487   */
    488  int temp_extend_minq;
    489 
    490  /*!
    491   * Temporary variable used in simulating the delayed update of
    492   * extend_maxq.
    493   */
    494  int temp_extend_maxq;
    495 
    496 #endif
    497  /*!
    498   * Proposed minimum allowed Q different layers in a coding pyramid
    499   */
    500  int active_best_quality[MAX_ARF_LAYERS + 1];
    501 
    502  /*!
    503   * Q used for last boosted (non leaf) frame (GF/KF/ARF)
    504   */
    505  int last_boosted_qindex;
    506 
    507  /*!
    508   * Average Q value of previous inter frames
    509   */
    510  double avg_q;
    511 
    512  /*!
    513   * Q used on last encoded frame of the given type.
    514   */
    515  int last_q[FRAME_TYPES];
    516 
    517  /*!
    518   * Correction factors used to adjust the q estimate for a given target rate
    519   * in the encode loop.
    520   */
    521  double rate_correction_factors[RATE_FACTOR_LEVELS];
    522 
    523  /*!
    524   * Current total consumed bits.
    525   */
    526  int64_t total_actual_bits;
    527 
    528  /*!
    529   * Current total target bits.
    530   */
    531  int64_t total_target_bits;
    532 
    533  /*!
    534   * Current buffer level.
    535   */
    536  int64_t buffer_level;
    537 
    538  /*!
    539   * PCT rc error.
    540   */
    541  int rate_error_estimate;
    542 
    543  /*!
    544   * Error bits available from previously encoded frames.
    545   */
    546  int64_t vbr_bits_off_target;
    547 
    548  /*!
    549   * Error bits available from previously encoded frames undershoot.
    550   */
    551  int64_t vbr_bits_off_target_fast;
    552 
    553  /*!
    554   * Total bits deviated from the average frame target, from previously
    555   * encoded frames.
    556   */
    557  int64_t bits_off_target;
    558 
    559  /*!
    560   * Rolling monitor target bits updated based on current frame target size.
    561   */
    562  int rolling_target_bits;
    563 
    564  /*!
    565   * Rolling monitor actual bits updated based on current frame final projected
    566   * size.
    567   */
    568  int rolling_actual_bits;
    569 
    570  /*!
    571   * The history of qindex for each frame.
    572   * Only used when RT_PASSIVE_STRATEGY = 1.
    573   */
    574  int q_history[MAX_Q_HISTORY];
    575 } PRIMARY_RATE_CONTROL;
    576 
    577 /*!\cond */
    578 
    579 struct AV1_COMP;
    580 struct AV1EncoderConfig;
    581 struct GF_GROUP;
    582 
    583 void av1_primary_rc_init(const struct AV1EncoderConfig *oxcf,
    584                         PRIMARY_RATE_CONTROL *p_rc);
    585 
    586 void av1_rc_init(const struct AV1EncoderConfig *oxcf, RATE_CONTROL *rc);
    587 
    588 int av1_estimate_bits_at_q(const struct AV1_COMP *cpi, int q,
    589                           double correction_factor);
    590 
    591 double av1_convert_qindex_to_q(int qindex, aom_bit_depth_t bit_depth);
    592 
    593 // Converts a Q value to a qindex.
    594 int av1_convert_q_to_qindex(double q, aom_bit_depth_t bit_depth);
    595 
    596 void av1_rc_init_minq_luts(void);
    597 
    598 int av1_rc_get_default_min_gf_interval(int width, int height, double framerate);
    599 
    600 // Generally at the high level, the following flow is expected
    601 // to be enforced for rate control:
    602 // First call per frame, one of:
    603 //   av1_get_one_pass_rt_params()
    604 //   av1_get_second_pass_params()
    605 // depending on the usage to set the rate control encode parameters desired.
    606 //
    607 // Then, call encode_frame_to_data_rate() to perform the
    608 // actual encode. This function will in turn call encode_frame()
    609 // one or more times, followed by:
    610 //   av1_rc_postencode_update_drop_frame()
    611 //
    612 // The majority of rate control parameters are only expected
    613 // to be set in the av1_get_..._params() functions and
    614 // updated during the av1_rc_postencode_update...() functions.
    615 // The only exceptions are av1_rc_drop_frame() and
    616 // av1_rc_update_rate_correction_factors() functions.
    617 
    618 // Functions to set parameters for encoding before the actual
    619 // encode_frame_to_data_rate() function.
    620 struct EncodeFrameInput;
    621 
    622 // Post encode update of the rate control parameters based
    623 // on bytes used
    624 void av1_rc_postencode_update(struct AV1_COMP *cpi, uint64_t bytes_used);
    625 // Post encode update of the rate control parameters for dropped frames
    626 void av1_rc_postencode_update_drop_frame(struct AV1_COMP *cpi);
    627 
    628 /*!\endcond */
    629 /*!\brief Updates the rate correction factor linking Q to output bits
    630 *
    631 * This function updates the Q rate correction factor after an encode
    632 * cycle depending on whether we overshot or undershot the target rate.
    633 *
    634 * \ingroup rate_control
    635 * \param[in]   cpi                   Top level encoder instance structure
    636 * \param[in]   is_encode_stage       Indicates if recode loop or post-encode
    637 * \param[in]   width                 Frame width
    638 * \param[in]   height                Frame height
    639 *
    640 * \remark Updates the relevant rate correction factor in cpi->rc
    641 */
    642 void av1_rc_update_rate_correction_factors(struct AV1_COMP *cpi,
    643                                           int is_encode_stage, int width,
    644                                           int height);
    645 /*!\cond */
    646 
    647 // Decide if we should drop this frame: For 1-pass CBR.
    648 // Changes only the decimation count in the rate control structure
    649 int av1_rc_drop_frame(struct AV1_COMP *cpi);
    650 
    651 // Computes frame size bounds.
    652 void av1_rc_compute_frame_size_bounds(const struct AV1_COMP *cpi,
    653                                      int this_frame_target,
    654                                      int *frame_under_shoot_limit,
    655                                      int *frame_over_shoot_limit);
    656 
    657 /*!\endcond */
    658 
    659 /*!\brief Picks q and q bounds given the rate control parameters in \c cpi->rc.
    660 *
    661 * \ingroup rate_control
    662 * \param[in]       cpi          Top level encoder structure
    663 * \param[in]       width        Coded frame width
    664 * \param[in]       height       Coded frame height
    665 * \param[in]       gf_index     Index of this frame in the golden frame group
    666 * \param[out]      bottom_index Bottom bound for q index (best quality)
    667 * \param[out]      top_index    Top bound for q index (worst quality)
    668 * \return Returns selected q index to be used for encoding this frame.
    669 * Also, updates \c rc->arf_q.
    670 */
    671 int av1_rc_pick_q_and_bounds(struct AV1_COMP *cpi, int width, int height,
    672                             int gf_index, int *bottom_index, int *top_index);
    673 
    674 /*!\brief Estimates q to achieve a target bits per frame
    675 *
    676 * \ingroup rate_control
    677 * \param[in]   cpi                   Top level encoder instance structure
    678 * \param[in]   target_bits_per_frame Frame rate target
    679 * \param[in]   active_worst_quality  Max Q allowed
    680 * \param[in]   active_best_quality   Min Q allowed
    681 * \param[in]   width                 Frame width
    682 * \param[in]   height                Frame height
    683 *
    684 * \return Returns a q index value
    685 */
    686 int av1_rc_regulate_q(const struct AV1_COMP *cpi, int target_bits_per_frame,
    687                      int active_best_quality, int active_worst_quality,
    688                      int width, int height);
    689 
    690 /*!\cond */
    691 // Estimates bits per mb for a given qindex and correction factor.
    692 int av1_rc_bits_per_mb(const struct AV1_COMP *cpi, FRAME_TYPE frame_type,
    693                       int qindex, double correction_factor,
    694                       int accurate_estimate);
    695 
    696 // Find q_index corresponding to desired_q, within [best_qindex, worst_qindex].
    697 // To be precise, 'q_index' is the smallest integer, for which the corresponding
    698 // q >= desired_q.
    699 // If no such q index is found, returns 'worst_qindex'.
    700 int av1_find_qindex(double desired_q, aom_bit_depth_t bit_depth,
    701                    int best_qindex, int worst_qindex);
    702 
    703 // Computes a q delta (in "q index" terms) to get from a starting q value
    704 // to a target q value
    705 int av1_compute_qdelta(const RATE_CONTROL *rc, double qstart, double qtarget,
    706                       aom_bit_depth_t bit_depth);
    707 
    708 // Computes a q delta (in "q index" terms) to get from a starting q value
    709 // to a value that should equate to the given rate ratio.
    710 int av1_compute_qdelta_by_rate(const struct AV1_COMP *cpi,
    711                               FRAME_TYPE frame_type, int qindex,
    712                               double rate_target_ratio);
    713 
    714 void av1_rc_update_framerate(struct AV1_COMP *cpi, int width, int height);
    715 
    716 void av1_set_target_rate(struct AV1_COMP *cpi, int width, int height);
    717 
    718 int av1_resize_one_pass_cbr(struct AV1_COMP *cpi);
    719 
    720 void av1_rc_set_frame_target(struct AV1_COMP *cpi, int target, int width,
    721                             int height);
    722 
    723 void av1_adjust_gf_refresh_qp_one_pass_rt(struct AV1_COMP *cpi);
    724 
    725 void av1_set_rtc_reference_structure_one_layer(struct AV1_COMP *cpi,
    726                                               int gf_update);
    727 
    728 /*!\endcond */
    729 /*!\brief Calculates how many bits to use for a P frame in one pass vbr
    730 *
    731 * \ingroup rate_control
    732 * \callgraph
    733 * \callergraph
    734 *
    735 * \param[in]       cpi                 Top level encoder structure
    736 * \param[in]       frame_update_type   Type of frame
    737 *
    738 * \return	Returns the target number of bits for this frame.
    739 */
    740 int av1_calc_pframe_target_size_one_pass_vbr(
    741    const struct AV1_COMP *const cpi, FRAME_UPDATE_TYPE frame_update_type);
    742 
    743 /*!\brief Calculates how many bits to use for an i frame in one pass vbr
    744 *
    745 * \ingroup rate_control
    746 * \callgraph
    747 * \callergraph
    748 *
    749 * \param[in]       cpi  Top level encoder structure
    750 *
    751 * \return	Returns the target number of bits for this frame.
    752 */
    753 int av1_calc_iframe_target_size_one_pass_vbr(const struct AV1_COMP *const cpi);
    754 
    755 /*!\brief Calculates how many bits to use for a P frame in one pass cbr
    756 *
    757 * \ingroup rate_control
    758 * \callgraph
    759 * \callergraph
    760 *
    761 * \param[in]       cpi                 Top level encoder structure
    762 * \param[in]       frame_update_type   Type of frame
    763 *
    764 * \return  Returns the target number of bits for this frame.
    765 */
    766 int av1_calc_pframe_target_size_one_pass_cbr(
    767    const struct AV1_COMP *cpi, FRAME_UPDATE_TYPE frame_update_type);
    768 
    769 /*!\brief Calculates how many bits to use for an i frame in one pass cbr
    770 *
    771 * \ingroup rate_control
    772 * \callgraph
    773 * \callergraph
    774 *
    775 * \param[in]       cpi  Top level encoder structure
    776 *
    777 * \return  Returns the target number of bits for this frame.
    778 */
    779 int av1_calc_iframe_target_size_one_pass_cbr(const struct AV1_COMP *cpi);
    780 
    781 /*!\brief Setup the rate control parameters for 1 pass real-time mode.
    782 *
    783 * - Sets the frame type and target frame size.
    784 * - Sets the GF update.
    785 * - Checks for scene change.
    786 * - Sets the reference prediction structure for 1 layers (non-SVC).
    787 * - Resets and updates are done for SVC.
    788 *
    789 * \ingroup rate_control
    790 * \param[in]       cpi          Top level encoder structure
    791 * \param[in]       frame_type   Encoder frame type
    792 * \param[in]       frame_input  Current and last input source frames
    793 * \param[in]       frame_flags  Encoder frame flags
    794 *
    795 * \remark Nothing is returned. Instead the settings computed in this
    796 * function are set in: \c frame_params, \c cpi->common, \c cpi->rc,
    797 * \c cpi->svc.
    798 */
    799 void av1_get_one_pass_rt_params(struct AV1_COMP *cpi,
    800                                FRAME_TYPE *const frame_type,
    801                                const struct EncodeFrameInput *frame_input,
    802                                unsigned int frame_flags);
    803 
    804 /*!\brief Increase q on expected encoder overshoot, for CBR mode.
    805 *
    806 *  Handles the case when encoder is expected to create a large frame:
    807 *  - q is increased to value closer to \c cpi->rc.worst_quality
    808 *  - avg_frame_qindex is reset
    809 *  - buffer levels are reset
    810 *  - rate correction factor is adjusted
    811 *
    812 * \ingroup rate_control
    813 * \param[in]       cpi          Top level encoder structure
    814 * \param[in]        q           Current q index
    815 *
    816 * \return q is returned, and updates are done to \c cpi->rc.
    817 */
    818 int av1_encodedframe_overshoot_cbr(struct AV1_COMP *cpi, int *q);
    819 
    820 /*!\brief Check if frame should be dropped, for RTC mode.
    821 *
    822 * \ingroup rate_control
    823 * \param[in]       cpi          Top level encoder structure
    824 * \param[in,out]       size         Size of encoded frame
    825 *
    826 * \return 1 if frame is to be dropped, 0 otherwise (no drop).
    827 * Set cpi->rc.force_max_q if frame is to be dropped, and updates are
    828 * made to rate control parameters. *size is set to 0 when this
    829 * function returns 1 (frame is dropped).
    830 */
    831 int av1_postencode_drop_cbr(struct AV1_COMP *cpi, size_t *size);
    832 
    833 #ifdef __cplusplus
    834 }  // extern "C"
    835 #endif
    836 
    837 #endif  // AOM_AV1_ENCODER_RATECTRL_H_