rtc: Adjustment to speed 7 for low spatial variance
For blocks with low spatial variance:
avoid early exit based on rd_thresh for DC/H/V modes.
Some visual improvement on test clip with alot
of uncovered areas/motion. Negligible bdrate change on
rtc_derf set, no change in speed observed.
Change-Id: Iedba8e5774d79f0a9abea51523dd1a395f39c7ce
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index 90a202b..c2e9a4e 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -1876,14 +1876,17 @@
mi->angle_delta[PLANE_TYPE_UV] = 0;
mi->filter_intra_mode_info.use_filter_intra = 0;
+ uint32_t spatial_var_thresh = 50;
+ int do_early_exit_rdthresh = 1;
// Some adjustments to checking intra mode based on source variance.
- if (x->source_variance < 50) {
+ if (x->source_variance < spatial_var_thresh) {
// If the best inter mode is large motion or non-LAST ref reduce intra cost
// penalty, so intra mode is more likely tested.
if (best_pickmode.best_ref_frame != LAST_FRAME ||
abs(mi->mv[0].as_mv.row) > 32 || abs(mi->mv[0].as_mv.col) > 32) {
intra_cost_penalty = intra_cost_penalty >> 2;
inter_mode_thresh = RDCOST(x->rdmult, intra_cost_penalty, 0);
+ do_early_exit_rdthresh = 0;
}
// For big blocks worth checking intra (since only DC will be checked),
// even if best_early_term is set.
@@ -1922,7 +1925,8 @@
if (this_mode > 0 && bsize >= BLOCK_32X32) continue;
if (rd_less_than_thresh(best_rdc.rdcost, mode_rd_thresh,
- rd_thresh_freq_fact[mode_index])) {
+ rd_thresh_freq_fact[mode_index]) &&
+ (do_early_exit_rdthresh || this_mode == SMOOTH_PRED)) {
continue;
}
const BLOCK_SIZE uv_bsize = get_plane_block_size(