rtc: Use zeromv mode for speed >= 9
Use mode set with zeromv (via globalmv) forr speed >= 9,
for content with low motion. Also reduce threshold for
update of avg_frame_low_motion: this threshold change
is neutral bdrate but reduces max regression when using
zeromv.
bdrate gain on rtc set for speed 9:
avg gain ~0.62%, max gain ~3.2%, max regression ~1.4%.
No change in speed observed.
Change-Id: Icc993e2444444cb13c1f7fef271ca2f1349381a7
diff --git a/av1/encoder/aq_cyclicrefresh.c b/av1/encoder/aq_cyclicrefresh.c
index 30aeaa1..3308ffe 100644
--- a/av1/encoder/aq_cyclicrefresh.c
+++ b/av1/encoder/aq_cyclicrefresh.c
@@ -225,7 +225,7 @@
}
// Accumulate low_content_frame.
if (is_inter_block(mi[0]) && mi[0]->ref_frame[0] == LAST_FRAME &&
- abs(mv.row) < 16 && abs(mv.col) < 16)
+ abs(mv.row) < 8 && abs(mv.col) < 8)
cnt_zeromv += sh << 1;
if (mi_col + sh < mi_params->mi_cols) {
mi += sh;
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index 0891323..ad0be35 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -1979,12 +1979,15 @@
int force_skip_low_temp_var = 0;
int use_ref_frame_mask[REF_FRAMES] = { 0 };
unsigned int sse_zeromv_norm = UINT_MAX;
- const int num_inter_modes = cpi->sf.rt_sf.nonrd_agressive_skip
- ? NUM_INTER_MODES_REDUCED
- : NUM_INTER_MODES_RT;
- const REF_MODE *const ref_mode_set = cpi->sf.rt_sf.nonrd_agressive_skip
- ? ref_mode_set_reduced
- : ref_mode_set_rt;
+ // Use mode set that includes zeromv (via globalmv) for speed >= 9 for
+ // content with low motion.
+ int use_zeromv =
+ ((cpi->oxcf.speed >= 9 && cpi->rc.avg_frame_low_motion > 70) ||
+ cpi->sf.rt_sf.nonrd_agressive_skip);
+ const int num_inter_modes =
+ use_zeromv ? NUM_INTER_MODES_REDUCED : NUM_INTER_MODES_RT;
+ const REF_MODE *const ref_mode_set =
+ use_zeromv ? ref_mode_set_reduced : ref_mode_set_rt;
PRED_BUFFER tmp[4];
DECLARE_ALIGNED(16, uint8_t, pred_buf[3 * 128 * 128]);
PRED_BUFFER *this_mode_pred = NULL;