From 1032aa98de901ed3b7a501d57f510e33b1d314c6 Mon Sep 17 00:00:00 2001 From: Marco Paniconi Date: Mon, 8 Apr 2019 14:29:40 -0700 Subject: [PATCH] vp9-rtc: Speed feature for filter_search in nonrd_pickmode. Use chessboard search only for certain speeds/resolns (speed >= 8) for real-time speed features. Disable chessboard search for speeds <= 7. ~2.5 gain on rtc set for speed 7. ~1% slowdown. Change-Id: Ic6898aa475817e128154f691413c73f65306e2a8 --- vp9/encoder/vp9_pickmode.c | 16 +++++++++------- vp9/encoder/vp9_speed_features.c | 3 +++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index e016863..2b401ec 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -1643,13 +1643,7 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data, const int denoise_recheck_zeromv = 0; #endif INTERP_FILTER filter_ref; - const int bsl = mi_width_log2_lookup[bsize]; - const int pred_filter_search = - cm->interp_filter == SWITCHABLE - ? (((mi_row + mi_col) >> bsl) + - get_chessboard_index(cm->current_video_frame)) & - 0x1 - : 0; + int pred_filter_search = cm->interp_filter == SWITCHABLE; int const_motion[MAX_REF_FRAMES] = { 0 }; const int bh = num_4x4_blocks_high_lookup[bsize] << 2; const int bw = num_4x4_blocks_wide_lookup[bsize] << 2; @@ -1780,6 +1774,14 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data, x->skip_encode = cpi->sf.skip_encode_frame && x->q_index < QIDX_SKIP_THRESH; x->skip = 0; + if (cpi->sf.cb_pred_filter_search) { + const int bsl = mi_width_log2_lookup[bsize]; + pred_filter_search = cm->interp_filter == SWITCHABLE + ? (((mi_row + mi_col) >> bsl) + + get_chessboard_index(cm->current_video_frame)) & + 0x1 + : 0; + } // Instead of using vp9_get_pred_context_switchable_interp(xd) to assign // filter_ref, we use a less strict condition on assigning filter_ref. // This is to reduce the probabily of entering the flow of not assigning diff --git a/vp9/encoder/vp9_speed_features.c b/vp9/encoder/vp9_speed_features.c index 0a04340..8c52312 100644 --- a/vp9/encoder/vp9_speed_features.c +++ b/vp9/encoder/vp9_speed_features.c @@ -452,6 +452,7 @@ static void set_rt_speed_feature_framesize_independent( sf->use_accurate_subpel_search = USE_2_TAPS; sf->nonrd_use_ml_partition = 0; sf->variance_part_thresh_mult = 1; + sf->cb_pred_filter_search = 0; if (speed >= 1) { sf->allow_txfm_domain_distortion = 1; @@ -749,9 +750,11 @@ static void set_rt_speed_feature_framesize_independent( } sf->limit_newmv_early_exit = 0; sf->use_simple_block_yrd = 1; + if (cm->width * cm->height > 352 * 288) sf->cb_pred_filter_search = 1; } if (speed >= 9) { + sf->cb_pred_filter_search = 1; sf->mv.enable_adaptive_subpel_force_stop = 1; sf->mv.adapt_subpel_force_stop.mv_thresh = 1; sf->mv.adapt_subpel_force_stop.force_stop_below = QUARTER_PEL; -- 2.7.4