vp9_firstpass.h 2.67 KB
Newer Older
John Koleszar's avatar
John Koleszar committed
1
/*
2
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
John Koleszar's avatar
John Koleszar committed
3
 *
4
 *  Use of this source code is governed by a BSD-style license
5
6
 *  that can be found in the LICENSE file in the root of the source
 *  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.
John Koleszar's avatar
John Koleszar committed
9
10
 */

11
#ifndef VP9_ENCODER_VP9_FIRSTPASS_H_
12
#define VP9_ENCODER_VP9_FIRSTPASS_H_
John Koleszar's avatar
John Koleszar committed
13

14
15
16
17
#ifdef __cplusplus
extern "C" {
#endif

18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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;
John Koleszar's avatar
John Koleszar committed
39

40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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;

  // 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;
};

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);
John Koleszar's avatar
John Koleszar committed
91

92
93
94
// Post encode update of the rate control parameters for 2-pass
void vp9_twopass_postencode_update(struct VP9_COMP *cpi,
                                   uint64_t bytes_used);
95
96
97
98
#ifdef __cplusplus
}  // extern "C"
#endif

99
#endif  // VP9_ENCODER_VP9_FIRSTPASS_H_