190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/* 2f71323e297a928af368937089d3ed71239786f86Andreas Huber * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber * 4f71323e297a928af368937089d3ed71239786f86Andreas Huber * Use of this source code is governed by a BSD-style license 5f71323e297a928af368937089d3ed71239786f86Andreas Huber * that can be found in the LICENSE file in the root of the source 6f71323e297a928af368937089d3ed71239786f86Andreas Huber * tree. An additional intellectual property rights grant can be found 7f71323e297a928af368937089d3ed71239786f86Andreas Huber * in the file PATENTS. All contributing project authors may 8f71323e297a928af368937089d3ed71239786f86Andreas Huber * be found in the AUTHORS file in the root of the source tree. 990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */ 1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#ifndef VP9_ENCODER_VP9_FIRSTPASS_H_ 12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#define VP9_ENCODER_VP9_FIRSTPASS_H_ 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 14b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 15b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianextern "C" { 16b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 18b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramaniantypedef struct { 19b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double frame; 20b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double intra_error; 21b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double coded_error; 22b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double sr_coded_error; 23b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double ssim_weighted_pred_err; 24b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double pcnt_inter; 25b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double pcnt_motion; 26b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double pcnt_second_ref; 27b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double pcnt_neutral; 28b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double MVr; 29b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double mvr_abs; 30b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double MVc; 31b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double mvc_abs; 32b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double MVrv; 33b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double MVcv; 34b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double mv_in_out_count; 35b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double new_mv_count; 36b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double duration; 37b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double count; 386ac915abcdb404a00d927fe6308a47fcf09d9519hkuang int64_t spatial_layer_id; 39b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} FIRSTPASS_STATS; 40b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 41b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstruct twopass_rc { 42b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian unsigned int section_intra_rating; 43b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian unsigned int next_iiratio; 44b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian unsigned int this_iiratio; 45b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian FIRSTPASS_STATS total_stats; 46b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian FIRSTPASS_STATS this_frame_stats; 47b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const FIRSTPASS_STATS *stats_in; 48b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const FIRSTPASS_STATS *stats_in_start; 49b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const FIRSTPASS_STATS *stats_in_end; 50b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian FIRSTPASS_STATS total_left_stats; 51b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int first_pass_done; 52b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int64_t bits_left; 53b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int64_t clip_bits_total; 54b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double avg_iiratio; 55b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double modified_error_min; 56b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double modified_error_max; 57b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double modified_error_total; 58b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double modified_error_left; 59b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double kf_intra_err_min; 60b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian double gf_intra_err_min; 61b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int kf_bits; 62b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian // Remaining error from uncoded frames in a gf group. Two pass use only 63b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int64_t gf_group_error_left; 64b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 65b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian // Projected total bits available for a key frame group of frames 66b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int64_t kf_group_bits; 67b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 68b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian // Error score of frames still to be coded in kf group 69b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int64_t kf_group_error_left; 70b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 71b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian // Projected Bits available for a group of frames including 1 GF or ARF 72b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int64_t gf_group_bits; 73b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian // Bits for the golden frame or ARF - 2 pass only 74b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int gf_bits; 75b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int alt_extra_bits; 76b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 77b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int sr_update_lag; 78b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 79b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int kf_zeromotion_pct; 80b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int gf_zeromotion_pct; 81b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 82b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int active_worst_quality; 83b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian}; 84b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 85b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstruct VP9_COMP; 86b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 87b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_init_first_pass(struct VP9_COMP *cpi); 88b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_rc_get_first_pass_params(struct VP9_COMP *cpi); 89b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_first_pass(struct VP9_COMP *cpi); 90b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_end_first_pass(struct VP9_COMP *cpi); 91b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 92b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_init_second_pass(struct VP9_COMP *cpi); 93b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_rc_get_second_pass_params(struct VP9_COMP *cpi); 94b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianint vp9_twopass_worst_quality(struct VP9_COMP *cpi, FIRSTPASS_STATS *fpstats, 95b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int section_target_bandwitdh); 96b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 97b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian// Post encode update of the rate control parameters for 2-pass 986ac915abcdb404a00d927fe6308a47fcf09d9519hkuangvoid vp9_twopass_postencode_update(struct VP9_COMP *cpi); 99b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 100b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} // extern "C" 101b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 103ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif // VP9_ENCODER_VP9_FIRSTPASS_H_ 104