Enc options for jnt, masked, interintra compound

Allows turning these tools on/off from the command line.

Change-Id: I062c99b0945c64b64690b0325c3689c0acac0339
diff --git a/aom/aomcx.h b/aom/aomcx.h
index 0c116be..b41de2d 100644
--- a/aom/aomcx.h
+++ b/aom/aomcx.h
@@ -747,6 +747,24 @@
    */
   AV1E_SET_ALLOW_REF_FRAME_MVS,
 
+  /*!\brief Codec control function to turn on / off masked compound usage
+   * for a sequence.
+   *
+   * This will enable or disable usage of wedge and diff-wtd compound
+   * modes. The default value is 1.
+   *
+   */
+  AV1E_SET_ENABLE_MASKED_COMP,
+
+  /*!\brief Codec control function to turn on / off interintra compound
+   * for a sequence.
+   *
+   * This will enable or disable usage of inter-intra compound modes.
+   * The default value is 1.
+   *
+   */
+  AV1E_SET_ENABLE_INTERINTRA_COMP,
+
   /*!\brief Codec control function to turn on / off global motion usage
    * for a sequence.
    *
@@ -1052,6 +1070,12 @@
 AOM_CTRL_USE_TYPE(AV1E_SET_ALLOW_REF_FRAME_MVS, unsigned int)
 #define AOM_CTRL_AV1E_SET_ALLOW_REF_FRAME_MVS
 
+AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_MASKED_COMP, unsigned int)
+#define AOM_CTRL_AV1E_SET_ENABLE_MASKED_COMP
+
+AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_INTERINTRA_COMP, unsigned int)
+#define AOM_CTRL_AV1E_SET_ENABLE_INTERINTRA_COMP
+
 AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_GLOBAL_MOTION, unsigned int)
 #define AOM_CTRL_AV1E_SET_ENABLE_GLOBAL_MOTION
 
diff --git a/apps/aomenc.c b/apps/aomenc.c
index b69f788..025e519 100644
--- a/apps/aomenc.c
+++ b/apps/aomenc.c
@@ -437,6 +437,18 @@
     ARG_DEF(NULL, "enable-restoration", 1,
             "Enable the loop restoration filter (0: false, "
             "1: true (default))");
+static const arg_def_t enable_jnt_comp =
+    ARG_DEF(NULL, "enable-dist-wtd-comp", 1,
+            "Enable distance-weighted compound "
+            "(0: false, 1: true (default))");
+static const arg_def_t enable_masked_comp =
+    ARG_DEF(NULL, "enable-masked-comp", 1,
+            "Enable masked (wedge/diff-wtd) compound "
+            "(0: false, 1: true (default))");
+static const arg_def_t enable_interintra_comp =
+    ARG_DEF(NULL, "enable-interintra-comp", 1,
+            "Enable interintra compound "
+            "(0: false, 1: true (default))");
 static const arg_def_t enable_global_motion =
     ARG_DEF(NULL, "enable-global-motion", 1,
             "Enable global motion "
@@ -646,6 +658,9 @@
                                        &lossless,
                                        &enable_cdef,
                                        &enable_restoration,
+                                       &enable_jnt_comp,
+                                       &enable_masked_comp,
+                                       &enable_interintra_comp,
                                        &enable_global_motion,
                                        &enable_warped_motion,
                                        &disable_trellis_quant,
@@ -706,6 +721,9 @@
                                         AV1E_SET_LOSSLESS,
                                         AV1E_SET_ENABLE_CDEF,
                                         AV1E_SET_ENABLE_RESTORATION,
+                                        AV1E_SET_ENABLE_JNT_COMP,
+                                        AV1E_SET_ENABLE_MASKED_COMP,
+                                        AV1E_SET_ENABLE_INTERINTRA_COMP,
                                         AV1E_SET_ENABLE_GLOBAL_MOTION,
                                         AV1E_SET_ENABLE_WARPED_MOTION,
                                         AV1E_SET_DISABLE_TRELLIS_QUANT,
@@ -742,7 +760,6 @@
                                         AV1E_SET_ENABLE_REF_FRAME_MVS,
                                         AV1E_SET_ENABLE_DF,
                                         AV1E_SET_ENABLE_ORDER_HINT,
-                                        AV1E_SET_ENABLE_JNT_COMP,
                                         AV1E_SET_ENABLE_SUPERRES,
                                         0 };
 #endif  // CONFIG_AV1_ENCODER
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index b386cfc..e7d3d45 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -95,11 +95,13 @@
   unsigned int cdf_update_mode;
   int enable_order_hint;
   int enable_jnt_comp;
-  int enable_ref_frame_mvs;  // sequence level
-  int allow_ref_frame_mvs;   // frame level
-  int enable_global_motion;  // enable global motion usage for sequence
-  int enable_warped_motion;  // sequence level
-  int allow_warped_motion;   // frame level
+  int enable_ref_frame_mvs;    // sequence level
+  int allow_ref_frame_mvs;     // frame level
+  int enable_masked_comp;      // enable masked compound for sequence
+  int enable_interintra_comp;  // enable interintra compound for sequence
+  int enable_global_motion;    // enable global motion usage for sequence
+  int enable_warped_motion;    // sequence level
+  int allow_warped_motion;     // frame level
   int enable_superres;
 #if CONFIG_DENOISE
   float noise_level;
@@ -172,6 +174,8 @@
   1,                            // jnt_comp
   1,                            // enable_ref_frame_mvs sequence level
   1,                            // allow ref_frame_mvs frame level
+  1,                            // enable masked compound at sequence level
+  1,                            // enable interintra compound at sequence level
   1,                            // enable_global_motion usage
   1,                            // enable_warped_motion at sequence level
   1,                            // allow_warped_motion at frame level
@@ -665,6 +669,8 @@
   oxcf->enable_order_hint = extra_cfg->enable_order_hint;
   oxcf->enable_jnt_comp =
       extra_cfg->enable_jnt_comp & extra_cfg->enable_order_hint;
+  oxcf->enable_masked_comp = extra_cfg->enable_masked_comp;
+  oxcf->enable_interintra_comp = extra_cfg->enable_interintra_comp;
   oxcf->enable_ref_frame_mvs =
       extra_cfg->enable_ref_frame_mvs & extra_cfg->enable_order_hint;
 
@@ -1045,6 +1051,21 @@
   return update_extra_cfg(ctx, &extra_cfg);
 }
 
+static aom_codec_err_t ctrl_set_enable_masked_comp(aom_codec_alg_priv_t *ctx,
+                                                   va_list args) {
+  struct av1_extracfg extra_cfg = ctx->extra_cfg;
+  extra_cfg.enable_masked_comp = CAST(AV1E_SET_ENABLE_MASKED_COMP, args);
+  return update_extra_cfg(ctx, &extra_cfg);
+}
+
+static aom_codec_err_t ctrl_set_enable_interintra_comp(
+    aom_codec_alg_priv_t *ctx, va_list args) {
+  struct av1_extracfg extra_cfg = ctx->extra_cfg;
+  extra_cfg.enable_interintra_comp =
+      CAST(AV1E_SET_ENABLE_INTERINTRA_COMP, args);
+  return update_extra_cfg(ctx, &extra_cfg);
+}
+
 static aom_codec_err_t ctrl_set_enable_global_motion(aom_codec_alg_priv_t *ctx,
                                                      va_list args) {
   struct av1_extracfg extra_cfg = ctx->extra_cfg;
@@ -1798,6 +1819,8 @@
   { AV1E_SET_ENABLE_JNT_COMP, ctrl_set_enable_jnt_comp },
   { AV1E_SET_ENABLE_REF_FRAME_MVS, ctrl_set_enable_ref_frame_mvs },
   { AV1E_SET_ALLOW_REF_FRAME_MVS, ctrl_set_allow_ref_frame_mvs },
+  { AV1E_SET_ENABLE_MASKED_COMP, ctrl_set_enable_masked_comp },
+  { AV1E_SET_ENABLE_INTERINTRA_COMP, ctrl_set_enable_interintra_comp },
   { AV1E_SET_ENABLE_GLOBAL_MOTION, ctrl_set_enable_global_motion },
   { AV1E_SET_ENABLE_WARPED_MOTION, ctrl_set_enable_warped_motion },
   { AV1E_SET_ALLOW_WARPED_MOTION, ctrl_set_allow_warped_motion },
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 870a7ad..56d83b2 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -1140,8 +1140,8 @@
   seq->enable_cdef = oxcf->enable_cdef;
   seq->enable_restoration = oxcf->enable_restoration;
   seq->enable_warped_motion = oxcf->enable_warped_motion;
-  seq->enable_interintra_compound = 1;
-  seq->enable_masked_compound = 1;
+  seq->enable_interintra_compound = oxcf->enable_interintra_comp;
+  seq->enable_masked_compound = oxcf->enable_masked_comp;
   seq->enable_intra_edge_filter = 1;
   seq->enable_filter_intra = 1;
 
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index cb4559a..53c74e9 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -325,6 +325,8 @@
   int enable_jnt_comp;
   int enable_ref_frame_mvs;
   unsigned int allow_ref_frame_mvs;
+  int enable_masked_comp;
+  int enable_interintra_comp;
   int enable_global_motion;
   int enable_warped_motion;
   int allow_warped_motion;