1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker *
4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker */
10*fb1b10abSAndroid Build Coastguard Worker
11*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_VP9_ENCODER_VP9_FIRSTPASS_H_
12*fb1b10abSAndroid Build Coastguard Worker #define VPX_VP9_ENCODER_VP9_FIRSTPASS_H_
13*fb1b10abSAndroid Build Coastguard Worker
14*fb1b10abSAndroid Build Coastguard Worker #include <assert.h>
15*fb1b10abSAndroid Build Coastguard Worker
16*fb1b10abSAndroid Build Coastguard Worker #include "vp9/common/vp9_onyxc_int.h"
17*fb1b10abSAndroid Build Coastguard Worker #include "vp9/encoder/vp9_firstpass_stats.h"
18*fb1b10abSAndroid Build Coastguard Worker #include "vp9/encoder/vp9_lookahead.h"
19*fb1b10abSAndroid Build Coastguard Worker #include "vp9/encoder/vp9_ratectrl.h"
20*fb1b10abSAndroid Build Coastguard Worker
21*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus
22*fb1b10abSAndroid Build Coastguard Worker extern "C" {
23*fb1b10abSAndroid Build Coastguard Worker #endif
24*fb1b10abSAndroid Build Coastguard Worker
25*fb1b10abSAndroid Build Coastguard Worker #define INVALID_ROW (-1)
26*fb1b10abSAndroid Build Coastguard Worker
27*fb1b10abSAndroid Build Coastguard Worker #define MAX_ARF_LAYERS 6
28*fb1b10abSAndroid Build Coastguard Worker #define SECTION_NOISE_DEF 250.0
29*fb1b10abSAndroid Build Coastguard Worker
30*fb1b10abSAndroid Build Coastguard Worker typedef struct {
31*fb1b10abSAndroid Build Coastguard Worker double frame_mb_intra_factor;
32*fb1b10abSAndroid Build Coastguard Worker double frame_mb_brightness_factor;
33*fb1b10abSAndroid Build Coastguard Worker double frame_mb_neutral_count;
34*fb1b10abSAndroid Build Coastguard Worker } FP_MB_FLOAT_STATS;
35*fb1b10abSAndroid Build Coastguard Worker
36*fb1b10abSAndroid Build Coastguard Worker typedef struct {
37*fb1b10abSAndroid Build Coastguard Worker double intra_factor;
38*fb1b10abSAndroid Build Coastguard Worker double brightness_factor;
39*fb1b10abSAndroid Build Coastguard Worker int64_t coded_error;
40*fb1b10abSAndroid Build Coastguard Worker int64_t sr_coded_error;
41*fb1b10abSAndroid Build Coastguard Worker int64_t frame_noise_energy;
42*fb1b10abSAndroid Build Coastguard Worker int64_t intra_error;
43*fb1b10abSAndroid Build Coastguard Worker int intercount;
44*fb1b10abSAndroid Build Coastguard Worker int second_ref_count;
45*fb1b10abSAndroid Build Coastguard Worker double neutral_count;
46*fb1b10abSAndroid Build Coastguard Worker double intra_count_low; // Coded intra but low variance
47*fb1b10abSAndroid Build Coastguard Worker double intra_count_high; // Coded intra high variance
48*fb1b10abSAndroid Build Coastguard Worker int intra_skip_count;
49*fb1b10abSAndroid Build Coastguard Worker int image_data_start_row;
50*fb1b10abSAndroid Build Coastguard Worker int mvcount;
51*fb1b10abSAndroid Build Coastguard Worker int sum_mvr;
52*fb1b10abSAndroid Build Coastguard Worker int sum_mvr_abs;
53*fb1b10abSAndroid Build Coastguard Worker int sum_mvc;
54*fb1b10abSAndroid Build Coastguard Worker int sum_mvc_abs;
55*fb1b10abSAndroid Build Coastguard Worker int64_t sum_mvrs;
56*fb1b10abSAndroid Build Coastguard Worker int64_t sum_mvcs;
57*fb1b10abSAndroid Build Coastguard Worker int sum_in_vectors;
58*fb1b10abSAndroid Build Coastguard Worker int intra_smooth_count;
59*fb1b10abSAndroid Build Coastguard Worker int new_mv_count;
60*fb1b10abSAndroid Build Coastguard Worker } FIRSTPASS_DATA;
61*fb1b10abSAndroid Build Coastguard Worker
62*fb1b10abSAndroid Build Coastguard Worker typedef enum {
63*fb1b10abSAndroid Build Coastguard Worker KF_UPDATE = 0,
64*fb1b10abSAndroid Build Coastguard Worker LF_UPDATE = 1,
65*fb1b10abSAndroid Build Coastguard Worker GF_UPDATE = 2,
66*fb1b10abSAndroid Build Coastguard Worker ARF_UPDATE = 3,
67*fb1b10abSAndroid Build Coastguard Worker OVERLAY_UPDATE = 4,
68*fb1b10abSAndroid Build Coastguard Worker MID_OVERLAY_UPDATE = 5,
69*fb1b10abSAndroid Build Coastguard Worker USE_BUF_FRAME = 6, // Use show existing frame, no ref buffer update
70*fb1b10abSAndroid Build Coastguard Worker FRAME_UPDATE_TYPES = 7
71*fb1b10abSAndroid Build Coastguard Worker } FRAME_UPDATE_TYPE;
72*fb1b10abSAndroid Build Coastguard Worker
73*fb1b10abSAndroid Build Coastguard Worker #define FC_ANIMATION_THRESH 0.15
74*fb1b10abSAndroid Build Coastguard Worker typedef enum {
75*fb1b10abSAndroid Build Coastguard Worker FC_NORMAL = 0,
76*fb1b10abSAndroid Build Coastguard Worker FC_GRAPHICS_ANIMATION = 1,
77*fb1b10abSAndroid Build Coastguard Worker FRAME_CONTENT_TYPES = 2
78*fb1b10abSAndroid Build Coastguard Worker } FRAME_CONTENT_TYPE;
79*fb1b10abSAndroid Build Coastguard Worker
80*fb1b10abSAndroid Build Coastguard Worker typedef struct ExternalRcReference {
81*fb1b10abSAndroid Build Coastguard Worker int last_index;
82*fb1b10abSAndroid Build Coastguard Worker int golden_index;
83*fb1b10abSAndroid Build Coastguard Worker int altref_index;
84*fb1b10abSAndroid Build Coastguard Worker } ExternalRcReference;
85*fb1b10abSAndroid Build Coastguard Worker
86*fb1b10abSAndroid Build Coastguard Worker typedef struct {
87*fb1b10abSAndroid Build Coastguard Worker unsigned char index;
88*fb1b10abSAndroid Build Coastguard Worker RATE_FACTOR_LEVEL rf_level[MAX_STATIC_GF_GROUP_LENGTH + 2];
89*fb1b10abSAndroid Build Coastguard Worker FRAME_UPDATE_TYPE update_type[MAX_STATIC_GF_GROUP_LENGTH + 2];
90*fb1b10abSAndroid Build Coastguard Worker unsigned char arf_src_offset[MAX_STATIC_GF_GROUP_LENGTH + 2];
91*fb1b10abSAndroid Build Coastguard Worker unsigned char layer_depth[MAX_STATIC_GF_GROUP_LENGTH + 2];
92*fb1b10abSAndroid Build Coastguard Worker unsigned char frame_gop_index[MAX_STATIC_GF_GROUP_LENGTH + 2];
93*fb1b10abSAndroid Build Coastguard Worker int bit_allocation[MAX_STATIC_GF_GROUP_LENGTH + 2];
94*fb1b10abSAndroid Build Coastguard Worker int gfu_boost[MAX_STATIC_GF_GROUP_LENGTH + 2];
95*fb1b10abSAndroid Build Coastguard Worker int update_ref_idx[MAX_STATIC_GF_GROUP_LENGTH + 2];
96*fb1b10abSAndroid Build Coastguard Worker
97*fb1b10abSAndroid Build Coastguard Worker int frame_start;
98*fb1b10abSAndroid Build Coastguard Worker int frame_end;
99*fb1b10abSAndroid Build Coastguard Worker // TODO(jingning): The array size of arf_stack could be reduced.
100*fb1b10abSAndroid Build Coastguard Worker int arf_index_stack[MAX_LAG_BUFFERS * 2];
101*fb1b10abSAndroid Build Coastguard Worker int top_arf_idx;
102*fb1b10abSAndroid Build Coastguard Worker int stack_size;
103*fb1b10abSAndroid Build Coastguard Worker int gf_group_size;
104*fb1b10abSAndroid Build Coastguard Worker int max_layer_depth;
105*fb1b10abSAndroid Build Coastguard Worker int allowed_max_layer_depth;
106*fb1b10abSAndroid Build Coastguard Worker int group_noise_energy;
107*fb1b10abSAndroid Build Coastguard Worker
108*fb1b10abSAndroid Build Coastguard Worker // Structure to store the reference information from external RC.
109*fb1b10abSAndroid Build Coastguard Worker // Used to override reference frame decisions in libvpx.
110*fb1b10abSAndroid Build Coastguard Worker ExternalRcReference ext_rc_ref[MAX_STATIC_GF_GROUP_LENGTH + 2];
111*fb1b10abSAndroid Build Coastguard Worker int ref_frame_list[MAX_STATIC_GF_GROUP_LENGTH + 2][REFS_PER_FRAME];
112*fb1b10abSAndroid Build Coastguard Worker } GF_GROUP;
113*fb1b10abSAndroid Build Coastguard Worker
114*fb1b10abSAndroid Build Coastguard Worker typedef struct {
115*fb1b10abSAndroid Build Coastguard Worker const FIRSTPASS_STATS *stats;
116*fb1b10abSAndroid Build Coastguard Worker int num_frames;
117*fb1b10abSAndroid Build Coastguard Worker } FIRST_PASS_INFO;
118*fb1b10abSAndroid Build Coastguard Worker
fps_init_first_pass_info(FIRST_PASS_INFO * first_pass_info,const FIRSTPASS_STATS * stats,int num_frames)119*fb1b10abSAndroid Build Coastguard Worker static INLINE void fps_init_first_pass_info(FIRST_PASS_INFO *first_pass_info,
120*fb1b10abSAndroid Build Coastguard Worker const FIRSTPASS_STATS *stats,
121*fb1b10abSAndroid Build Coastguard Worker int num_frames) {
122*fb1b10abSAndroid Build Coastguard Worker first_pass_info->stats = stats;
123*fb1b10abSAndroid Build Coastguard Worker first_pass_info->num_frames = num_frames;
124*fb1b10abSAndroid Build Coastguard Worker }
125*fb1b10abSAndroid Build Coastguard Worker
fps_get_num_frames(const FIRST_PASS_INFO * first_pass_info)126*fb1b10abSAndroid Build Coastguard Worker static INLINE int fps_get_num_frames(const FIRST_PASS_INFO *first_pass_info) {
127*fb1b10abSAndroid Build Coastguard Worker return first_pass_info->num_frames;
128*fb1b10abSAndroid Build Coastguard Worker }
129*fb1b10abSAndroid Build Coastguard Worker
fps_get_frame_stats(const FIRST_PASS_INFO * first_pass_info,int show_idx)130*fb1b10abSAndroid Build Coastguard Worker static INLINE const FIRSTPASS_STATS *fps_get_frame_stats(
131*fb1b10abSAndroid Build Coastguard Worker const FIRST_PASS_INFO *first_pass_info, int show_idx) {
132*fb1b10abSAndroid Build Coastguard Worker if (show_idx < 0 || show_idx >= first_pass_info->num_frames) {
133*fb1b10abSAndroid Build Coastguard Worker return NULL;
134*fb1b10abSAndroid Build Coastguard Worker }
135*fb1b10abSAndroid Build Coastguard Worker return &first_pass_info->stats[show_idx];
136*fb1b10abSAndroid Build Coastguard Worker }
137*fb1b10abSAndroid Build Coastguard Worker
138*fb1b10abSAndroid Build Coastguard Worker typedef struct {
139*fb1b10abSAndroid Build Coastguard Worker unsigned int section_intra_rating;
140*fb1b10abSAndroid Build Coastguard Worker unsigned int key_frame_section_intra_rating;
141*fb1b10abSAndroid Build Coastguard Worker FIRSTPASS_STATS total_stats;
142*fb1b10abSAndroid Build Coastguard Worker FIRSTPASS_STATS this_frame_stats;
143*fb1b10abSAndroid Build Coastguard Worker const FIRSTPASS_STATS *stats_in;
144*fb1b10abSAndroid Build Coastguard Worker const FIRSTPASS_STATS *stats_in_start;
145*fb1b10abSAndroid Build Coastguard Worker const FIRSTPASS_STATS *stats_in_end;
146*fb1b10abSAndroid Build Coastguard Worker FIRST_PASS_INFO first_pass_info;
147*fb1b10abSAndroid Build Coastguard Worker FIRSTPASS_STATS total_left_stats;
148*fb1b10abSAndroid Build Coastguard Worker int first_pass_done;
149*fb1b10abSAndroid Build Coastguard Worker int64_t bits_left;
150*fb1b10abSAndroid Build Coastguard Worker double mean_mod_score;
151*fb1b10abSAndroid Build Coastguard Worker double normalized_score_left;
152*fb1b10abSAndroid Build Coastguard Worker double mb_av_energy;
153*fb1b10abSAndroid Build Coastguard Worker double mb_smooth_pct;
154*fb1b10abSAndroid Build Coastguard Worker
155*fb1b10abSAndroid Build Coastguard Worker FP_MB_FLOAT_STATS *fp_mb_float_stats;
156*fb1b10abSAndroid Build Coastguard Worker
157*fb1b10abSAndroid Build Coastguard Worker // An indication of the content type of the current frame
158*fb1b10abSAndroid Build Coastguard Worker FRAME_CONTENT_TYPE fr_content_type;
159*fb1b10abSAndroid Build Coastguard Worker
160*fb1b10abSAndroid Build Coastguard Worker // Projected total bits available for a key frame group of frames
161*fb1b10abSAndroid Build Coastguard Worker int64_t kf_group_bits;
162*fb1b10abSAndroid Build Coastguard Worker
163*fb1b10abSAndroid Build Coastguard Worker // Error score of frames still to be coded in kf group
164*fb1b10abSAndroid Build Coastguard Worker double kf_group_error_left;
165*fb1b10abSAndroid Build Coastguard Worker
166*fb1b10abSAndroid Build Coastguard Worker double bpm_factor;
167*fb1b10abSAndroid Build Coastguard Worker int rolling_arf_group_target_bits;
168*fb1b10abSAndroid Build Coastguard Worker int rolling_arf_group_actual_bits;
169*fb1b10abSAndroid Build Coastguard Worker
170*fb1b10abSAndroid Build Coastguard Worker int sr_update_lag;
171*fb1b10abSAndroid Build Coastguard Worker int kf_zeromotion_pct;
172*fb1b10abSAndroid Build Coastguard Worker int last_kfgroup_zeromotion_pct;
173*fb1b10abSAndroid Build Coastguard Worker int active_worst_quality;
174*fb1b10abSAndroid Build Coastguard Worker int baseline_active_worst_quality;
175*fb1b10abSAndroid Build Coastguard Worker int extend_minq;
176*fb1b10abSAndroid Build Coastguard Worker int extend_maxq;
177*fb1b10abSAndroid Build Coastguard Worker int extend_minq_fast;
178*fb1b10abSAndroid Build Coastguard Worker int arnr_strength_adjustment;
179*fb1b10abSAndroid Build Coastguard Worker int last_qindex_of_arf_layer[MAX_ARF_LAYERS];
180*fb1b10abSAndroid Build Coastguard Worker
181*fb1b10abSAndroid Build Coastguard Worker GF_GROUP gf_group;
182*fb1b10abSAndroid Build Coastguard Worker
183*fb1b10abSAndroid Build Coastguard Worker // Vizeir project experimental two pass rate control parameters.
184*fb1b10abSAndroid Build Coastguard Worker // When |use_vizier_rc_params| is 1, the following parameters will
185*fb1b10abSAndroid Build Coastguard Worker // be overwritten by pass in values. Otherwise, they are initialized
186*fb1b10abSAndroid Build Coastguard Worker // by default values.
187*fb1b10abSAndroid Build Coastguard Worker int use_vizier_rc_params;
188*fb1b10abSAndroid Build Coastguard Worker double active_wq_factor;
189*fb1b10abSAndroid Build Coastguard Worker double err_per_mb;
190*fb1b10abSAndroid Build Coastguard Worker double sr_default_decay_limit;
191*fb1b10abSAndroid Build Coastguard Worker double sr_diff_factor;
192*fb1b10abSAndroid Build Coastguard Worker double kf_err_per_mb;
193*fb1b10abSAndroid Build Coastguard Worker double kf_frame_min_boost;
194*fb1b10abSAndroid Build Coastguard Worker double kf_frame_max_boost_first; // Max for first kf in a chunk.
195*fb1b10abSAndroid Build Coastguard Worker double kf_frame_max_boost_subs; // Max for subsequent mid chunk kfs.
196*fb1b10abSAndroid Build Coastguard Worker double kf_max_total_boost;
197*fb1b10abSAndroid Build Coastguard Worker double gf_max_total_boost;
198*fb1b10abSAndroid Build Coastguard Worker double gf_frame_max_boost;
199*fb1b10abSAndroid Build Coastguard Worker double zm_factor;
200*fb1b10abSAndroid Build Coastguard Worker } TWO_PASS;
201*fb1b10abSAndroid Build Coastguard Worker
202*fb1b10abSAndroid Build Coastguard Worker struct VP9_COMP;
203*fb1b10abSAndroid Build Coastguard Worker struct ThreadData;
204*fb1b10abSAndroid Build Coastguard Worker struct TileDataEnc;
205*fb1b10abSAndroid Build Coastguard Worker
206*fb1b10abSAndroid Build Coastguard Worker void vp9_init_first_pass(struct VP9_COMP *cpi);
207*fb1b10abSAndroid Build Coastguard Worker void vp9_first_pass(struct VP9_COMP *cpi, const struct lookahead_entry *source);
208*fb1b10abSAndroid Build Coastguard Worker void vp9_end_first_pass(struct VP9_COMP *cpi);
209*fb1b10abSAndroid Build Coastguard Worker
210*fb1b10abSAndroid Build Coastguard Worker void vp9_first_pass_encode_tile_mb_row(struct VP9_COMP *cpi,
211*fb1b10abSAndroid Build Coastguard Worker struct ThreadData *td,
212*fb1b10abSAndroid Build Coastguard Worker FIRSTPASS_DATA *fp_acc_data,
213*fb1b10abSAndroid Build Coastguard Worker struct TileDataEnc *tile_data,
214*fb1b10abSAndroid Build Coastguard Worker MV *best_ref_mv, int mb_row);
215*fb1b10abSAndroid Build Coastguard Worker
216*fb1b10abSAndroid Build Coastguard Worker void vp9_init_second_pass(struct VP9_COMP *cpi);
217*fb1b10abSAndroid Build Coastguard Worker void vp9_rc_get_second_pass_params(struct VP9_COMP *cpi);
218*fb1b10abSAndroid Build Coastguard Worker void vp9_init_vizier_params(TWO_PASS *const twopass, int screen_area);
219*fb1b10abSAndroid Build Coastguard Worker
220*fb1b10abSAndroid Build Coastguard Worker // Post encode update of the rate control parameters for 2-pass
221*fb1b10abSAndroid Build Coastguard Worker void vp9_twopass_postencode_update(struct VP9_COMP *cpi);
222*fb1b10abSAndroid Build Coastguard Worker
223*fb1b10abSAndroid Build Coastguard Worker void calculate_coded_size(struct VP9_COMP *cpi, int *scaled_frame_width,
224*fb1b10abSAndroid Build Coastguard Worker int *scaled_frame_height);
225*fb1b10abSAndroid Build Coastguard Worker
226*fb1b10abSAndroid Build Coastguard Worker struct VP9EncoderConfig;
227*fb1b10abSAndroid Build Coastguard Worker int vp9_get_frames_to_next_key(const struct VP9EncoderConfig *oxcf,
228*fb1b10abSAndroid Build Coastguard Worker const TWO_PASS *const twopass, int kf_show_idx,
229*fb1b10abSAndroid Build Coastguard Worker int min_gf_interval);
230*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_RATE_CTRL
231*fb1b10abSAndroid Build Coastguard Worker /* Call this function to get info about the next group of pictures.
232*fb1b10abSAndroid Build Coastguard Worker * This function should be called after vp9_create_compressor() when encoding
233*fb1b10abSAndroid Build Coastguard Worker * starts or after vp9_get_compressed_data() when the encoding process of
234*fb1b10abSAndroid Build Coastguard Worker * the last group of pictures is just finished.
235*fb1b10abSAndroid Build Coastguard Worker */
236*fb1b10abSAndroid Build Coastguard Worker void vp9_get_next_group_of_picture(const struct VP9_COMP *cpi,
237*fb1b10abSAndroid Build Coastguard Worker int *first_is_key_frame, int *use_alt_ref,
238*fb1b10abSAndroid Build Coastguard Worker int *coding_frame_count, int *first_show_idx,
239*fb1b10abSAndroid Build Coastguard Worker int *last_gop_use_alt_ref);
240*fb1b10abSAndroid Build Coastguard Worker
241*fb1b10abSAndroid Build Coastguard Worker /*!\brief Call this function before coding a new group of pictures to get
242*fb1b10abSAndroid Build Coastguard Worker * information about it.
243*fb1b10abSAndroid Build Coastguard Worker * \param[in] oxcf Encoder config
244*fb1b10abSAndroid Build Coastguard Worker * \param[in] twopass Twopass info
245*fb1b10abSAndroid Build Coastguard Worker * \param[in] frame_info Frame info
246*fb1b10abSAndroid Build Coastguard Worker * \param[in] rc Rate control state
247*fb1b10abSAndroid Build Coastguard Worker * \param[in] show_idx Show index of the first frame in the group
248*fb1b10abSAndroid Build Coastguard Worker * \param[in] multi_layer_arf Is multi-layer alternate reference used
249*fb1b10abSAndroid Build Coastguard Worker * \param[in] allow_alt_ref Is alternate reference allowed
250*fb1b10abSAndroid Build Coastguard Worker * \param[in] first_is_key_frame Is the first frame in the group a key frame
251*fb1b10abSAndroid Build Coastguard Worker * \param[in] last_gop_use_alt_ref Does the last group use alternate reference
252*fb1b10abSAndroid Build Coastguard Worker *
253*fb1b10abSAndroid Build Coastguard Worker * \param[out] use_alt_ref Does this group use alternate reference
254*fb1b10abSAndroid Build Coastguard Worker *
255*fb1b10abSAndroid Build Coastguard Worker * \return Returns coding frame count
256*fb1b10abSAndroid Build Coastguard Worker */
257*fb1b10abSAndroid Build Coastguard Worker int vp9_get_gop_coding_frame_count(const struct VP9EncoderConfig *oxcf,
258*fb1b10abSAndroid Build Coastguard Worker const TWO_PASS *const twopass,
259*fb1b10abSAndroid Build Coastguard Worker const FRAME_INFO *frame_info,
260*fb1b10abSAndroid Build Coastguard Worker const RATE_CONTROL *rc, int show_idx,
261*fb1b10abSAndroid Build Coastguard Worker int multi_layer_arf, int allow_alt_ref,
262*fb1b10abSAndroid Build Coastguard Worker int first_is_key_frame,
263*fb1b10abSAndroid Build Coastguard Worker int last_gop_use_alt_ref, int *use_alt_ref);
264*fb1b10abSAndroid Build Coastguard Worker
265*fb1b10abSAndroid Build Coastguard Worker int vp9_get_coding_frame_num(const struct VP9EncoderConfig *oxcf,
266*fb1b10abSAndroid Build Coastguard Worker const TWO_PASS *const twopass,
267*fb1b10abSAndroid Build Coastguard Worker const FRAME_INFO *frame_info, int multi_layer_arf,
268*fb1b10abSAndroid Build Coastguard Worker int allow_alt_ref);
269*fb1b10abSAndroid Build Coastguard Worker
270*fb1b10abSAndroid Build Coastguard Worker /*!\brief Compute a key frame binary map indicates whether key frames appear
271*fb1b10abSAndroid Build Coastguard Worker * in the corresponding positions. The passed in key_frame_map must point to an
272*fb1b10abSAndroid Build Coastguard Worker * integer array with length equal to twopass->first_pass_info.num_frames,
273*fb1b10abSAndroid Build Coastguard Worker * which is the number of show frames in the video.
274*fb1b10abSAndroid Build Coastguard Worker */
275*fb1b10abSAndroid Build Coastguard Worker void vp9_get_key_frame_map(const struct VP9EncoderConfig *oxcf,
276*fb1b10abSAndroid Build Coastguard Worker const TWO_PASS *const twopass, int *key_frame_map);
277*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_RATE_CTRL
278*fb1b10abSAndroid Build Coastguard Worker
279*fb1b10abSAndroid Build Coastguard Worker FIRSTPASS_STATS vp9_get_frame_stats(const TWO_PASS *twopass);
280*fb1b10abSAndroid Build Coastguard Worker FIRSTPASS_STATS vp9_get_total_stats(const TWO_PASS *twopass);
281*fb1b10abSAndroid Build Coastguard Worker
282*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus
283*fb1b10abSAndroid Build Coastguard Worker } // extern "C"
284*fb1b10abSAndroid Build Coastguard Worker #endif
285*fb1b10abSAndroid Build Coastguard Worker
286*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_VP9_ENCODER_VP9_FIRSTPASS_H_
287