rtc: Skip intra based on LowSad, for speed 8
For superblocks with LowSad avoid intra test,
but only for spatial variance above threshold
to minimize visual impact.
bdrate negligible: avg/max ~0.03/0.24% on rtc_derf.
speedup ~2-3% on apprtc qvga clip.
Change-Id: I52357e49e1c4c6d14b0b91f19c29f2313872c923
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index a118001..d3880cd 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -1530,7 +1530,7 @@
quant_params->base_qindex, quant_params->y_dc_delta_q,
cm->seq_params.bit_depth);
int64_t inter_mode_thresh = RDCOST(x->rdmult, intra_cost_penalty, 0);
- const int perform_intra_pred = cpi->sf.rt_sf.check_intra_pred_nonrd;
+ int perform_intra_pred = cpi->sf.rt_sf.check_intra_pred_nonrd;
int use_modeled_non_rd_cost = 0;
int enable_filter_search = 0;
InterpFilter default_interp_filter = EIGHTTAP_REGULAR;
@@ -1994,6 +1994,9 @@
// For big blocks worth checking intra (since only DC will be checked),
// even if best_early_term is set.
if (bsize >= BLOCK_32X32) best_early_term = 0;
+ } else if (cpi->sf.rt_sf.source_metrics_sb_nonrd &&
+ x->content_state_sb == kLowSad) {
+ perform_intra_pred = 0;
}
if (best_rdc.rdcost == INT64_MAX ||
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index e6d25f3..387e63b 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -253,7 +253,6 @@
if (speed >= 8) {
sf->rt_sf.use_modeled_non_rd_cost = 0;
sf->rt_sf.use_nonrd_filter_search = 0;
- sf->rt_sf.source_metrics_sb_nonrd = 0;
}
}
if (is_360p_or_larger) {