Clean up of firstpass.c
Re-factor duplicate code. Add two pass check for use of section_intra_rating as it is un-initialised in the 1 pass and rt case. Change-Id: I93120796f07961b8a21fb26e1a9f0d3d13949994
This commit is contained in:
parent
00d54aa331
commit
702e25839e
@ -1417,6 +1417,30 @@ void define_fixed_arf_period(VP9_COMP *cpi) {
|
||||
}
|
||||
#endif
|
||||
|
||||
// Calculate a section intra ratio used in setting max loop filter.
|
||||
static void calculate_section_intra_ratio(struct twopass_rc *twopass,
|
||||
const FIRSTPASS_STATS *start_pos,
|
||||
int section_length) {
|
||||
FIRSTPASS_STATS next_frame = { 0 };
|
||||
FIRSTPASS_STATS sectionstats = { 0 };
|
||||
int i;
|
||||
|
||||
reset_fpf_position(twopass, start_pos);
|
||||
|
||||
for (i = 0; i < section_length; ++i) {
|
||||
input_stats(twopass, &next_frame);
|
||||
accumulate_stats(§ionstats, &next_frame);
|
||||
}
|
||||
|
||||
avg_stats(§ionstats);
|
||||
|
||||
twopass->section_intra_rating =
|
||||
(int)(sectionstats.intra_error /
|
||||
DOUBLE_DIVIDE_CHECK(sectionstats.coded_error));
|
||||
|
||||
reset_fpf_position(twopass, start_pos);
|
||||
}
|
||||
|
||||
// Calculate the total bits to allocate in this GF/ARF group.
|
||||
static int64_t calculate_total_gf_group_bits(VP9_COMP *cpi,
|
||||
double gf_group_err) {
|
||||
@ -1795,24 +1819,9 @@ static void define_gf_group(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) {
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate a section intra ratio used in setting max loop filter.
|
||||
if (cpi->common.frame_type != KEY_FRAME) {
|
||||
FIRSTPASS_STATS sectionstats;
|
||||
|
||||
zero_stats(§ionstats);
|
||||
reset_fpf_position(twopass, start_pos);
|
||||
|
||||
for (i = 0; i < rc->baseline_gf_interval; ++i) {
|
||||
input_stats(twopass, &next_frame);
|
||||
accumulate_stats(§ionstats, &next_frame);
|
||||
}
|
||||
|
||||
avg_stats(§ionstats);
|
||||
|
||||
twopass->section_intra_rating = (int)
|
||||
(sectionstats.intra_error /
|
||||
DOUBLE_DIVIDE_CHECK(sectionstats.coded_error));
|
||||
|
||||
reset_fpf_position(twopass, start_pos);
|
||||
calculate_section_intra_ratio(twopass, start_pos, rc->baseline_gf_interval);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2108,25 +2117,8 @@ static void find_next_key_frame(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) {
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
FIRSTPASS_STATS sectionstats;
|
||||
|
||||
zero_stats(§ionstats);
|
||||
reset_fpf_position(twopass, start_position);
|
||||
|
||||
for (i = 0; i < rc->frames_to_key; ++i) {
|
||||
input_stats(twopass, &next_frame);
|
||||
accumulate_stats(§ionstats, &next_frame);
|
||||
}
|
||||
|
||||
avg_stats(§ionstats);
|
||||
|
||||
twopass->section_intra_rating = (int) (sectionstats.intra_error /
|
||||
DOUBLE_DIVIDE_CHECK(sectionstats.coded_error));
|
||||
}
|
||||
|
||||
// Reset the first pass file position.
|
||||
reset_fpf_position(twopass, start_position);
|
||||
// Calculate a section intra ratio used in setting max loop filter.
|
||||
calculate_section_intra_ratio(twopass, start_position, rc->frames_to_key);
|
||||
|
||||
// Work out how many bits to allocate for the key frame itself.
|
||||
if (1) {
|
||||
|
@ -24,8 +24,12 @@
|
||||
#include "vp9/encoder/vp9_quantize.h"
|
||||
|
||||
static int get_max_filter_level(const VP9_COMP *cpi) {
|
||||
return cpi->twopass.section_intra_rating > 8 ? MAX_LOOP_FILTER * 3 / 4
|
||||
: MAX_LOOP_FILTER;
|
||||
if (cpi->pass == 2) {
|
||||
return cpi->twopass.section_intra_rating > 8 ? MAX_LOOP_FILTER * 3 / 4
|
||||
: MAX_LOOP_FILTER;
|
||||
} else {
|
||||
return MAX_LOOP_FILTER;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -77,8 +81,8 @@ static int search_filter_level(const YV12_BUFFER_CONFIG *sd, VP9_COMP *cpi,
|
||||
// Bias against raising loop filter in favor of lowering it.
|
||||
int bias = (best_err >> (15 - (filt_mid / 8))) * filter_step;
|
||||
|
||||
if (cpi->twopass.section_intra_rating < 20)
|
||||
bias = bias * cpi->twopass.section_intra_rating / 20;
|
||||
if ((cpi->pass == 2) && (cpi->twopass.section_intra_rating < 20))
|
||||
bias = (bias * cpi->twopass.section_intra_rating) / 20;
|
||||
|
||||
// yx, bias less for large block size
|
||||
if (cm->tx_mode != ONLY_4X4)
|
||||
|
Loading…
x
Reference in New Issue
Block a user