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 };