ref: e4702deeec1573a0258e5befd01178cca045584f
parent: 8565a1c99a18d29a72fb716ad64614dc8e92499f
author: paulwilkins <paulwilkins@google.com>
date: Mon Jun 15 07:28:38 EDT 2015
ARF Boost correction for inactive regions. Correct the ARF boost calculations to partly discount inactive or very low energy regions of the image. Examples (formatting bars and 0 energy areas of animated clips). Change-Id: I241af058d10aba8c67a4deca36deb913047d4561
--- a/vp9/encoder/vp9_firstpass.c
+++ b/vp9/encoder/vp9_firstpass.c
@@ -1450,15 +1450,21 @@
const FIRSTPASS_STATS *this_frame,
double this_frame_mv_in_out,
double max_boost) {
+ VP9_COMMON *const cm = &cpi->common;
double frame_boost;
const double lq =
vp9_convert_qindex_to_q(cpi->rc.avg_frame_qindex[INTER_FRAME],
cpi->common.bit_depth);
const double boost_q_correction = MIN((0.5 + (lq * 0.015)), 1.5);
- const int num_mbs = (cpi->oxcf.resize_mode != RESIZE_NONE)
- ? cpi->initial_mbs : cpi->common.MBs;
+ double inactive_pct;
+ int num_mbs = (cpi->oxcf.resize_mode != RESIZE_NONE)
+ ? cpi->initial_mbs : cpi->common.MBs;
- // TODO(paulwilkins): correct for dead zone
+ // Correct for any inactive zone in the image
+ inactive_pct = (this_frame->intra_skip_pct / 2) +
+ ((this_frame->inactive_zone_rows * 2) / (double)cm->mb_rows);
+ inactive_pct = fclamp(inactive_pct, 0.0, 0.5);
+ num_mbs = (int)MAX(1, num_mbs - (num_mbs * inactive_pct));
// Underlying boost factor is based on inter error ratio.
frame_boost = (BASELINE_ERR_PER_MB * num_mbs) /
--
⑨