• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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   uint64_t avg_source_sad;
194   uint64_t prev_avg_source_sad;
195   uint64_t frame_source_sad;
196 
197   int avg_frame_bandwidth;  // Average frame size target for clip
198   int min_frame_bandwidth;  // Minimum allocation used for any frame
199   int max_frame_bandwidth;  // Maximum burst rate allowed for a frame.
200   int prev_avg_frame_bandwidth;
201 
202   int ni_av_qi;
203   int ni_tot_qi;
204 
205   int decimation_factor;
206   int decimation_count;
207 
208   /*!\endcond */
209   /*!
210    * User specified maximum Q allowed for current frame
211    */
212   int worst_quality;
213   /*!
214    * User specified minimum Q allowed for current frame
215    */
216   int best_quality;
217 
218   /*!\cond */
219 
220   // rate control history for last frame(1) and the frame before(2).
221   // -1: overshoot
222   //  1: undershoot
223   //  0: not initialized.
224   int rc_1_frame;
225   int rc_2_frame;
226   int q_1_frame;
227   int q_2_frame;
228 
229   /*!\endcond */
230   /*!
231    * Proposed maximum allowed Q for current frame
232    */
233   int active_worst_quality;
234 
235   /*!\cond */
236   // Track amount of low motion in scene
237   int avg_frame_low_motion;
238   int cnt_zeromv;
239 
240   // signals if number of blocks with motion is high
241   int percent_blocks_with_motion;
242 
243   // Maximum value of source sad across all blocks of frame.
244   uint64_t max_block_source_sad;
245 
246   // For dynamic resize, 1 pass cbr.
247   RESIZE_STATE resize_state;
248   int resize_avg_qp;
249   int resize_buffer_underflow;
250   int resize_count;
251 
252   // Flag to disable content related qp adjustment.
253   int rtc_external_ratectrl;
254 
255   // Stores fast_extra_bits of the current frame.
256   int frame_level_fast_extra_bits;
257 
258   double frame_level_rate_correction_factors[RATE_FACTOR_LEVELS];
259 
260   int frame_num_last_gf_refresh;
261 
262   int prev_coded_width;
263   int prev_coded_height;
264   /*!\endcond */
265 } RATE_CONTROL;
266 
267 /*!
268  * \brief  Primary Rate Control parameters and status
269  */
270 typedef struct {
271   // Sub-gop level Rate targetting variables
272 
273   /*!
274    * Target bit budget for the current GF / ARF group of frame.
275    */
276   int64_t gf_group_bits;
277 
278   /*!
279    * Boost factor used to calculate the extra bits allocated to the key frame
280    */
281   int kf_boost;
282 
283   /*!
284    * Boost factor used to calculate the extra bits allocated to ARFs and GFs
285    */
286   int gfu_boost;
287 
288   /*!
289    * Stores the determined gf group lengths for a set of gf groups
290    */
291   int gf_intervals[MAX_NUM_GF_INTERVALS];
292 
293   /*!
294    * The current group's index into gf_intervals[]
295    */
296   int cur_gf_index;
297 
298   /*!\cond */
299   int num_regions;
300 
301   REGIONS regions[MAX_FIRSTPASS_ANALYSIS_FRAMES];
302   int regions_offset;  // offset of regions from the last keyframe
303   int frames_till_regions_update;
304 
305   int baseline_gf_interval;
306 
307   int constrained_gf_group;
308 
309   int this_key_frame_forced;
310 
311   int next_key_frame_forced;
312   /*!\endcond */
313 
314   /*!
315    * Initial buffuer level in ms for CBR / low delay encoding
316    */
317   int64_t starting_buffer_level;
318 
319   /*!
320    * Optimum / target buffuer level in ms for CBR / low delay encoding
321    */
322   int64_t optimal_buffer_level;
323 
324   /*!
325    * Maximum target buffuer level in ms for CBR / low delay encoding
326    */
327   int64_t maximum_buffer_size;
328 
329   /*!
330    * Q index used for ALT frame
331    */
332   int arf_q;
333 
334   /*!\cond */
335   float_t arf_boost_factor;
336 
337   int base_layer_qp;
338 
339   // Total number of stats used only for kf_boost calculation.
340   int num_stats_used_for_kf_boost;
341 
342   // Total number of stats used only for gfu_boost calculation.
343   int num_stats_used_for_gfu_boost;
344 
345   // Total number of stats required by gfu_boost calculation.
346   int num_stats_required_for_gfu_boost;
347 
348   int enable_scenecut_detection;
349 
350   int use_arf_in_this_kf_group;
351 
352   int ni_frames;
353 
354   double tot_q;
355   /*!\endcond */
356 
357   /*!
358    * Q used for last boosted (non leaf) frame
359    */
360   int last_kf_qindex;
361 
362   /*!
363    * Average of q index of previous encoded frames in a sequence.
364    */
365   int avg_frame_qindex[FRAME_TYPES];
366 
367 #if CONFIG_FPMT_TEST
368   /*!
369    * Temporary variable used in simulating the delayed update of
370    * active_best_quality.
371    */
372   int temp_active_best_quality[MAX_ARF_LAYERS + 1];
373 
374   /*!
375    * Temporary variable used in simulating the delayed update of
376    * last_boosted_qindex.
377    */
378   int temp_last_boosted_qindex;
379 
380   /*!
381    * Temporary variable used in simulating the delayed update of
382    * avg_q.
383    */
384   double temp_avg_q;
385 
386   /*!
387    * Temporary variable used in simulating the delayed update of
388    * last_q.
389    */
390   int temp_last_q[FRAME_TYPES];
391 
392   /*!
393    * Temporary variable used in simulating the delayed update of
394    * projected_frame_size.
395    */
396   int temp_projected_frame_size;
397 
398   /*!
399    * Temporary variable used in simulating the delayed update of
400    * total_actual_bits.
401    */
402   int64_t temp_total_actual_bits;
403 
404   /*!
405    * Temporary variable used in simulating the delayed update of
406    * buffer_level.
407    */
408   int64_t temp_buffer_level;
409 
410   /*!
411    * Temporary variable used in simulating the delayed update of
412    * vbr_bits_off_target.
413    */
414   int64_t temp_vbr_bits_off_target;
415 
416   /*!
417    * Temporary variable used in simulating the delayed update of
418    * vbr_bits_off_target_fast.
419    */
420   int64_t temp_vbr_bits_off_target_fast;
421 
422   /*!
423    * Temporary variable used in simulating the delayed update of
424    * rate_correction_factors.
425    */
426   double temp_rate_correction_factors[RATE_FACTOR_LEVELS];
427 
428   /*!
429    * Temporary variable used in simulating the delayed update of
430    * rate_error_estimate.
431    */
432   int temp_rate_error_estimate;
433 
434   /*!
435    * Temporary variable used in simulating the delayed update of
436    * rolling_arf_group_target_bits.
437    */
438   int temp_rolling_arf_group_target_bits;
439 
440   /*!
441    * Temporary variable used in simulating the delayed update of
442    * rolling_arf_group_actual_bits;.
443    */
444   int temp_rolling_arf_group_actual_bits;
445 
446   /*!
447    * Temporary variable used in simulating the delayed update of
448    * bits_left;.
449    */
450   int64_t temp_bits_left;
451 
452   /*!
453    * Temporary variable used in simulating the delayed update of
454    * extend_minq.
455    */
456   int temp_extend_minq;
457 
458   /*!
459    * Temporary variable used in simulating the delayed update of
460    * extend_maxq.
461    */
462   int temp_extend_maxq;
463 
464   /*!
465    * Temporary variable used in simulating the delayed update of
466    * extend_minq_fast.
467    */
468   int temp_extend_minq_fast;
469 #endif
470   /*!
471    * Proposed minimum allowed Q different layers in a coding pyramid
472    */
473   int active_best_quality[MAX_ARF_LAYERS + 1];
474 
475   /*!
476    * Q used for last boosted (non leaf) frame (GF/KF/ARF)
477    */
478   int last_boosted_qindex;
479 
480   /*!
481    * Average Q value of previous inter frames
482    */
483   double avg_q;
484 
485   /*!
486    * Q used on last encoded frame of the given type.
487    */
488   int last_q[FRAME_TYPES];
489 
490   /*!
491    * Correction factors used to adjust the q estimate for a given target rate
492    * in the encode loop.
493    */
494   double rate_correction_factors[RATE_FACTOR_LEVELS];
495 
496   /*!
497    * Current total consumed bits.
498    */
499   int64_t total_actual_bits;
500 
501   /*!
502    * Current total target bits.
503    */
504   int64_t total_target_bits;
505 
506   /*!
507    * Current buffer level.
508    */
509   int64_t buffer_level;
510 
511   /*!
512    * PCT rc error.
513    */
514   int rate_error_estimate;
515 
516   /*!
517    * Error bits available from previously encoded frames.
518    */
519   int64_t vbr_bits_off_target;
520 
521   /*!
522    * Error bits available from previously encoded frames undershoot.
523    */
524   int64_t vbr_bits_off_target_fast;
525 
526   /*!
527    * Total bits deviated from the average frame target, from previously
528    * encoded frames.
529    */
530   int64_t bits_off_target;
531 
532   /*!
533    * Rolling monitor target bits updated based on current frame target size.
534    */
535   int rolling_target_bits;
536 
537   /*!
538    * Rolling monitor actual bits updated based on current frame final projected
539    * size.
540    */
541   int rolling_actual_bits;
542 
543   /*!
544    * The history of qindex for each frame.
545    * Only used when RT_PASSIVE_STRATEGY = 1.
546    */
547   int q_history[MAX_Q_HISTORY];
548 } PRIMARY_RATE_CONTROL;
549 
550 /*!\cond */
551 
552 struct AV1_COMP;
553 struct AV1EncoderConfig;
554 struct GF_GROUP;
555 
556 void av1_primary_rc_init(const struct AV1EncoderConfig *oxcf,
557                          PRIMARY_RATE_CONTROL *p_rc);
558 
559 void av1_rc_init(const struct AV1EncoderConfig *oxcf, RATE_CONTROL *rc);
560 
561 int av1_estimate_bits_at_q(const struct AV1_COMP *cpi, int q,
562                            double correction_factor);
563 
564 double av1_convert_qindex_to_q(int qindex, aom_bit_depth_t bit_depth);
565 
566 void av1_rc_init_minq_luts(void);
567 
568 int av1_rc_get_default_min_gf_interval(int width, int height, double framerate);
569 // Note av1_rc_get_default_max_gf_interval() requires the min_gf_interval to
570 // be passed in to ensure that the max_gf_interval returned is at least as bis
571 // as that.
572 int av1_rc_get_default_max_gf_interval(double framerate, int min_gf_interval);
573 
574 // Generally at the high level, the following flow is expected
575 // to be enforced for rate control:
576 // First call per frame, one of:
577 //   av1_get_one_pass_rt_params()
578 //   av1_get_second_pass_params()
579 // depending on the usage to set the rate control encode parameters desired.
580 //
581 // Then, call encode_frame_to_data_rate() to perform the
582 // actual encode. This function will in turn call encode_frame()
583 // one or more times, followed by:
584 //   av1_rc_postencode_update_drop_frame()
585 //
586 // The majority of rate control parameters are only expected
587 // to be set in the av1_get_..._params() functions and
588 // updated during the av1_rc_postencode_update...() functions.
589 // The only exceptions are av1_rc_drop_frame() and
590 // av1_rc_update_rate_correction_factors() functions.
591 
592 // Functions to set parameters for encoding before the actual
593 // encode_frame_to_data_rate() function.
594 struct EncodeFrameInput;
595 
596 // Post encode update of the rate control parameters based
597 // on bytes used
598 void av1_rc_postencode_update(struct AV1_COMP *cpi, uint64_t bytes_used);
599 // Post encode update of the rate control parameters for dropped frames
600 void av1_rc_postencode_update_drop_frame(struct AV1_COMP *cpi);
601 
602 /*!\endcond */
603 /*!\brief Updates the rate correction factor linking Q to output bits
604  *
605  * This function updates the Q rate correction factor after an encode
606  * cycle depending on whether we overshot or undershot the target rate.
607  *
608  * \ingroup rate_control
609  * \param[in]   cpi                   Top level encoder instance structure
610  * \param[in]   is_encode_stage       Indicates if recode loop or post-encode
611  * \param[in]   width                 Frame width
612  * \param[in]   height                Frame height
613  *
614  * \remark Updates the relevant rate correction factor in cpi->rc
615  */
616 void av1_rc_update_rate_correction_factors(struct AV1_COMP *cpi,
617                                            int is_encode_stage, int width,
618                                            int height);
619 /*!\cond */
620 
621 // Decide if we should drop this frame: For 1-pass CBR.
622 // Changes only the decimation count in the rate control structure
623 int av1_rc_drop_frame(struct AV1_COMP *cpi);
624 
625 // Computes frame size bounds.
626 void av1_rc_compute_frame_size_bounds(const struct AV1_COMP *cpi,
627                                       int this_frame_target,
628                                       int *frame_under_shoot_limit,
629                                       int *frame_over_shoot_limit);
630 
631 /*!\endcond */
632 
633 /*!\brief Picks q and q bounds given the rate control parameters in \c cpi->rc.
634  *
635  * \ingroup rate_control
636  * \param[in]       cpi          Top level encoder structure
637  * \param[in]       width        Coded frame width
638  * \param[in]       height       Coded frame height
639  * \param[in]       gf_index     Index of this frame in the golden frame group
640  * \param[out]      bottom_index Bottom bound for q index (best quality)
641  * \param[out]      top_index    Top bound for q index (worst quality)
642  * \return Returns selected q index to be used for encoding this frame.
643  * Also, updates \c rc->arf_q.
644  */
645 int av1_rc_pick_q_and_bounds(struct AV1_COMP *cpi, int width, int height,
646                              int gf_index, int *bottom_index, int *top_index);
647 
648 /*!\brief Estimates q to achieve a target bits per frame
649  *
650  * \ingroup rate_control
651  * \param[in]   cpi                   Top level encoder instance structure
652  * \param[in]   target_bits_per_frame Frame rate target
653  * \param[in]   active_worst_quality  Max Q allowed
654  * \param[in]   active_best_quality   Min Q allowed
655  * \param[in]   width                 Frame width
656  * \param[in]   height                Frame height
657  *
658  * \return Returns a q index value
659  */
660 int av1_rc_regulate_q(const struct AV1_COMP *cpi, int target_bits_per_frame,
661                       int active_best_quality, int active_worst_quality,
662                       int width, int height);
663 
664 /*!\cond */
665 // Gets the appropriate bpmb ennumerator based on the frame and content type
666 int av1_get_bpmb_enumerator(FRAME_TYPE frame_type,
667                             const int is_screen_content_type);
668 
669 // Estimates bits per mb for a given qindex and correction factor.
670 int av1_rc_bits_per_mb(const struct AV1_COMP *cpi, FRAME_TYPE frame_type,
671                        int qindex, double correction_factor,
672                        int accurate_estimate);
673 
674 // Clamping utilities for bitrate targets for iframes and pframes.
675 int av1_rc_clamp_iframe_target_size(const struct AV1_COMP *const cpi,
676                                     int64_t target);
677 int av1_rc_clamp_pframe_target_size(const struct AV1_COMP *const cpi,
678                                     int target, uint8_t frame_update_type);
679 
680 // Find q_index corresponding to desired_q, within [best_qindex, worst_qindex].
681 // To be precise, 'q_index' is the smallest integer, for which the corresponding
682 // q >= desired_q.
683 // If no such q index is found, returns 'worst_qindex'.
684 int av1_find_qindex(double desired_q, aom_bit_depth_t bit_depth,
685                     int best_qindex, int worst_qindex);
686 
687 // Computes a q delta (in "q index" terms) to get from a starting q value
688 // to a target q value
689 int av1_compute_qdelta(const RATE_CONTROL *rc, double qstart, double qtarget,
690                        aom_bit_depth_t bit_depth);
691 
692 // Computes a q delta (in "q index" terms) to get from a starting q value
693 // to a value that should equate to the given rate ratio.
694 int av1_compute_qdelta_by_rate(const struct AV1_COMP *cpi,
695                                FRAME_TYPE frame_type, int qindex,
696                                double rate_target_ratio);
697 
698 int av1_frame_type_qdelta(const struct AV1_COMP *cpi, int q);
699 
700 void av1_rc_update_framerate(struct AV1_COMP *cpi, int width, int height);
701 
702 void av1_rc_set_gf_interval_range(const struct AV1_COMP *const cpi,
703                                   RATE_CONTROL *const rc);
704 
705 void av1_set_target_rate(struct AV1_COMP *cpi, int width, int height);
706 
707 int av1_resize_one_pass_cbr(struct AV1_COMP *cpi);
708 
709 void av1_rc_set_frame_target(struct AV1_COMP *cpi, int target, int width,
710                              int height);
711 
712 void av1_adjust_gf_refresh_qp_one_pass_rt(struct AV1_COMP *cpi);
713 
714 void av1_set_rtc_reference_structure_one_layer(struct AV1_COMP *cpi,
715                                                int gf_update);
716 
717 /*!\endcond */
718 /*!\brief Calculates how many bits to use for a P frame in one pass vbr
719  *
720  * \ingroup rate_control
721  * \callgraph
722  * \callergraph
723  *
724  * \param[in]       cpi                 Top level encoder structure
725  * \param[in]       frame_update_type   Type of frame
726  *
727  * \return	Returns the target number of bits for this frame.
728  */
729 int av1_calc_pframe_target_size_one_pass_vbr(
730     const struct AV1_COMP *const cpi, FRAME_UPDATE_TYPE frame_update_type);
731 
732 /*!\brief Calculates how many bits to use for an i frame in one pass vbr
733  *
734  * \ingroup rate_control
735  * \callgraph
736  * \callergraph
737  *
738  * \param[in]       cpi  Top level encoder structure
739  *
740  * \return	Returns the target number of bits for this frame.
741  */
742 int av1_calc_iframe_target_size_one_pass_vbr(const struct AV1_COMP *const cpi);
743 
744 /*!\brief Calculates how many bits to use for a P frame in one pass cbr
745  *
746  * \ingroup rate_control
747  * \callgraph
748  * \callergraph
749  *
750  * \param[in]       cpi                 Top level encoder structure
751  * \param[in]       frame_update_type   Type of frame
752  *
753  * \return  Returns the target number of bits for this frame.
754  */
755 int av1_calc_pframe_target_size_one_pass_cbr(
756     const struct AV1_COMP *cpi, FRAME_UPDATE_TYPE frame_update_type);
757 
758 /*!\brief Calculates how many bits to use for an i frame in one pass cbr
759  *
760  * \ingroup rate_control
761  * \callgraph
762  * \callergraph
763  *
764  * \param[in]       cpi  Top level encoder structure
765  *
766  * \return  Returns the target number of bits for this frame.
767  */
768 int av1_calc_iframe_target_size_one_pass_cbr(const struct AV1_COMP *cpi);
769 
770 /*!\brief Setup the rate control parameters for 1 pass real-time mode.
771  *
772  * - Sets the frame type and target frame size.
773  * - Sets the GF update.
774  * - Checks for scene change.
775  * - Sets the reference prediction structure for 1 layers (non-SVC).
776  * - Resets and updates are done for SVC.
777  *
778  * \ingroup rate_control
779  * \param[in]       cpi          Top level encoder structure
780  * \param[in]       frame_type   Encoder frame type
781  * \param[in]       frame_input  Current and last input source frames
782  * \param[in]       frame_flags  Encoder frame flags
783  *
784  * \remark Nothing is returned. Instead the settings computed in this
785  * function are set in: \c frame_params, \c cpi->common, \c cpi->rc,
786  * \c cpi->svc.
787  */
788 void av1_get_one_pass_rt_params(struct AV1_COMP *cpi,
789                                 FRAME_TYPE *const frame_type,
790                                 const struct EncodeFrameInput *frame_input,
791                                 unsigned int frame_flags);
792 
793 /*!\brief Increase q on expected encoder overshoot, for CBR mode.
794  *
795  *  Handles the case when encoder is expected to create a large frame:
796  *  - q is increased to value closer to \c cpi->rc.worst_quality
797  *  - avg_frame_qindex is reset
798  *  - buffer levels are reset
799  *  - rate correction factor is adjusted
800  *
801  * \ingroup rate_control
802  * \param[in]       cpi          Top level encoder structure
803  * \param[in]        q           Current q index
804  *
805  * \return q is returned, and updates are done to \c cpi->rc.
806  */
807 int av1_encodedframe_overshoot_cbr(struct AV1_COMP *cpi, int *q);
808 
809 /*!\brief Compute the q_indices for a single frame.
810  *
811  * Intended to be used with AOM_Q mode.
812  *
813  * \param[in]       base_q_index      Base q index
814  * \param[in]       gf_update_type    GOP update type
815  * \param[in]       gf_pyramid_level  GOP level of the current frame
816  * \param[in]       arf_q             ARF q_index
817  *
818  * \return Returns the q_index for the current frame.
819  */
820 int av1_q_mode_get_q_index(int base_q_index, int gf_update_type,
821                            int gf_pyramid_level, int arf_q);
822 
823 /*!\brief Compute the q_indices for the ARF of a GOP.
824  *
825  * \param[in]       base_q_index      Base q index
826  * \param[in]       gfu_boost         GFU boost
827  * \param[in]       bit_depth         Bit depth
828  * \param[in]       arf_boost_factor  ARF boost factor
829  *
830  * \return Returns the q_index for the ARF frame.
831  */
832 int av1_get_arf_q_index(int base_q_index, int gfu_boost, int bit_depth,
833                         double arf_boost_factor);
834 
835 #if !CONFIG_REALTIME_ONLY
836 struct TplDepFrame;
837 /*!\brief Compute the q_indices for the ARF of a GOP in Q mode.
838  *
839  * \param[in]       cpi               Top level encoder structure
840  * \param[in]       tpl_frame         Tpl Frame stats
841  *
842  * \return Returns the q_index for the ARF frame.
843  */
844 int av1_get_arf_q_index_q_mode(struct AV1_COMP *cpi,
845                                struct TplDepFrame *tpl_frame);
846 #endif
847 #ifdef __cplusplus
848 }  // extern "C"
849 #endif
850 
851 #endif  // AOM_AV1_ENCODER_RATECTRL_H_
852