From: Jingning Han Date: Mon, 2 Jul 2018 17:01:45 +0000 (+0000) Subject: Merge "Exploit the spatial variance in temporal dependency model" X-Git-Tag: v1.8.0~556 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1bb29e24553bc03c8cb2b3bb11daff8c109cc462;p=libvpx Merge "Exploit the spatial variance in temporal dependency model" --- 1bb29e24553bc03c8cb2b3bb11daff8c109cc462 diff --cc vp9/encoder/vp9_encodeframe.c index 469c45921,c28829a87..93447619f --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@@ -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.