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