Invoke masked_compound_type_rd() for COMP_WEDGE

In this CL, a new speed feature
'enable_comp_wedge_search_using_model_rd' is introduced to
enable model RD based fast compound wedge mask search by
invoking the function masked_compound_type_rd(). The speed
feature is enabled for speed >=1.

Encoder performance results averaged over all resolutions are as
follows:

      Instruction Count               BD-Rate Loss(%)
cpu      Reduction(%)    avg.psnr  ovr.psnr    ssim    vmaf    vmaf_neg
 1        10.064          0.0218    0.0242    0.0190   0.0174   0.0046
 2         1.037         -0.1309   -0.1310   -0.1036  -0.1570  -0.1652
 3        -0.108         -0.0410   -0.0440   -0.0267  -0.0580  -0.0549

STATS_CHANGED for speed = 1, 2, 3

Change-Id: I055e6ade9d800814f3f39d4abca2916f9753f64a
diff --git a/av1/encoder/compound_type.c b/av1/encoder/compound_type.c
index 23a912e..3bfe78f 100644
--- a/av1/encoder/compound_type.c
+++ b/av1/encoder/compound_type.c
@@ -1431,7 +1431,8 @@
 
       // use spare buffer for following compound type try
       if (cur_type == COMPOUND_AVERAGE) restore_dst_buf(xd, *tmp_dst, 1);
-    } else if (cur_type == COMPOUND_WEDGE) {
+    } else if (!cpi->sf.inter_sf.enable_comp_wedge_search_using_model_rd &&
+               cur_type == COMPOUND_WEDGE) {
       int best_mask_index = 0;
       int best_wedge_sign = 0;
       int_mv tmp_mv[2] = { mbmi->mv[0], mbmi->mv[1] };
@@ -1669,7 +1670,7 @@
     } else {
       // Handle masked compound types
       bool eval_masked_comp_type = true;
-      if (*rd != INT64_MAX) {
+      if (*rd != INT64_MAX && cur_type == COMPOUND_DIFFWTD) {
         // Factors to control gating of compound type selection based on best
         // approximate rd so far
         const int max_comp_type_rd_threshold_mul =
@@ -1678,8 +1679,7 @@
         const int max_comp_type_rd_threshold_div =
             comp_type_rd_threshold_div[cpi->sf.inter_sf
                                            .prune_comp_type_by_comp_avg];
-        // Evaluate COMPOUND_WEDGE / COMPOUND_DIFFWTD if approximated cost is
-        // within threshold
+        // Evaluate COMPOUND_DIFFWTD if approximated cost is within threshold.
         const int64_t approx_rd = ((*rd / max_comp_type_rd_threshold_div) *
                                    max_comp_type_rd_threshold_mul);
         if (approx_rd >= ref_best_rd) eval_masked_comp_type = false;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index fb7b817..65189e2 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -1201,6 +1201,7 @@
     sf->inter_sf.skip_arf_compound = 1;
     sf->inter_sf.prune_comp_using_best_single_mode_ref = 2;
     sf->inter_sf.use_dist_wtd_comp_flag = DIST_WTD_COMP_DISABLED;
+    sf->inter_sf.enable_comp_wedge_search_using_model_rd = 1;
 
     sf->interp_sf.use_interp_filter = 1;
     sf->interp_sf.skip_model_rd_uv = 1;
@@ -2416,6 +2417,7 @@
   inter_sf->bias_obmc_mode_rd_scale_pct = 0.0f;
   inter_sf->skip_cmp_using_top_cmp_avg_est_rd_lvl = 0;
   inter_sf->skip_interinter_wedge_search_based_on_mse = 0;
+  inter_sf->enable_comp_wedge_search_using_model_rd = 0;
   set_txfm_rd_gate_level(inter_sf->txfm_rd_gate_level, 0);
 }
 
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index e884dad..47ef9be 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -1256,6 +1256,9 @@
 
   // Skip interinter wedge search based on MSE between the two predictors.
   int skip_interinter_wedge_search_based_on_mse;
+
+  // Enable/disable model RD based fast compound wedge mask search.
+  int enable_comp_wedge_search_using_model_rd;
 } INTER_MODE_SPEED_FEATURES;
 
 typedef struct INTERP_FILTER_SPEED_FEATURES {