Group motion mode config in AV1EncoderConfig

This CL groups the configuration parameters for motion mode
in AV1EncoderConfig into a new struct MotionModeCfg, and
adds relevant documentation.

BUG=aomedia:2701

Change-Id: I4b3139826683278f0bbb3425153a2867dfa6ed26
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index 44d3796..c028abf 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -806,7 +806,6 @@
   oxcf->enable_restoration =
       (cfg->g_usage == AOM_USAGE_REALTIME) ? 0 : extra_cfg->enable_restoration;
   oxcf->force_video_mode = extra_cfg->force_video_mode;
-  oxcf->enable_obmc = extra_cfg->enable_obmc;
   oxcf->enable_overlay = extra_cfg->enable_overlay;
   oxcf->enable_palette = extra_cfg->enable_palette;
   oxcf->disable_trellis_quant = extra_cfg->disable_trellis_quant;
@@ -947,10 +946,13 @@
       extra_cfg->enable_ref_frame_mvs & extra_cfg->enable_order_hint;
 
   oxcf->enable_global_motion = extra_cfg->enable_global_motion;
-  oxcf->enable_warped_motion = extra_cfg->enable_warped_motion;
-  oxcf->allow_warped_motion =
+
+  // Set motion mode related configuration.
+  oxcf->motion_mode_cfg.enable_obmc = extra_cfg->enable_obmc;
+  oxcf->motion_mode_cfg.enable_warped_motion = extra_cfg->enable_warped_motion;
+  oxcf->motion_mode_cfg.allow_warped_motion =
       (cfg->g_usage == AOM_USAGE_REALTIME)
-          ? 0
+          ? false
           : (extra_cfg->allow_warped_motion & extra_cfg->enable_warped_motion);
 
   // Set partition related configuration.
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index d8b8fd5..df5a132 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -6409,7 +6409,7 @@
     av1_enc_build_inter_predictor(cm, xd, mi_row, mi_col, NULL, bsize,
                                   start_plane, av1_num_planes(cm) - 1);
     if (mbmi->motion_mode == OBMC_CAUSAL) {
-      assert(cpi->oxcf.enable_obmc == 1);
+      assert(cpi->oxcf.motion_mode_cfg.enable_obmc);
       av1_build_obmc_inter_predictors_sb(cm, xd);
     }
 
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 23ef69c..703da2c 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -725,7 +725,7 @@
   seq->enable_superres = oxcf->superres_cfg.enable_superres;
   seq->enable_cdef = oxcf->enable_cdef;
   seq->enable_restoration = oxcf->enable_restoration;
-  seq->enable_warped_motion = oxcf->enable_warped_motion;
+  seq->enable_warped_motion = oxcf->motion_mode_cfg.enable_warped_motion;
   seq->enable_interintra_compound = oxcf->enable_interintra_comp;
   seq->enable_masked_compound = oxcf->comp_type_cfg.enable_masked_comp;
   seq->enable_intra_edge_filter = oxcf->intra_mode_cfg.enable_intra_edge_filter;
@@ -3795,8 +3795,8 @@
   // is separated from frame_might_allow_ref_frame_mvs().
   features->allow_ref_frame_mvs &= !cm->tiles.large_scale;
 
-  features->allow_warped_motion =
-      oxcf->allow_warped_motion && frame_might_allow_warped_motion(cm);
+  features->allow_warped_motion = oxcf->motion_mode_cfg.allow_warped_motion &&
+                                  frame_might_allow_warped_motion(cm);
 
   cpi->last_frame_type = current_frame->frame_type;
 
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index f95ac7d..db23731 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -551,6 +551,15 @@
   int render_height;
 } FrameDimensionCfg;
 
+typedef struct {
+  // Indicates if warped motion should be enabled.
+  bool enable_warped_motion;
+  // Indicates if warped motion should be evaluated or not.
+  bool allow_warped_motion;
+  // Indicates if OBMC motion should be enabled.
+  bool enable_obmc;
+} MotionModeCfg;
+
 typedef struct AV1EncoderConfig {
   BITSTREAM_PROFILE profile;
   aom_bit_depth_t bit_depth;     // Codec bit-depth.
@@ -607,7 +616,6 @@
   int enable_cdef;
   int enable_restoration;
   int force_video_mode;
-  int enable_obmc;
   int disable_trellis_quant;
   int using_qm;
   int qm_y;
@@ -698,12 +706,13 @@
   int enable_onesided_comp;
   int enable_interintra_comp;
   int enable_global_motion;
-  int enable_warped_motion;
-  int allow_warped_motion;
   int enable_overlay;
   int enable_palette;
   unsigned int save_as_annexb;
 
+  // Flags related to motion mode.
+  MotionModeCfg motion_mode_cfg;
+
   // Flags related to intra mode search.
   IntraModeCfg intra_mode_cfg;
 
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index fcadb1d..cde45b2 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -1343,8 +1343,9 @@
     const FRAME_UPDATE_TYPE update_type = get_frame_update_type(&cpi->gf_group);
     const int prune_obmc = cpi->frame_probs.obmc_probs[update_type][bsize] <
                            cpi->sf.inter_sf.prune_obmc_prob_thresh;
-    if ((cpi->oxcf.enable_obmc == 0 || cpi->sf.inter_sf.disable_obmc ||
-         cpi->sf.rt_sf.use_nonrd_pick_mode || prune_obmc) &&
+    if ((!cpi->oxcf.motion_mode_cfg.enable_obmc ||
+         cpi->sf.inter_sf.disable_obmc || cpi->sf.rt_sf.use_nonrd_pick_mode ||
+         prune_obmc) &&
         mbmi->motion_mode == OBMC_CAUSAL)
       continue;
 
@@ -3706,7 +3707,8 @@
   const FRAME_UPDATE_TYPE update_type = get_frame_update_type(&cpi->gf_group);
   const int prune_obmc = cpi->frame_probs.obmc_probs[update_type][bsize] <
                          cpi->sf.inter_sf.prune_obmc_prob_thresh;
-  if (cpi->oxcf.enable_obmc && !cpi->sf.inter_sf.disable_obmc && !prune_obmc) {
+  if (cpi->oxcf.motion_mode_cfg.enable_obmc && !cpi->sf.inter_sf.disable_obmc &&
+      !prune_obmc) {
     if (check_num_overlappable_neighbors(mbmi) &&
         is_motion_variation_allowed_bsize(bsize)) {
       int dst_width1[MAX_MB_PLANE] = { MAX_SB_SIZE, MAX_SB_SIZE, MAX_SB_SIZE };