AV1 RT: Introduce speed 10 for RT mode
9% BDRate drop comparing to speed 9 on rtc set and ~20% speed up.
Still 9% BDRate better than VP9 speed 7 and 15-18% slower
Change-Id: Ib56e20e1572b7326ca158dccbfe3ffd5ce7794be
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index 0874d18..7e37678 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -637,7 +637,8 @@
RANGE_CHECK_HI(extra_cfg, ext_tile_debug, 1);
RANGE_CHECK_HI(extra_cfg, enable_auto_alt_ref, 1);
RANGE_CHECK_HI(extra_cfg, enable_auto_bwd_ref, 2);
- RANGE_CHECK(extra_cfg, cpu_used, 0, 9);
+ RANGE_CHECK(extra_cfg, cpu_used, 0,
+ (cfg->g_usage == AOM_USAGE_REALTIME) ? 10 : 9);
RANGE_CHECK_HI(extra_cfg, noise_sensitivity, 6);
RANGE_CHECK(extra_cfg, superblock_size, AOM_SUPERBLOCK_SIZE_64X64,
AOM_SUPERBLOCK_SIZE_DYNAMIC);
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index f5105be..919d39a 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -3447,7 +3447,8 @@
} else {
if (cpi->svc.number_spatial_layers == 1 &&
cpi->svc.number_temporal_layers == 1)
- features->disable_cdf_update = cm->current_frame.frame_number & 1;
+ features->disable_cdf_update =
+ !((cm->current_frame.frame_number % 2) == 0);
else if (cpi->svc.number_temporal_layers > 1)
// Disable only on top temporal enhancement layer for now.
features->disable_cdf_update = (cpi->svc.temporal_layer_id ==
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index f264665..630b4e2 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -1848,7 +1848,6 @@
if (cpi->rc.frames_since_golden == 0 && gf_temporal_ref) {
use_golden_ref_frame = 0;
}
-
if (cpi->sf.rt_sf.short_circuit_low_temp_var &&
x->nonrd_prune_ref_frame_search) {
if (is_small_sb)
@@ -2166,6 +2165,10 @@
if (ref_frame != LAST_FRAME && mode == NEARMV) return 1;
if (more_prune && bsize >= BLOCK_32X32 && mode == NEARMV) return 1;
+
+ if (extra_prune > 2 && ref_frame != LAST_FRAME) {
+ return 1;
+ }
}
return 0;
}
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 702c950..2903ab9 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -1231,6 +1231,9 @@
sf->mv_sf.subpel_search_method = SUBPEL_TREE_PRUNED;
sf->rt_sf.estimate_motion_for_var_based_partition = 0;
}
+ if (speed >= 10) {
+ sf->rt_sf.use_comp_ref_nonrd = 0;
+ }
}
if (cpi->ppi->use_svc) {
sf->rt_sf.use_comp_ref_nonrd = 0;
@@ -1523,6 +1526,12 @@
for (int i = 0; i < BLOCK_SIZES; ++i)
sf->rt_sf.intra_y_mode_bsize_mask_nrd[i] = INTRA_DC;
}
+ if (speed >= 10) {
+ sf->rt_sf.source_metrics_sb_nonrd = 0;
+ sf->rt_sf.skip_intra_pred_if_tx_skip = 1;
+ sf->rt_sf.nonrd_agressive_skip = 1;
+ sf->rt_sf.nonrd_prune_ref_frame_search = 3;
+ }
}
static AOM_INLINE void init_hl_sf(HIGH_LEVEL_SPEED_FEATURES *hl_sf) {