shithub: libvpx

Download patch

ref: 9b96d2846b16967128fcc674d785b64253f255d0
parent: b5707b6f14ea1e368ad739d2ae9748086b488a45
author: Paul Wilkins <paulwilkins@google.com>
date: Thu Feb 28 11:58:19 EST 2019

Add block size scaling in rd_variance_adjustment()

Scale the block variance values used in this function
to a common block size.

Change-Id: I73ad7d48b2621f312d771ee0dd7b6fc59cfc1652

--- a/vp9/encoder/vp9_rdopt.c
+++ b/vp9/encoder/vp9_rdopt.c
@@ -3013,6 +3013,8 @@
   unsigned int absvar_diff = 0;
   unsigned int var_factor = 0;
   unsigned int adj_max;
+  const int bw = num_8x8_blocks_wide_lookup[bsize];
+  const int bh = num_8x8_blocks_high_lookup[bsize];
   vp9e_tune_content content_type = cpi->oxcf.content;
 
   if (*this_rd == INT64_MAX) return;
@@ -3031,6 +3033,10 @@
   rec_variance = vp9_get_sby_variance(cpi, &xd->plane[0].dst, bsize);
   src_variance = vp9_get_sby_variance(cpi, &x->plane[0].src, bsize);
 #endif  // CONFIG_VP9_HIGHBITDEPTH
+
+  // Scale based on area in 8x8 blocks
+  rec_variance /= (bw * bh);
+  src_variance /= (bw * bh);
 
   // Lower of source (raw per pixel value) and recon variance. Note that
   // if the source per pixel is 0 then the recon value here will not be per