ref: 72dc6478ac65dbf8b9c4b14c52937396a7bd24b4
parent: 7b87b35153343216008dc4801cf591786698cdbd
parent: 7a5596fa78ad41c428c2e3a4196d3b391d4ac77c
author: Cheng Chen <chengchen@google.com>
date: Wed Apr 7 15:03:53 EDT 2021
Merge "Fix compilation for CONFIG_RATE_CTRL"
--- a/vp9/encoder/vp9_firstpass.c
+++ b/vp9/encoder/vp9_firstpass.c
@@ -2553,6 +2553,9 @@
* (The following fields will remain unchanged after initialization of encoder.)
* rc->static_scene_max_gf_interval
* rc->min_gf_interval
+ * twopass->sr_diff_factor
+ * twopass->sr_default_decay_limit
+ * twopass->zm_factor
*
* Dynamic fields:
* (The following fields will be updated before or after coding each frame.)
@@ -2567,10 +2570,10 @@
* structs.
*/
static int get_gop_coding_frame_num(
- int *use_alt_ref, const FRAME_INFO *frame_info, TWO_PASS *const twopass,
- const RATE_CONTROL *rc, int gf_start_show_idx,
- const RANGE *active_gf_interval, double gop_intra_factor,
- int lag_in_frames) {
+ int *use_alt_ref, const FRAME_INFO *frame_info,
+ const TWO_PASS *const twopass, const RATE_CONTROL *rc,
+ int gf_start_show_idx, const RANGE *active_gf_interval,
+ double gop_intra_factor, int lag_in_frames) {
const FIRST_PASS_INFO *first_pass_info = &twopass->first_pass_info;
double loop_decay_rate = 1.00;
double mv_ratio_accumulator = 0.0;
@@ -3876,7 +3879,7 @@
*first_is_key_frame = 0;
if (rc.frames_to_key == 0) {
rc.frames_to_key = vp9_get_frames_to_next_key(
- &cpi->oxcf, twopass, *first_show_idx, rc.min_gf_interval);
+ &cpi->oxcf, &cpi->twopass, *first_show_idx, rc.min_gf_interval);
rc.frames_since_key = 0;
*first_is_key_frame = 1;
}
@@ -3887,15 +3890,15 @@
assert(*coding_frame_count < rc.frames_to_key);
} else {
*coding_frame_count = vp9_get_gop_coding_frame_count(
- &cpi->oxcf, &cpi->frame_info, &cpi->twopass.first_pass_info, &rc,
- *first_show_idx, multi_layer_arf, allow_alt_ref, *first_is_key_frame,
+ &cpi->oxcf, &cpi->twopass, &cpi->frame_info, &rc, *first_show_idx,
+ multi_layer_arf, allow_alt_ref, *first_is_key_frame,
*last_gop_use_alt_ref, use_alt_ref);
}
}
int vp9_get_gop_coding_frame_count(const VP9EncoderConfig *oxcf,
+ const TWO_PASS *const twopass,
const FRAME_INFO *frame_info,
- const FIRST_PASS_INFO *first_pass_info,
const RATE_CONTROL *rc, int show_idx,
int multi_layer_arf, int allow_alt_ref,
int first_is_key_frame,
@@ -3925,6 +3928,7 @@
// Under CONFIG_RATE_CTRL, once the first_pass_info is ready, the number of
// coding frames (including show frame and alt ref) can be determined.
int vp9_get_coding_frame_num(const VP9EncoderConfig *oxcf,
+ const TWO_PASS *const twopass,
const FRAME_INFO *frame_info,
const FIRST_PASS_INFO *first_pass_info,
int multi_layer_arf, int allow_alt_ref) {
@@ -3947,7 +3951,7 @@
}
gop_coding_frame_count = vp9_get_gop_coding_frame_count(
- oxcf, frame_info, first_pass_info, &rc, show_idx, multi_layer_arf,
+ oxcf, twopass, frame_info, &rc, show_idx, multi_layer_arf,
allow_alt_ref, first_is_key_frame, last_gop_use_alt_ref, &use_alt_ref);
rc.source_alt_ref_active = use_alt_ref;
@@ -3963,6 +3967,7 @@
void vp9_get_key_frame_map(const VP9EncoderConfig *oxcf,
const TWO_PASS *const twopass, int *key_frame_map) {
+ const FIRST_PASS_INFO *first_pass_info = &twopass->first_pass_info;
int show_idx = 0;
RATE_CONTROL rc;
vp9_rc_init(oxcf, 1, &rc);
--- a/vp9/encoder/vp9_firstpass.h
+++ b/vp9/encoder/vp9_firstpass.h
@@ -278,8 +278,8 @@
/*!\brief Call this function before coding a new group of pictures to get
* information about it.
* \param[in] oxcf Encoder config
+ * \param[in] twopass Twopass info
* \param[in] frame_info Frame info
- * \param[in] first_pass_info First pass stats
* \param[in] rc Rate control state
* \param[in] show_idx Show index of the first frame in the group
* \param[in] multi_layer_arf Is multi-layer alternate reference used
@@ -292,8 +292,8 @@
* \return Returns coding frame count
*/
int vp9_get_gop_coding_frame_count(const struct VP9EncoderConfig *oxcf,
+ const TWO_PASS *const twopass,
const FRAME_INFO *frame_info,
- const FIRST_PASS_INFO *first_pass_info,
const RATE_CONTROL *rc, int show_idx,
int multi_layer_arf, int allow_alt_ref,
int first_is_key_frame,
@@ -300,6 +300,7 @@
int last_gop_use_alt_ref, int *use_alt_ref);
int vp9_get_coding_frame_num(const struct VP9EncoderConfig *oxcf,
+ const TWO_PASS *const twopass,
const FRAME_INFO *frame_info,
const FIRST_PASS_INFO *first_pass_info,
int multi_layer_arf, int allow_alt_ref);
@@ -306,12 +307,11 @@
/*!\brief Compute a key frame binary map indicates whether key frames appear
* in the corresponding positions. The passed in key_frame_map must point to an
- * integer array with length equal to first_pass_info->num_frames, which is the
- * number of show frames in the video.
+ * integer array with length equal to twopass->first_pass_info.num_frames,
+ * which is the number of show frames in the video.
*/
void vp9_get_key_frame_map(const struct VP9EncoderConfig *oxcf,
- const FIRST_PASS_INFO *first_pass_info,
- int *key_frame_map);
+ const TWO_PASS *const twopass, int *key_frame_map);
#endif // CONFIG_RATE_CTRL
FIRSTPASS_STATS vp9_get_frame_stats(const TWO_PASS *twopass);
--- a/vp9/simple_encode.cc
+++ b/vp9/simple_encode.cc
@@ -1084,8 +1084,7 @@
const VP9_COMP *cpi = impl_ptr_->cpi;
key_frame_group_index_ = 0;
key_frame_group_size_ = vp9_get_frames_to_next_key(
- &cpi->oxcf, &cpi->frame_info, &cpi->twopass.first_pass_info,
- key_frame_show_index, cpi->rc.min_gf_interval);
+ &cpi->oxcf, &cpi->twopass, key_frame_show_index, cpi->rc.min_gf_interval);
assert(key_frame_group_size_ > 0);
// Init the reference frame info when a new key frame group appears.
InitRefFrameInfo(&ref_frame_info_);
@@ -1250,6 +1249,7 @@
}
// These are the default settings for now.
+ const VP9_COMP *cpi = impl_ptr_->cpi;
const int multi_layer_arf = 0;
const int allow_alt_ref = 1;
vpx_rational_t frame_rate =
@@ -1262,11 +1262,13 @@
fps_init_first_pass_info(&first_pass_info,
GetVectorData(impl_ptr_->first_pass_stats),
num_frames_);
- return vp9_get_coding_frame_num(&oxcf, &frame_info, &first_pass_info,
- multi_layer_arf, allow_alt_ref);
+ return vp9_get_coding_frame_num(&oxcf, &cpi->twopass, &frame_info,
+ &first_pass_info, multi_layer_arf,
+ allow_alt_ref);
}
std::vector<int> SimpleEncode::ComputeKeyFrameMap() const {
+ const VP9_COMP *cpi = impl_ptr_->cpi;
// The last entry of first_pass_stats is the overall stats.
assert(impl_ptr_->first_pass_stats.size() == num_frames_ + 1);
vpx_rational_t frame_rate =
@@ -1274,14 +1276,12 @@
const VP9EncoderConfig oxcf = GetEncodeConfig(
frame_width_, frame_height_, frame_rate, target_bitrate_, encode_speed_,
VPX_RC_LAST_PASS, impl_ptr_->encode_config_list);
- FRAME_INFO frame_info = vp9_get_frame_info(&oxcf);
FIRST_PASS_INFO first_pass_info;
fps_init_first_pass_info(&first_pass_info,
GetVectorData(impl_ptr_->first_pass_stats),
num_frames_);
std::vector<int> key_frame_map(num_frames_, 0);
- vp9_get_key_frame_map(&oxcf, &frame_info, &first_pass_info,
- GetVectorData(key_frame_map));
+ vp9_get_key_frame_map(&oxcf, &cpi->twopass, GetVectorData(key_frame_map));
return key_frame_map;
}