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
15extern "C" {
16#endif
17
18typedef 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
41struct 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
85struct VP9_COMP;
86
87void vp9_init_first_pass(struct VP9_COMP *cpi);
88void vp9_rc_get_first_pass_params(struct VP9_COMP *cpi);
89void vp9_first_pass(struct VP9_COMP *cpi);
90void vp9_end_first_pass(struct VP9_COMP *cpi);
91
92void vp9_init_second_pass(struct VP9_COMP *cpi);
93void vp9_rc_get_second_pass_params(struct VP9_COMP *cpi);
94int 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
98void 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