Remove global-motion-method argument to aomenc This argument was added for testing purposes, but in practice disflow is the better option in practically all cases. Therefore this is not a useful option to expose to end users. Importantly, we have not done a full release since this option was added to the codebase, so this argument is not part of the stable API yet. Therefore it is safe to remove. Change-Id: I898465904f9a7738f46e47c62f359ba573d47ea5 (cherry picked from commit 0c56d1292056a7e2af6e7f5d1fad018c78291d5f)
diff --git a/aom_dsp/flow_estimation/flow_estimation.h b/aom_dsp/flow_estimation/flow_estimation.h index ea38b27..4f2192c 100644 --- a/aom_dsp/flow_estimation/flow_estimation.h +++ b/aom_dsp/flow_estimation/flow_estimation.h
@@ -37,6 +37,7 @@ // number of parameters used by each transformation in TransformationTypes static const int trans_model_params[TRANS_TYPES] = { 0, 2, 4, 6 }; +// Available methods which can be used for global motion estimation typedef enum { GLOBAL_MOTION_METHOD_FEATURE_MATCH, GLOBAL_MOTION_METHOD_DISFLOW, @@ -65,6 +66,12 @@ // is not large enough to need all of the specified levels extern const int global_motion_pyr_levels[GLOBAL_MOTION_METHODS]; +// Which global motion method should we use in practice? +// Disflow is both faster and gives better results than feature matching in +// practically all cases, so we use disflow by default +static const GlobalMotionMethod default_global_motion_method = + GLOBAL_MOTION_METHOD_DISFLOW; + extern const double kIdentityParams[MAX_PARAMDIM]; // Compute a global motion model between the given source and ref frames.
diff --git a/apps/aomenc.c b/apps/aomenc.c index d8f133d..09306f2 100644 --- a/apps/aomenc.c +++ b/apps/aomenc.c
@@ -457,7 +457,6 @@ &g_av1_codec_arg_defs.sb_qp_sweep, &g_av1_codec_arg_defs.dist_metric, &g_av1_codec_arg_defs.kf_max_pyr_height, - &g_av1_codec_arg_defs.global_motion_method, NULL, };
diff --git a/av1/arg_defs.c b/av1/arg_defs.c index 56cbe6a..35a2ab4 100644 --- a/av1/arg_defs.c +++ b/av1/arg_defs.c
@@ -140,12 +140,6 @@ { "ebu3213", AOM_CICP_CP_EBU_3213 }, { NULL, 0 } }; - -static const struct arg_enum_list global_motion_method_enum[] = { - { "feature-match", GLOBAL_MOTION_METHOD_FEATURE_MATCH }, - { "disflow", GLOBAL_MOTION_METHOD_DISFLOW }, - { NULL, 0 } -}; #endif // CONFIG_AV1_ENCODER const av1_codec_arg_definitions_t g_av1_codec_arg_defs = { @@ -704,9 +698,5 @@ ARG_DEF(NULL, "sb-qp-sweep", 1, "When set to 1, enable the superblock level qp sweep for a " "given lambda to minimize the rdcost."), - .global_motion_method = ARG_DEF_ENUM(NULL, "global-motion-method", 1, - "Global motion search method " - "(default: disflow):", - global_motion_method_enum), #endif // CONFIG_AV1_ENCODER };
diff --git a/av1/arg_defs.h b/av1/arg_defs.h index c7a640b..b9d0cfe 100644 --- a/av1/arg_defs.h +++ b/av1/arg_defs.h
@@ -236,7 +236,6 @@ arg_def_t strict_level_conformance; arg_def_t kf_max_pyr_height; arg_def_t sb_qp_sweep; - arg_def_t global_motion_method; #endif // CONFIG_AV1_ENCODER } av1_codec_arg_definitions_t;
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c index 59cb8e9..403f994 100644 --- a/av1/av1_cx_iface.c +++ b/av1/av1_cx_iface.c
@@ -199,7 +199,6 @@ int strict_level_conformance; int kf_max_pyr_height; int sb_qp_sweep; - GlobalMotionMethod global_motion_method; }; #if CONFIG_REALTIME_ONLY @@ -346,26 +345,25 @@ SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, - }, // target_seq_level_idx - 0, // tier_mask - 0, // min_cr - COST_UPD_OFF, // coeff_cost_upd_freq - COST_UPD_OFF, // mode_cost_upd_freq - COST_UPD_OFF, // mv_cost_upd_freq - COST_UPD_OFF, // dv_cost_upd_freq - 0, // ext_tile_debug - 0, // sb_multipass_unit_test - -1, // passes - -1, // fwd_kf_dist - LOOPFILTER_ALL, // loopfilter_control - 0, // skip_postproc_filtering - NULL, // two_pass_output - NULL, // second_pass_log - 0, // auto_intra_tools_off - 0, // strict_level_conformance - -1, // kf_max_pyr_height - 0, // sb_qp_sweep - GLOBAL_MOTION_METHOD_DISFLOW, // global_motion_method + }, // target_seq_level_idx + 0, // tier_mask + 0, // min_cr + COST_UPD_OFF, // coeff_cost_upd_freq + COST_UPD_OFF, // mode_cost_upd_freq + COST_UPD_OFF, // mv_cost_upd_freq + COST_UPD_OFF, // dv_cost_upd_freq + 0, // ext_tile_debug + 0, // sb_multipass_unit_test + -1, // passes + -1, // fwd_kf_dist + LOOPFILTER_ALL, // loopfilter_control + 0, // skip_postproc_filtering + NULL, // two_pass_output + NULL, // second_pass_log + 0, // auto_intra_tools_off + 0, // strict_level_conformance + -1, // kf_max_pyr_height + 0, // sb_qp_sweep }; #else static const struct av1_extracfg default_extra_cfg = { @@ -498,26 +496,25 @@ SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, SEQ_LEVEL_MAX, - }, // target_seq_level_idx - 0, // tier_mask - 0, // min_cr - COST_UPD_SB, // coeff_cost_upd_freq - COST_UPD_SB, // mode_cost_upd_freq - COST_UPD_SB, // mv_cost_upd_freq - COST_UPD_SB, // dv_cost_upd_freq - 0, // ext_tile_debug - 0, // sb_multipass_unit_test - -1, // passes - -1, // fwd_kf_dist - LOOPFILTER_ALL, // loopfilter_control - 0, // skip_postproc_filtering - NULL, // two_pass_output - NULL, // second_pass_log - 0, // auto_intra_tools_off - 0, // strict_level_conformance - -1, // kf_max_pyr_height - 0, // sb_qp_sweep - GLOBAL_MOTION_METHOD_DISFLOW, // global_motion_method + }, // target_seq_level_idx + 0, // tier_mask + 0, // min_cr + COST_UPD_SB, // coeff_cost_upd_freq + COST_UPD_SB, // mode_cost_upd_freq + COST_UPD_SB, // mv_cost_upd_freq + COST_UPD_SB, // dv_cost_upd_freq + 0, // ext_tile_debug + 0, // sb_multipass_unit_test + -1, // passes + -1, // fwd_kf_dist + LOOPFILTER_ALL, // loopfilter_control + 0, // skip_postproc_filtering + NULL, // two_pass_output + NULL, // second_pass_log + 0, // auto_intra_tools_off + 0, // strict_level_conformance + -1, // kf_max_pyr_height + 0, // sb_qp_sweep }; #endif @@ -880,8 +877,6 @@ RANGE_CHECK_BOOL(extra_cfg, auto_intra_tools_off); RANGE_CHECK_BOOL(extra_cfg, strict_level_conformance); RANGE_CHECK_BOOL(extra_cfg, sb_qp_sweep); - RANGE_CHECK(extra_cfg, global_motion_method, - GLOBAL_MOTION_METHOD_FEATURE_MATCH, GLOBAL_MOTION_METHOD_LAST); RANGE_CHECK(extra_cfg, kf_max_pyr_height, -1, 5); if (extra_cfg->kf_max_pyr_height != -1 && @@ -1483,8 +1478,6 @@ oxcf->kf_max_pyr_height = extra_cfg->kf_max_pyr_height; oxcf->sb_qp_sweep = extra_cfg->sb_qp_sweep; - - oxcf->global_motion_method = extra_cfg->global_motion_method; } AV1EncoderConfig av1_get_encoder_config(const aom_codec_enc_cfg_t *cfg) { @@ -4144,9 +4137,6 @@ err_string)) { ctx->cfg.tile_height_count = arg_parse_list_helper( &arg, ctx->cfg.tile_heights, MAX_TILE_HEIGHTS, err_string); - } else if (arg_match_helper(&arg, &g_av1_codec_arg_defs.global_motion_method, - argv, err_string)) { - extra_cfg.global_motion_method = arg_parse_enum_helper(&arg, err_string); } else { match = 0; snprintf(err_string, ARG_ERR_MSG_MAX_LEN, "Cannot find aom option %s",
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c index 8c14bbf..d5d7dcc 100644 --- a/av1/encoder/encoder.c +++ b/av1/encoder/encoder.c
@@ -946,7 +946,7 @@ #else if (oxcf->tool_cfg.enable_global_motion) { cpi->image_pyramid_levels = - global_motion_pyr_levels[oxcf->global_motion_method]; + global_motion_pyr_levels[default_global_motion_method]; } else { cpi->image_pyramid_levels = 0; }
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h index 9f93de0..2965f9b 100644 --- a/av1/encoder/encoder.h +++ b/av1/encoder/encoder.h
@@ -1088,9 +1088,6 @@ // A flag to control if we enable the superblock qp sweep for a given lambda int sb_qp_sweep; - - // Selected global motion search method - GlobalMotionMethod global_motion_method; /*!\endcond */ } AV1EncoderConfig;
diff --git a/av1/encoder/global_motion_facade.c b/av1/encoder/global_motion_facade.c index 564f509..1a00cbb 100644 --- a/av1/encoder/global_motion_facade.c +++ b/av1/encoder/global_motion_facade.c
@@ -97,7 +97,7 @@ assert(ref_buf[frame] != NULL); TransformationType model; int bit_depth = cpi->common.seq_params->bit_depth; - GlobalMotionMethod global_motion_method = cpi->oxcf.global_motion_method; + GlobalMotionMethod global_motion_method = default_global_motion_method; int num_refinements = cpi->sf.gm_sf.num_refinement_steps; for (model = ROTZOOM; model < GLOBAL_TRANS_TYPES_ENC; ++model) {