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