Merge "Exploit the spatial variance in temporal dependency model"
authorJingning Han <jingning@google.com>
Mon, 2 Jul 2018 17:01:45 +0000 (17:01 +0000)
committerGerrit Code Review <noreply-gerritcodereview@google.com>
Mon, 2 Jul 2018 17:01:45 +0000 (17:01 +0000)
1  2 
vp9/encoder/vp9_block.h
vp9/encoder/vp9_encodeframe.c
vp9/encoder/vp9_encoder.c

Simple merge
index 469c4592117a3ed8bb85e3d074d54367296ccdd6,c28829a87c2fdbc61b8493552db0b2e1fba83596..93447619f9098131ff944847ab4fc89a5952ab95
@@@ -3609,8 -3493,48 +3612,49 @@@ static int ml_predict_breakout(const VP
  }
  #undef FEATURES
  #undef Q_CTX
 +#undef RESOLUTION_CTX
  
+ int get_rdmult_delta(VP9_COMP *cpi, BLOCK_SIZE bsize, int mi_row, int mi_col,
+                      int orig_rdmult) {
+   TplDepFrame *tpl_frame = &cpi->tpl_stats[cpi->twopass.gf_group.index];
+   TplDepStats *tpl_stats = tpl_frame->tpl_stats_ptr;
+   int tpl_stride = tpl_frame->stride;
+   int64_t intra_cost = 0;
+   int64_t mc_dep_cost = 0;
+   int mi_wide = num_8x8_blocks_wide_lookup[bsize];
+   int mi_high = num_8x8_blocks_high_lookup[bsize];
+   int row, col;
+   int dr = 0;
+   int count = 0;
+   double r0, rk, beta;
+   r0 = cpi->rd.r0;
+   for (row = mi_row; row < mi_row + mi_high; ++row) {
+     for (col = mi_col; col < mi_col + mi_wide; ++col) {
+       TplDepStats *this_stats = &tpl_stats[row * tpl_stride + col];
+       if (row >= cpi->common.mi_rows || col >= cpi->common.mi_cols) continue;
+       intra_cost += this_stats->intra_cost;
+       mc_dep_cost += this_stats->mc_dep_cost;
+       ++count;
+     }
+   }
+   rk = (double)intra_cost / (intra_cost + mc_dep_cost);
+   beta = r0 / rk;
+   dr = vp9_get_adaptive_rdmult(cpi, beta);
+   dr = VPXMIN(dr, orig_rdmult * 5 / 4);
+   dr = VPXMAX(dr, orig_rdmult * 3 / 4);
+   dr = VPXMAX(1, dr);
+   return dr;
+ }
  // TODO(jingning,jimbankoski,rbultje): properly skip partition types that are
  // unlikely to be selected depending on previous rate-distortion optimization
  // results, for encoding speed-up.
Simple merge