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 MAX_NUM_GF_INTERVALS 15
50 
51 #define MAX_ARF_LAYERS 6
52 // #define STRICT_RC
53 
54 typedef struct {
55   int resize_width;
56   int resize_height;
57   uint8_t superres_denom;
58 } size_params_type;
59 
60 enum {
61   INTER_NORMAL,
62   GF_ARF_LOW,
63   GF_ARF_STD,
64   KF_STD,
65   RATE_FACTOR_LEVELS
66 } UENUM1BYTE(RATE_FACTOR_LEVEL);
67 
68 enum {
69   KF_UPDATE,
70   LF_UPDATE,
71   GF_UPDATE,
72   ARF_UPDATE,
73   OVERLAY_UPDATE,
74   INTNL_OVERLAY_UPDATE,  // Internal Overlay Frame
75   INTNL_ARF_UPDATE,      // Internal Altref Frame
76   FRAME_UPDATE_TYPES
77 } UENUM1BYTE(FRAME_UPDATE_TYPE);
78 
79 enum {
80   REFBUF_RESET,   // Clear reference frame buffer
81   REFBUF_UPDATE,  // Refresh reference frame buffer
82   REFBUF_STATES
83 } UENUM1BYTE(REFBUF_STATE);
84 
85 typedef enum {
86   NO_RESIZE = 0,
87   DOWN_THREEFOUR = 1,  // From orig to 3/4.
88   DOWN_ONEHALF = 2,    // From orig or 3/4 to 1/2.
89   UP_THREEFOUR = -1,   // From 1/2 to 3/4.
90   UP_ORIG = -2,        // From 1/2 or 3/4 to orig.
91 } RESIZE_ACTION;
92 
93 typedef enum { ORIG = 0, THREE_QUARTER = 1, ONE_HALF = 2 } RESIZE_STATE;
94 
95 #define MAX_FIRSTPASS_ANALYSIS_FRAMES 150
96 typedef enum region_types {
97   STABLE_REGION = 0,
98   HIGH_VAR_REGION = 1,
99   SCENECUT_REGION = 2,
100   BLENDING_REGION = 3,
101 } REGION_TYPES;
102 
103 typedef struct regions {
104   int start;
105   int last;
106   double avg_noise_var;
107   double avg_cor_coeff;
108   double avg_sr_fr_ratio;
109   double avg_intra_err;
110   double avg_coded_err;
111   REGION_TYPES type;
112 } REGIONS;
113 
114 /*!\endcond */
115 /*!
116  * \brief  Rate Control parameters and status
117  */
118 typedef struct {
119   // Rate targetting variables
120 
121   /*!
122    * Baseline target rate for frame before adjustment for previous under or
123    * over shoot.
124    */
125   int base_frame_target;
126   /*!
127    * Target rate for frame after adjustment for previous under or over shoot.
128    */
129   int this_frame_target;  // Actual frame target after rc adjustment.
130 
131   /*!
132    * Projected size for current frame
133    */
134   int projected_frame_size;
135 
136   /*!
137    * Bit size of transform coefficient for current frame.
138    */
139   int coefficient_size;
140 
141   /*!
142    * Super block rate target used with some adaptive quantization strategies.
143    */
144   int sb64_target_rate;
145 
146   /*!
147    * Number of frames since the last ARF / GF.
148    */
149   int frames_since_golden;
150 
151   /*!
152    * Number of frames till the next ARF / GF is due.
153    */
154   int frames_till_gf_update_due;
155 
156   /*!
157    * Number of determined gf groups left
158    */
159   int intervals_till_gf_calculate_due;
160 
161   /*!\cond */
162   int min_gf_interval;
163   int max_gf_interval;
164   int static_scene_max_gf_interval;
165   /*!\endcond */
166   /*!
167    * Frames before the next key frame
168    */
169   int frames_to_key;
170   /*!\cond */
171   int frames_since_key;
172   int frames_to_fwd_kf;
173   int is_src_frame_alt_ref;
174   int sframe_due;
175 
176   int high_source_sad;
177   uint64_t avg_source_sad;
178   uint64_t prev_avg_source_sad;
179 
180   int avg_frame_bandwidth;  // Average frame size target for clip
181   int min_frame_bandwidth;  // Minimum allocation used for any frame
182   int max_frame_bandwidth;  // Maximum burst rate allowed for a frame.
183   int prev_avg_frame_bandwidth;
184 
185   int ni_av_qi;
186   int ni_tot_qi;
187 
188   int decimation_factor;
189   int decimation_count;
190 
191   /*!\endcond */
192   /*!
193    * User specified maximum Q allowed for current frame
194    */
195   int worst_quality;
196   /*!
197    * User specified minimum Q allowed for current frame
198    */
199   int best_quality;
200 
201   /*!\cond */
202 
203   // rate control history for last frame(1) and the frame before(2).
204   // -1: undershot
205   //  1: overshoot
206   //  0: not initialized.
207   int rc_1_frame;
208   int rc_2_frame;
209   int q_1_frame;
210   int q_2_frame;
211 
212   /*!\endcond */
213   /*!
214    * Proposed maximum alloed Q for current frame
215    */
216   int active_worst_quality;
217 
218   /*!\cond */
219   // Track amount of low motion in scene
220   int avg_frame_low_motion;
221 
222   // For dynamic resize, 1 pass cbr.
223   RESIZE_STATE resize_state;
224   int resize_avg_qp;
225   int resize_buffer_underflow;
226   int resize_count;
227 #if CONFIG_FRAME_PARALLEL_ENCODE
228   int frame_level_fast_extra_bits;
229   double frame_level_rate_correction_factors[RATE_FACTOR_LEVELS];
230 #endif
231   /*!\endcond */
232 } RATE_CONTROL;
233 
234 /*!
235  * \brief  Primary Rate Control parameters and status
236  */
237 typedef struct {
238   // Sub-gop level Rate targetting variables
239 
240   /*!
241    * Target bit budget for the current GF / ARF group of frame.
242    */
243   int64_t gf_group_bits;
244 
245   /*!
246    * Boost factor used to calculate the extra bits allocated to the key frame
247    */
248   int kf_boost;
249 
250   /*!
251    * Boost factor used to calculate the extra bits allocated to ARFs and GFs
252    */
253   int gfu_boost;
254 
255   /*!
256    * Stores the determined gf group lengths for a set of gf groups
257    */
258   int gf_intervals[MAX_NUM_GF_INTERVALS];
259 
260   /*!
261    * The current group's index into gf_intervals[]
262    */
263   int cur_gf_index;
264 
265   /*!\cond */
266   int num_regions;
267 
268   REGIONS regions[MAX_FIRSTPASS_ANALYSIS_FRAMES];
269   int regions_offset;  // offset of regions from the last keyframe
270   int frames_till_regions_update;
271 
272   int baseline_gf_interval;
273 
274   int constrained_gf_group;
275 
276   int this_key_frame_forced;
277 
278   int next_key_frame_forced;
279   /*!\endcond */
280 
281   /*!
282    * Initial buffuer level in ms for CBR / low delay encoding
283    */
284   int64_t starting_buffer_level;
285 
286   /*!
287    * Optimum / target buffuer level in ms for CBR / low delay encoding
288    */
289   int64_t optimal_buffer_level;
290 
291   /*!
292    * Maximum target buffuer level in ms for CBR / low delay encoding
293    */
294   int64_t maximum_buffer_size;
295 
296   /*!
297    * Q index used for ALT frame
298    */
299   int arf_q;
300 
301   /*!\cond */
302   float_t arf_boost_factor;
303 
304   int base_layer_qp;
305 
306   // Total number of stats used only for kf_boost calculation.
307   int num_stats_used_for_kf_boost;
308 
309   // Total number of stats used only for gfu_boost calculation.
310   int num_stats_used_for_gfu_boost;
311 
312   // Total number of stats required by gfu_boost calculation.
313   int num_stats_required_for_gfu_boost;
314 
315   int enable_scenecut_detection;
316 
317   int use_arf_in_this_kf_group;
318 
319   int ni_frames;
320 
321   double tot_q;
322   /*!\endcond */
323 
324   /*!
325    * Q used for last boosted (non leaf) frame
326    */
327   int last_kf_qindex;
328 
329   /*!
330    * Average of q index of previous encoded frames in a sequence.
331    */
332   int avg_frame_qindex[FRAME_TYPES];
333 
334   /*!
335    * Proposed minimum allowed Q different layers in a coding pyramid
336    */
337   int active_best_quality[MAX_ARF_LAYERS + 1];
338 
339   /*!
340    * Q used for last boosted (non leaf) frame (GF/KF/ARF)
341    */
342   int last_boosted_qindex;
343 
344   /*!
345    * Average Q value of previous inter frames
346    */
347   double avg_q;
348 
349   /*!
350    * Q used on last encoded frame of the given type.
351    */
352   int last_q[FRAME_TYPES];
353 
354   /*!
355    * Correction factors used to adjust the q estimate for a given target rate
356    * in the encode loop.
357    */
358   double rate_correction_factors[RATE_FACTOR_LEVELS];
359 
360   /*!
361    * Current total consumed bits.
362    */
363   int64_t total_actual_bits;
364 
365   /*!
366    * Current total target bits.
367    */
368   int64_t total_target_bits;
369 
370   /*!
371    * Current buffer level.
372    */
373   int64_t buffer_level;
374 
375   /*!
376    * PCT rc error.
377    */
378   int rate_error_estimate;
379 
380   /*!
381    * Error bits available from previously encoded frames.
382    */
383   int64_t vbr_bits_off_target;
384 
385   /*!
386    * Error bits available from previously encoded frames undershoot.
387    */
388   int64_t vbr_bits_off_target_fast;
389 
390   /*!
391    * Total bits deviated from the average frame target, from previously
392    * encoded frames.
393    */
394   int64_t bits_off_target;
395 
396   /*!
397    * Rolling monitor target bits updated based on current frame target size.
398    */
399   int rolling_target_bits;
400 
401   /*!
402    * Rolling monitor actual bits updated based on current frame final projected
403    * size.
404    */
405   int rolling_actual_bits;
406 } PRIMARY_RATE_CONTROL;
407 
408 struct AV1_COMP;
409 struct AV1EncoderConfig;
410 struct GF_GROUP;
411 
412 void av1_primary_rc_init(const struct AV1EncoderConfig *oxcf,
413                          PRIMARY_RATE_CONTROL *p_rc);
414 
415 void av1_rc_init(const struct AV1EncoderConfig *oxcf, RATE_CONTROL *rc);
416 
417 int av1_estimate_bits_at_q(FRAME_TYPE frame_kind, int q, int mbs,
418                            double correction_factor, aom_bit_depth_t bit_depth,
419                            const int is_screen_content_type);
420 
421 double av1_convert_qindex_to_q(int qindex, aom_bit_depth_t bit_depth);
422 
423 void av1_rc_init_minq_luts(void);
424 
425 int av1_rc_get_default_min_gf_interval(int width, int height, double framerate);
426 // Note av1_rc_get_default_max_gf_interval() requires the min_gf_interval to
427 // be passed in to ensure that the max_gf_interval returned is at least as bis
428 // as that.
429 int av1_rc_get_default_max_gf_interval(double framerate, int min_gf_interval);
430 
431 // Generally at the high level, the following flow is expected
432 // to be enforced for rate control:
433 // First call per frame, one of:
434 //   av1_rc_get_first_pass_params()
435 //   av1_rc_get_second_pass_params()
436 // depending on the usage to set the rate control encode parameters desired.
437 //
438 // Then, call encode_frame_to_data_rate() to perform the
439 // actual encode. This function will in turn call encode_frame()
440 // one or more times, followed by:
441 //   av1_rc_postencode_update_drop_frame()
442 //
443 // The majority of rate control parameters are only expected
444 // to be set in the av1_rc_get_..._params() functions and
445 // updated during the av1_rc_postencode_update...() functions.
446 // The only exceptions are av1_rc_drop_frame() and
447 // av1_rc_update_rate_correction_factors() functions.
448 
449 // Functions to set parameters for encoding before the actual
450 // encode_frame_to_data_rate() function.
451 struct EncodeFrameParams;
452 
453 // Post encode update of the rate control parameters based
454 // on bytes used
455 void av1_rc_postencode_update(struct AV1_COMP *cpi, uint64_t bytes_used);
456 // Post encode update of the rate control parameters for dropped frames
457 void av1_rc_postencode_update_drop_frame(struct AV1_COMP *cpi);
458 
459 /*!\endcond */
460 /*!\brief Updates the rate correction factor linking Q to output bits
461  *
462  * This function updates the Q rate correction factor after an encode
463  * cycle depending on whether we overshot or undershot the target rate.
464  *
465  * \ingroup rate_control
466  * \param[in]   cpi                   Top level encoder instance structure
467  * \param[in]   width                 Frame width
468  * \param[in]   height                Frame height
469  *
470  * \return None but updates the relevant rate correction factor in cpi->rc
471  */
472 void av1_rc_update_rate_correction_factors(struct AV1_COMP *cpi,
473 #if CONFIG_FRAME_PARALLEL_ENCODE
474                                            int is_encode_stage,
475 #endif  // CONFIG_FRAME_PARALLEL_ENCODE
476                                            int width, int height);
477 /*!\cond */
478 
479 // Decide if we should drop this frame: For 1-pass CBR.
480 // Changes only the decimation count in the rate control structure
481 int av1_rc_drop_frame(struct AV1_COMP *cpi);
482 
483 // Computes frame size bounds.
484 void av1_rc_compute_frame_size_bounds(const struct AV1_COMP *cpi,
485                                       int this_frame_target,
486                                       int *frame_under_shoot_limit,
487                                       int *frame_over_shoot_limit);
488 
489 /*!\endcond */
490 
491 /*!\brief Picks q and q bounds given the rate control parameters in \c cpi->rc.
492  *
493  * \ingroup rate_control
494  * \param[in]       cpi          Top level encoder structure
495  * \param[in]       width        Coded frame width
496  * \param[in]       height       Coded frame height
497  * \param[in]       gf_index     Index of this frame in the golden frame group
498  * \param[out]      bottom_index Bottom bound for q index (best quality)
499  * \param[out]      top_index    Top bound for q index (worst quality)
500  * \return Returns selected q index to be used for encoding this frame.
501  * Also, updates \c rc->arf_q.
502  */
503 int av1_rc_pick_q_and_bounds(const struct AV1_COMP *cpi, int width, int height,
504                              int gf_index, int *bottom_index, int *top_index);
505 
506 /*!\brief Estimates q to achieve a target bits per frame
507  *
508  * \ingroup rate_control
509  * \param[in]   cpi                   Top level encoder instance structure
510  * \param[in]   target_bits_per_frame Frame rate target
511  * \param[in]   active_worst_quality  Max Q allowed
512  * \param[in]   active_best_quality   Min Q allowed
513  * \param[in]   width                 Frame width
514  * \param[in]   height                Frame height
515  *
516  * \return Returns a q index value
517  */
518 int av1_rc_regulate_q(const struct AV1_COMP *cpi, int target_bits_per_frame,
519                       int active_best_quality, int active_worst_quality,
520                       int width, int height);
521 
522 /*!\cond */
523 // Estimates bits per mb for a given qindex and correction factor.
524 int av1_rc_bits_per_mb(FRAME_TYPE frame_type, int qindex,
525                        double correction_factor, aom_bit_depth_t bit_depth,
526                        const int is_screen_content_type);
527 
528 // Clamping utilities for bitrate targets for iframes and pframes.
529 int av1_rc_clamp_iframe_target_size(const struct AV1_COMP *const cpi,
530                                     int target);
531 int av1_rc_clamp_pframe_target_size(const struct AV1_COMP *const cpi,
532                                     int target, uint8_t frame_update_type);
533 
534 // Find q_index corresponding to desired_q, within [best_qindex, worst_qindex].
535 // To be precise, 'q_index' is the smallest integer, for which the corresponding
536 // q >= desired_q.
537 // If no such q index is found, returns 'worst_qindex'.
538 int av1_find_qindex(double desired_q, aom_bit_depth_t bit_depth,
539                     int best_qindex, int worst_qindex);
540 
541 // Computes a q delta (in "q index" terms) to get from a starting q value
542 // to a target q value
543 int av1_compute_qdelta(const RATE_CONTROL *rc, double qstart, double qtarget,
544                        aom_bit_depth_t bit_depth);
545 
546 // Computes a q delta (in "q index" terms) to get from a starting q value
547 // to a value that should equate to the given rate ratio.
548 int av1_compute_qdelta_by_rate(const RATE_CONTROL *rc, FRAME_TYPE frame_type,
549                                int qindex, double rate_target_ratio,
550                                const int is_screen_content_type,
551                                aom_bit_depth_t bit_depth);
552 
553 int av1_frame_type_qdelta(const struct AV1_COMP *cpi, int q);
554 
555 void av1_rc_update_framerate(struct AV1_COMP *cpi, int width, int height);
556 
557 void av1_rc_set_gf_interval_range(const struct AV1_COMP *const cpi,
558                                   RATE_CONTROL *const rc);
559 
560 void av1_set_target_rate(struct AV1_COMP *cpi, int width, int height);
561 
562 int av1_resize_one_pass_cbr(struct AV1_COMP *cpi);
563 
564 void av1_rc_set_frame_target(struct AV1_COMP *cpi, int target, int width,
565                              int height);
566 
567 void av1_set_reference_structure_one_pass_rt(struct AV1_COMP *cpi,
568                                              int gf_update);
569 
570 /*!\endcond */
571 /*!\brief Calculates how many bits to use for a P frame in one pass vbr
572  *
573  * \ingroup rate_control
574  * \callgraph
575  * \callergraph
576  *
577  * \param[in]       cpi                 Top level encoder structure
578  * \param[in]       frame_update_type   Type of frame
579  *
580  * \return	Returns the target number of bits for this frame.
581  */
582 int av1_calc_pframe_target_size_one_pass_vbr(
583     const struct AV1_COMP *const cpi, FRAME_UPDATE_TYPE frame_update_type);
584 
585 /*!\brief Calculates how many bits to use for an i frame in one pass vbr
586  *
587  * \ingroup rate_control
588  * \callgraph
589  * \callergraph
590  *
591  * \param[in]       cpi  Top level encoder structure
592  *
593  * \return	Returns the target number of bits for this frame.
594  */
595 int av1_calc_iframe_target_size_one_pass_vbr(const struct AV1_COMP *const cpi);
596 
597 /*!\brief Calculates how many bits to use for a P frame in one pass cbr
598  *
599  * \ingroup rate_control
600  * \callgraph
601  * \callergraph
602  *
603  * \param[in]       cpi                 Top level encoder structure
604  * \param[in]       frame_update_type   Type of frame
605  *
606  * \return  Returns the target number of bits for this frame.
607  */
608 int av1_calc_pframe_target_size_one_pass_cbr(
609     const struct AV1_COMP *cpi, FRAME_UPDATE_TYPE frame_update_type);
610 
611 /*!\brief Calculates how many bits to use for an i frame in one pass cbr
612  *
613  * \ingroup rate_control
614  * \callgraph
615  * \callergraph
616  *
617  * \param[in]       cpi  Top level encoder structure
618  *
619  * \return  Returns the target number of bits for this frame.
620  */
621 int av1_calc_iframe_target_size_one_pass_cbr(const struct AV1_COMP *cpi);
622 
623 /*!\brief Setup the rate control parameters for 1 pass real-time mode.
624  *
625  * - Sets the frame type and target frame size.
626  * - Sets the GF update.
627  * - Checks for scene change.
628  * - Sets the reference prediction structure for 1 layers (non-SVC).
629  * - Resets and updates are done for SVC.
630  *
631  * \ingroup rate_control
632  * \param[in]       cpi          Top level encoder structure
633  * \param[in]       frame_params Encoder frame parameters
634  * \param[in]       frame_flags  Emcoder frame flags
635  *
636  * \return Nothing is returned. Instead the settings computed in this
637  * funtion are set in: \c frame_params, \c cpi->common, \c cpi->rc, \c cpi->svc.
638  */
639 void av1_get_one_pass_rt_params(struct AV1_COMP *cpi,
640                                 struct EncodeFrameParams *const frame_params,
641                                 unsigned int frame_flags);
642 
643 /*!\brief Increase q on expected encoder overshoot, for CBR mode.
644  *
645  *  Handles the case when encoder is expected to create a large frame:
646  *  - q is increased to value closer to \c cpi->rc.worst_quality
647  *  - avg_frame_qindex is reset
648  *  - buffer levels are reset
649  *  - rate correction factor is adjusted
650  *
651  * \ingroup rate_control
652  * \param[in]       cpi          Top level encoder structure
653  * \param[in]        q           Current q index
654  *
655  * \return q is returned, and updates are done to \c cpi->rc.
656  */
657 int av1_encodedframe_overshoot_cbr(struct AV1_COMP *cpi, int *q);
658 
659 #if !CONFIG_REALTIME_ONLY
660 /*!\brief Compute the q_indices for the entire GOP.
661  *
662  * \param[in]       gf_frame_index    Index of the current frame
663  * \param[in]       base_q_index      Base q index
664  * \param[in]       arf_qstep_ratio   The quantize step ratio between arf q
665  *                                    index and base q index
666  * \param[in]       bit_depth         Bit depth
667  * \param[in]       gf_group          Pointer to the GOP
668  * \param[out]      q_index_list      An array to store output gop q indices.
669  *                                    the array size should be equal or
670  *                                    greater than gf_group.size()
671  */
672 void av1_q_mode_compute_gop_q_indices(int gf_frame_index, int base_q_index,
673                                       double arf_qstep_ratio,
674                                       aom_bit_depth_t bit_depth,
675                                       const struct GF_GROUP *gf_group,
676                                       int *q_index_list);
677 #endif  // !CONFIG_REALTIME_ONLY
678 
679 /*!\brief Compute the q_indices for a single frame.
680  *
681  * Intended to be used with AOM_Q mode.
682  *
683  * \param[in]       base_q_index      Base q index
684  * \param[in]       gf_update_type    GOP update type
685  * \param[in]       gf_pyramid_level  GOP level of the current frame
686  * \param[in]       arf_q             ARF q_index
687  *
688  * \return Returns the q_index for the current frame.
689  */
690 int av1_q_mode_get_q_index(int base_q_index, int gf_update_type,
691                            int gf_pyramid_level, int arf_q);
692 
693 /*!\brief Compute the q_indices for the ARF of a GOP.
694  *
695  * \param[in]       base_q_index      Base q index
696  * \param[in]       gfu_boost         GFU boost
697  * \param[in]       bit_depth         Bit depth
698  * \param[in]       arf_boost_factor  ARF boost factor
699  *
700  * \return Returns the q_index for the ARF frame.
701  */
702 int av1_get_arf_q_index(int base_q_index, int gfu_boost, int bit_depth,
703                         double arf_boost_factor);
704 
705 #if !CONFIG_REALTIME_ONLY
706 struct TplDepFrame;
707 /*!\brief Compute the q_indices for the ARF of a GOP in Q mode.
708  *
709  * \param[in]       cpi               Top level encoder structure
710  * \param[in]       tpl_frame         Tpl Frame stats
711  *
712  * \return Returns the q_index for the ARF frame.
713  */
714 int av1_get_arf_q_index_q_mode(struct AV1_COMP *cpi,
715                                struct TplDepFrame *tpl_frame);
716 #endif
717 #ifdef __cplusplus
718 }  // extern "C"
719 #endif
720 
721 #endif  // AOM_AV1_ENCODER_RATECTRL_H_
722