Add command-line -enable-cdef option Change-Id: Ic061eeab1563c249fd9d3738025aac40bc3ee542
diff --git a/aom/aomcx.h b/aom/aomcx.h index 6544b9f..2f9bafd 100644 --- a/aom/aomcx.h +++ b/aom/aomcx.h
@@ -427,6 +427,19 @@ */ AOME_SET_ENABLEAUTOBWDREF, + /*!\brief Codec control function to encode with CDEF. + * + * CDEF is the constrained directional enhancement filter which is an + * in-loop filter aiming to remove coding artifacts + * 0 = do not apply CDEF + * 1 = apply CDEF + * + * By default, the encoder applies CDEF. + * + * Experiment: AOM_CDEF + */ + AV1E_SET_ENABLE_CDEF, + /*!\brief Codec control function to encode with quantisation matrices. * * AOM can operate with default quantisation matrices dependent on @@ -726,6 +739,9 @@ AOM_CTRL_USE_TYPE(AV1E_SET_LOSSLESS, unsigned int) #define AOM_CTRL_AV1E_SET_LOSSLESS +AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_CDEF, unsigned int) +#define AOM_CTRL_AV1E_SET_ENABLE_CDEF + AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_QM, unsigned int) #define AOM_CTRL_AV1E_SET_ENABLE_QM
diff --git a/aomenc.c b/aomenc.c index 43ad4bf..0ed4714 100644 --- a/aomenc.c +++ b/aomenc.c
@@ -428,6 +428,12 @@ #endif // CONFIG_LOOPFILTERING_ACROSS_TILES static const arg_def_t lossless = ARG_DEF(NULL, "lossless", 1, "Lossless mode (0: false (default), 1: true)"); +#if CONFIG_CDEF +static const arg_def_t enable_cdef = + ARG_DEF(NULL, "enable-cdef", 1, + "Enable the constrained directional enhancement filter (0: false, " + "1: true (default))"); +#endif #if CONFIG_AOM_QM static const arg_def_t enable_qm = ARG_DEF(NULL, "enable-qm", 1, @@ -567,6 +573,9 @@ &max_inter_rate_pct, &gf_cbr_boost_pct, &lossless, +#if CONFIG_CDEF + &enable_cdef, +#endif #if CONFIG_AOM_QM &enable_qm, &qm_min, @@ -624,6 +633,9 @@ AV1E_SET_MAX_INTER_BITRATE_PCT, AV1E_SET_GF_CBR_BOOST_PCT, AV1E_SET_LOSSLESS, +#if CONFIG_CDEF + AV1E_SET_ENABLE_CDEF, +#endif #if CONFIG_AOM_QM AV1E_SET_ENABLE_QM, AV1E_SET_QM_MIN,
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c index c5a71b5..91e43db 100644 --- a/av1/av1_cx_iface.c +++ b/av1/av1_cx_iface.c
@@ -54,6 +54,9 @@ unsigned int rc_max_inter_bitrate_pct; unsigned int gf_cbr_boost_pct; unsigned int lossless; +#if CONFIG_CDEF + unsigned int enable_cdef; +#endif #if CONFIG_AOM_QM unsigned int enable_qm; unsigned int qm_min; @@ -117,6 +120,9 @@ 0, // rc_max_inter_bitrate_pct 0, // gf_cbr_boost_pct 0, // lossless +#if CONFIG_CDEF + 1, // enable_cdef +#endif #if CONFIG_AOM_QM 0, // enable_qm DEFAULT_QM_FIRST, // qm_min @@ -495,6 +501,9 @@ oxcf->cq_level = av1_quantizer_to_qindex(extra_cfg->cq_level); oxcf->fixed_q = -1; +#if CONFIG_CDEF + oxcf->using_cdef = extra_cfg->enable_cdef; +#endif #if CONFIG_AOM_QM oxcf->using_qm = extra_cfg->enable_qm; oxcf->qm_minlevel = extra_cfg->qm_min; @@ -864,6 +873,15 @@ return update_extra_cfg(ctx, &extra_cfg); } +#if CONFIG_CDEF +static aom_codec_err_t ctrl_set_enable_cdef(aom_codec_alg_priv_t *ctx, + va_list args) { + struct av1_extracfg extra_cfg = ctx->extra_cfg; + extra_cfg.enable_cdef = CAST(AV1E_SET_ENABLE_CDEF, args); + return update_extra_cfg(ctx, &extra_cfg); +} +#endif + #if CONFIG_AOM_QM static aom_codec_err_t ctrl_set_enable_qm(aom_codec_alg_priv_t *ctx, va_list args) { @@ -1589,6 +1607,9 @@ { AV1E_SET_MAX_INTER_BITRATE_PCT, ctrl_set_rc_max_inter_bitrate_pct }, { AV1E_SET_GF_CBR_BOOST_PCT, ctrl_set_rc_gf_cbr_boost_pct }, { AV1E_SET_LOSSLESS, ctrl_set_lossless }, +#if CONFIG_CDEF + { AV1E_SET_ENABLE_CDEF, ctrl_set_enable_cdef }, +#endif #if CONFIG_AOM_QM { AV1E_SET_ENABLE_QM, ctrl_set_enable_qm }, { AV1E_SET_QM_MIN, ctrl_set_qm_min },
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c index bde117c..e3630b0 100644 --- a/av1/encoder/encoder.c +++ b/av1/encoder/encoder.c
@@ -4615,20 +4615,25 @@ #endif #if CONFIG_LOOP_RESTORATION int no_restoration = 0; -#endif if (is_lossless_requested(&cpi->oxcf) #if CONFIG_EXT_TILE || cm->single_tile_decoding #endif ) { no_loopfilter = 1; -#if CONFIG_CDEF - no_cdef = 1; -#endif -#if CONFIG_LOOP_RESTORATION no_restoration = 1; -#endif } +#endif + +#if CONFIG_CDEF + if (is_lossless_requested(&cpi->oxcf) || !cpi->oxcf.using_cdef +#if CONFIG_EXT_TILE + || cm->single_tile_decoding +#endif + ) { + no_cdef = 1; + } +#endif if (no_loopfilter) { #if CONFIG_LOOPFILTER_LEVEL
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h index 32cb2f1..3584098 100644 --- a/av1/encoder/encoder.h +++ b/av1/encoder/encoder.h
@@ -196,6 +196,9 @@ #if CONFIG_EXT_DELTA_Q DELTAQ_MODE deltaq_mode; #endif +#if CONFIG_CDEF + int using_cdef; +#endif #if CONFIG_AOM_QM int using_qm; int qm_minlevel;