From e27fb6e8074a7286120bb0fbe3c4ebd0e38a0413 Mon Sep 17 00:00:00 2001 From: Jayasingam Adhuran Date: Fri, 11 Sep 2026 07:32:42 -0700 Subject: [PATCH] Enable four param and six param warp delta in winner motion mode for all tid levels Reduce winner motion mode candidates to 2 Enabled for speed 6 --- av2/encoder/rdopt.c | 2 +- av2/encoder/speed_features.c | 12 +++++++----- av2/encoder/speed_features.h | 4 +++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/av2/encoder/rdopt.c b/av2/encoder/rdopt.c index 512b4d1dc3..abd7368aca 100644 --- a/av2/encoder/rdopt.c +++ b/av2/encoder/rdopt.c @@ -8849,7 +8849,7 @@ static void tx_search_best_inter_candidates( } // Indicates number of winner simple translation modes to be used -static const unsigned int num_winner_motion_modes[3] = { 0, 10, 6 }; +static const unsigned int num_winner_motion_modes[4] = { 0, 10, 6, 3 }; // Returns true if a mode is added to the winner mode check. static AVM_INLINE int is_check_in_winner(const AV2_COMP *cpi, diff --git a/av2/encoder/speed_features.c b/av2/encoder/speed_features.c index 2c429cb89f..33f903994c 100644 --- a/av2/encoder/speed_features.c +++ b/av2/encoder/speed_features.c @@ -419,6 +419,8 @@ static void set_good_speed_features_framesize_independent( // Predictive single-ref NEWMV reuse across the DRL. sf->mv_sf.predict_repeated_newmv = 1; sf->inter_sf.enable_six_param_warp_in_winner_mode = 1; + sf->inter_sf.enable_six_param_warp_in_winner_mode_by_tid = + cm->current_frame.pyramid_level >= 3 ? 1 : 0; // Cap the DRL depth for a fresh single-ref NEWMV search; reuse the // nearest searched result beyond the cap. @@ -699,14 +701,14 @@ static void set_good_speed_features_framesize_independent( sf->rd_sf.perform_coeff_opt = is_boosted_arf2_bwd_type ? 4 : 6; sf->winner_mode_sf.multi_winner_mode_type = MULTI_WINNER_MODE_OFF; + + sf->inter_sf.enable_four_param_warp_in_winner_mode = 1; + sf->inter_sf.enable_six_param_warp_in_winner_mode_by_tid = 1; } - if (enable_warp_search_in_winner_mode(&sf->inter_sf)) + if (enable_warp_search_in_winner_mode(&sf->inter_sf)) { sf->winner_mode_sf.motion_mode_for_winner_cand = 2; - - if (sf->inter_sf.enable_six_param_warp_in_winner_mode) { - sf->inter_sf.enable_six_param_warp_in_winner_mode_by_tid = - cm->current_frame.pyramid_level >= 3 ? 1 : 0; + if (speed == 6) sf->winner_mode_sf.motion_mode_for_winner_cand = 3; } } diff --git a/av2/encoder/speed_features.h b/av2/encoder/speed_features.h index 13693c8efc..b3d948cf44 100644 --- a/av2/encoder/speed_features.h +++ b/av2/encoder/speed_features.h @@ -608,8 +608,10 @@ typedef struct INTER_MODE_SPEED_FEATURES { int prune_inter_modes_if_skippable; // Enable six param warp in winner mode int enable_six_param_warp_in_winner_mode; + // Enable six parameter warp in winner mode by tid. If set to 1, enable six - // parameter warp in winner mode by tid threshold. + // parameter warp in winner mode by tid threshold for speed >= 1. + // Enable six param in winner all tid level for speed 6 int enable_six_param_warp_in_winner_mode_by_tid; // Disable the 4 parameter warp delta refinement during initial mode search