Improve motion mode gating Introduced a speed feature to gate motion modes based on transform token cost. For speed = 3 and 4 presets, BD-rate drop is seen by 0.03% and 0.03% (as per AWCY runs) with encode time reduction of 2.50% and 3.08% (averaged across multiple test cases) respectively. STATS_CHANGED Change-Id: I13b5aaf0213f86c9a0a0a8d820acad47c7d52186
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index 5dd0d59..4b4d433 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -8683,7 +8683,7 @@ AOMMIN(RDCOST(x->rdmult, rd_stats_y->rate, rd_stats_y->dist), RDCOST(x->rdmult, 0, rd_stats_y->sse)); // Invalidate rd_stats_y to skip the rest of the motion modes search - if (tokenonly_rdy - (tokenonly_rdy >> cpi->sf.adaptive_txb_search_level) > + if (tokenonly_rdy - (tokenonly_rdy >> cpi->sf.prune_motion_mode_level) > rd_thresh) av1_invalid_rd_stats(rd_stats_y); mbmi->ref_frame[1] = ref_frame_1;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c index de4a906..c61c646 100644 --- a/av1/encoder/speed_features.c +++ b/av1/encoder/speed_features.c
@@ -206,6 +206,7 @@ sf->prune_wedge_pred_diff_based = 1; sf->disable_wedge_search_var_thresh = 0; sf->disable_wedge_search_edge_thresh = 0; + sf->prune_motion_mode_level = 1; if (speed >= 1) { sf->gm_erroradv_type = GM_ERRORADV_TR_1; @@ -246,6 +247,7 @@ sf->disable_wedge_search_var_thresh = 0; sf->disable_wedge_search_edge_thresh = 0; sf->prune_comp_type_by_comp_avg = 1; + sf->prune_motion_mode_level = 2; } if (speed >= 2) { @@ -288,6 +290,7 @@ sf->tx_type_search.prune_mode = PRUNE_2D_FAST; sf->gm_search_type = GM_DISABLE_SEARCH; sf->prune_comp_search_by_single_result = 2; + sf->prune_motion_mode_level = boosted ? 2 : 3; } if (speed >= 4) { @@ -524,6 +527,7 @@ sf->obmc_full_pixel_search_level = 0; sf->skip_sharp_interp_filter_search = 0; sf->prune_comp_type_by_comp_avg = 0; + sf->prune_motion_mode_level = 0; if (oxcf->mode == GOOD) set_good_speed_features_framesize_independent(cpi, sf, oxcf->speed);
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h index 9f0aac8..268410d 100644 --- a/av1/encoder/speed_features.h +++ b/av1/encoder/speed_features.h
@@ -597,6 +597,12 @@ // prune wedge and compound segment approximate rd evaluation based on // compound average rd/ref_best_rd int prune_comp_type_by_comp_avg; + + // Prune/gate motion mode evaluation based on token based rd + // during transform search for inter blocks + // Values are 0 (not used) , 1 - 3 with progressively increasing + // aggressiveness + int prune_motion_mode_level; } SPEED_FEATURES; struct AV1_COMP;