diff options
author | Dmitry Kovalev <dkovalev@google.com> | 2014-05-21 10:35:01 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2014-05-21 10:35:01 -0700 |
commit | 3971967c0ba172e4cf7b87172b0d627b011294e9 (patch) | |
tree | 6184073020cef3f572ba0428d5ae947e50be8f37 /vp9/encoder/vp9_firstpass.c | |
parent | d8b26caa712c1a4e040ded3965350b3e9b7b3e3a (diff) | |
parent | 9067b293b39e97f3bc8c62646120cdfd4c956310 (diff) | |
download | libvpx-3971967c0ba172e4cf7b87172b0d627b011294e9.tar libvpx-3971967c0ba172e4cf7b87172b0d627b011294e9.tar.gz libvpx-3971967c0ba172e4cf7b87172b0d627b011294e9.tar.bz2 libvpx-3971967c0ba172e4cf7b87172b0d627b011294e9.zip |
Merge "Cleaning up calculate_section_intra_ratio()."
Diffstat (limited to 'vp9/encoder/vp9_firstpass.c')
-rw-r--r-- | vp9/encoder/vp9_firstpass.c | 49 |
1 files changed, 22 insertions, 27 deletions
diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c index a7c527af4..9929ae101 100644 --- a/vp9/encoder/vp9_firstpass.c +++ b/vp9/encoder/vp9_firstpass.c @@ -1403,30 +1403,22 @@ 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(TWO_PASS *twopass, - const FIRSTPASS_STATS *start_pos, - int section_length) { - FIRSTPASS_STATS next_frame; - FIRSTPASS_STATS sectionstats; - int i; - - vp9_zero(next_frame); - vp9_zero(sectionstats); - - reset_fpf_position(twopass, start_pos); - - for (i = 0; i < section_length; ++i) { - input_stats(twopass, &next_frame); - accumulate_stats(§ionstats, &next_frame); +static int calculate_section_intra_ratio(const FIRSTPASS_STATS *begin, + const FIRSTPASS_STATS *end, + int section_length) { + const FIRSTPASS_STATS *s = begin; + double intra_error = 0.0; + double coded_error = 0.0; + int i = 0; + + while (s < end && i < section_length) { + intra_error += s->intra_error; + coded_error += s->coded_error; + ++s; + ++i; } - avg_stats(§ionstats); - - twopass->section_intra_rating = - (int)(sectionstats.intra_error / - DOUBLE_DIVIDE_CHECK(sectionstats.coded_error)); - - reset_fpf_position(twopass, start_pos); + return (int)(intra_error / DOUBLE_DIVIDE_CHECK(coded_error)); } // Calculate the total bits to allocate in this GF/ARF group. @@ -1486,7 +1478,7 @@ static void define_gf_group(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) { const VP9EncoderConfig *const oxcf = &cpi->oxcf; TWO_PASS *const twopass = &cpi->twopass; FIRSTPASS_STATS next_frame; - const FIRSTPASS_STATS *start_pos; + const FIRSTPASS_STATS *const start_pos = twopass->stats_in; int i; double boost_score = 0.0; double old_boost_score = 0.0; @@ -1516,7 +1508,6 @@ static void define_gf_group(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) { vp9_zero(next_frame); twopass->gf_group_bits = 0; - start_pos = twopass->stats_in; // Load stats for the current frame. mod_frame_err = calculate_modified_err(cpi, this_frame); @@ -1768,7 +1759,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) { - calculate_section_intra_ratio(twopass, start_pos, rc->baseline_gf_interval); + twopass->section_intra_rating = + calculate_section_intra_ratio(start_pos, twopass->stats_in_end, + rc->baseline_gf_interval); } } @@ -1885,7 +1878,7 @@ static void find_next_key_frame(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) { RATE_CONTROL *const rc = &cpi->rc; TWO_PASS *const twopass = &cpi->twopass; const FIRSTPASS_STATS first_frame = *this_frame; - const FIRSTPASS_STATS *start_position = twopass->stats_in; + const FIRSTPASS_STATS *const start_position = twopass->stats_in; FIRSTPASS_STATS next_frame; FIRSTPASS_STATS last_frame; double decay_accumulator = 1.0; @@ -2068,7 +2061,9 @@ static void find_next_key_frame(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) { twopass->kf_zeromotion_pct = (int)(zero_motion_accumulator * 100.0); // Calculate a section intra ratio used in setting max loop filter. - calculate_section_intra_ratio(twopass, start_position, rc->frames_to_key); + twopass->section_intra_rating = + calculate_section_intra_ratio(start_position, twopass->stats_in_end, + rc->frames_to_key); // Work out how many bits to allocate for the key frame itself. rc->kf_boost = (int)boost_score; |