Index: source/libvpx/vp9/encoder/vp9_firstpass.h |
=================================================================== |
--- source/libvpx/vp9/encoder/vp9_firstpass.h (revision 251189) |
+++ source/libvpx/vp9/encoder/vp9_firstpass.h (working copy) |
@@ -10,25 +10,92 @@ |
#ifndef VP9_ENCODER_VP9_FIRSTPASS_H_ |
#define VP9_ENCODER_VP9_FIRSTPASS_H_ |
-#include "vp9/encoder/vp9_onyx_int.h" |
#ifdef __cplusplus |
extern "C" { |
#endif |
-void vp9_init_first_pass(VP9_COMP *cpi); |
-void vp9_first_pass(VP9_COMP *cpi); |
-void vp9_end_first_pass(VP9_COMP *cpi); |
+typedef struct { |
+ double frame; |
+ double intra_error; |
+ double coded_error; |
+ double sr_coded_error; |
+ double ssim_weighted_pred_err; |
+ double pcnt_inter; |
+ double pcnt_motion; |
+ double pcnt_second_ref; |
+ double pcnt_neutral; |
+ double MVr; |
+ double mvr_abs; |
+ double MVc; |
+ double mvc_abs; |
+ double MVrv; |
+ double MVcv; |
+ double mv_in_out_count; |
+ double new_mv_count; |
+ double duration; |
+ double count; |
+} FIRSTPASS_STATS; |
-void vp9_init_second_pass(VP9_COMP *cpi); |
-void vp9_get_second_pass_params(VP9_COMP *cpi); |
-void vp9_end_second_pass(VP9_COMP *cpi); |
+struct twopass_rc { |
+ unsigned int section_intra_rating; |
+ unsigned int next_iiratio; |
+ unsigned int this_iiratio; |
+ FIRSTPASS_STATS total_stats; |
+ FIRSTPASS_STATS this_frame_stats; |
+ FIRSTPASS_STATS *stats_in, *stats_in_end, *stats_in_start; |
+ FIRSTPASS_STATS total_left_stats; |
+ int first_pass_done; |
+ int64_t bits_left; |
+ int64_t clip_bits_total; |
+ double avg_iiratio; |
+ double modified_error_min; |
+ double modified_error_max; |
+ double modified_error_total; |
+ double modified_error_left; |
+ double kf_intra_err_min; |
+ double gf_intra_err_min; |
+ int static_scene_max_gf_interval; |
+ int kf_bits; |
+ // Remaining error from uncoded frames in a gf group. Two pass use only |
+ int64_t gf_group_error_left; |
-void vp9_get_first_pass_params(VP9_COMP *cpi); |
-void vp9_get_one_pass_params(VP9_COMP *cpi); |
-void vp9_get_one_pass_cbr_params(VP9_COMP *cpi); |
-void vp9_get_svc_params(VP9_COMP *cpi); |
+ // Projected total bits available for a key frame group of frames |
+ int64_t kf_group_bits; |
+ // Error score of frames still to be coded in kf group |
+ int64_t kf_group_error_left; |
+ |
+ // Projected Bits available for a group of frames including 1 GF or ARF |
+ int64_t gf_group_bits; |
+ // Bits for the golden frame or ARF - 2 pass only |
+ int gf_bits; |
+ int alt_extra_bits; |
+ |
+ int sr_update_lag; |
+ |
+ int kf_zeromotion_pct; |
+ int gf_zeromotion_pct; |
+ |
+ int active_worst_quality; |
+}; |
+ |
+struct VP9_COMP; |
+ |
+void vp9_init_first_pass(struct VP9_COMP *cpi); |
+void vp9_rc_get_first_pass_params(struct VP9_COMP *cpi); |
+void vp9_first_pass(struct VP9_COMP *cpi); |
+void vp9_end_first_pass(struct VP9_COMP *cpi); |
+ |
+void vp9_init_second_pass(struct VP9_COMP *cpi); |
+void vp9_rc_get_second_pass_params(struct VP9_COMP *cpi); |
+void vp9_end_second_pass(struct VP9_COMP *cpi); |
+int vp9_twopass_worst_quality(struct VP9_COMP *cpi, FIRSTPASS_STATS *fpstats, |
+ int section_target_bandwitdh); |
+ |
+// Post encode update of the rate control parameters for 2-pass |
+void vp9_twopass_postencode_update(struct VP9_COMP *cpi, |
+ uint64_t bytes_used); |
#ifdef __cplusplus |
} // extern "C" |
#endif |