Add encoder control to turn on/off IntraBC mode IntraBC mode is enabled by default. Change-Id: Iaa90e824beb3aadfa764ef5d24284282089789fe
diff --git a/aom/aomcx.h b/aom/aomcx.h index f665cea..982a1f1 100644 --- a/aom/aomcx.h +++ b/aom/aomcx.h
@@ -882,6 +882,9 @@ /*!\brief Codec control function to turn on/off palette mode */ AV1E_SET_ENABLE_PALETTE, + /*!\brief Codec control function to turn on/off intra block copy mode */ + AV1E_SET_ENABLE_INTRABC, + /*!\brief Codec control function to set the delta q mode * * AV1 has a segment based feature that allows encoder to adaptively change @@ -1210,6 +1213,9 @@ AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_PALETTE, unsigned int) #define AOM_CTRL_AV1E_SET_ENABLE_PALETTE +AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_INTRABC, unsigned int) +#define AOM_CTRL_AV1E_SET_ENABLE_INTRABC + AOM_CTRL_USE_TYPE(AV1E_SET_FRAME_PARALLEL_DECODING, unsigned int) #define AOM_CTRL_AV1E_SET_FRAME_PARALLEL_DECODING
diff --git a/apps/aomenc.c b/apps/aomenc.c index 14fc469..af0f2fc 100644 --- a/apps/aomenc.c +++ b/apps/aomenc.c
@@ -501,6 +501,10 @@ static const arg_def_t enable_palette = ARG_DEF(NULL, "enable-palette", 1, "Enable palette prediction mode (0: false, 1: true (default))"); +static const arg_def_t enable_intrabc = + ARG_DEF(NULL, "enable-intrabc", 1, + "Enable intra block copy prediction mode " + "(0: false, 1: true (default))"); static const arg_def_t disable_trellis_quant = ARG_DEF(NULL, "disable-trellis-quant", 1, "Disable trellis optimization of quantized coefficients (0: false (" @@ -724,6 +728,7 @@ &enable_filter_intra, &enable_obmc, &enable_palette, + &enable_intrabc, &disable_trellis_quant, &enable_qm, &qm_min, @@ -801,6 +806,7 @@ AV1E_SET_ENABLE_FILTER_INTRA, AV1E_SET_ENABLE_OBMC, AV1E_SET_ENABLE_PALETTE, + AV1E_SET_ENABLE_INTRABC, AV1E_SET_DISABLE_TRELLIS_QUANT, AV1E_SET_ENABLE_QM, AV1E_SET_QM_MIN,
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c index 60bcf60..cda5f72 100644 --- a/av1/av1_cx_iface.c +++ b/av1/av1_cx_iface.c
@@ -114,6 +114,7 @@ int enable_filter_intra; // enable filter intra for sequence int enable_superres; int enable_palette; + int enable_intrabc; #if CONFIG_DENOISE float noise_level; int noise_block_size; @@ -203,6 +204,7 @@ 1, // enable filter intra at sequence level 1, // superres 1, // enable palette + 1, // enable intrabc #if CONFIG_DENOISE 0, // noise_level 32, // noise_block_size @@ -555,6 +557,7 @@ oxcf->enable_restoration = extra_cfg->enable_restoration; oxcf->enable_obmc = extra_cfg->enable_obmc; oxcf->enable_palette = extra_cfg->enable_palette; + oxcf->enable_intrabc = extra_cfg->enable_intrabc; oxcf->disable_trellis_quant = extra_cfg->disable_trellis_quant; oxcf->using_qm = extra_cfg->enable_qm; oxcf->qm_y = extra_cfg->qm_y; @@ -1210,6 +1213,13 @@ return update_extra_cfg(ctx, &extra_cfg); } +static aom_codec_err_t ctrl_set_enable_intrabc(aom_codec_alg_priv_t *ctx, + va_list args) { + struct av1_extracfg extra_cfg = ctx->extra_cfg; + extra_cfg.enable_intrabc = CAST(AV1E_SET_ENABLE_INTRABC, args); + return update_extra_cfg(ctx, &extra_cfg); +} + static aom_codec_err_t ctrl_set_error_resilient_mode(aom_codec_alg_priv_t *ctx, va_list args) { struct av1_extracfg extra_cfg = ctx->extra_cfg; @@ -1965,6 +1975,7 @@ { AV1E_SET_ENABLE_FILTER_INTRA, ctrl_set_enable_filter_intra }, { AV1E_SET_ENABLE_SUPERRES, ctrl_set_enable_superres }, { AV1E_SET_ENABLE_PALETTE, ctrl_set_enable_palette }, + { AV1E_SET_ENABLE_INTRABC, ctrl_set_enable_intrabc }, { AV1E_SET_AQ_MODE, ctrl_set_aq_mode }, { AV1E_SET_REDUCED_TX_TYPE_SET, ctrl_set_reduced_tx_type_set }, { AV1E_SET_DELTAQ_MODE, ctrl_set_deltaq_mode },
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h index f478843..83b26a6 100644 --- a/av1/encoder/encoder.h +++ b/av1/encoder/encoder.h
@@ -342,6 +342,7 @@ int enable_filter_intra; int enable_superres; int enable_palette; + int enable_intrabc; unsigned int save_as_annexb; #if CONFIG_DENOISE
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index 31a38cd..cb3bdf6 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -10048,7 +10048,7 @@ RD_STATS *rd_cost, BLOCK_SIZE bsize, int64_t best_rd) { const AV1_COMMON *const cm = &cpi->common; - if (!av1_allow_intrabc(cm)) return INT64_MAX; + if (!av1_allow_intrabc(cm) || !cpi->oxcf.enable_intrabc) return INT64_MAX; const int num_planes = av1_num_planes(cm); MACROBLOCKD *const xd = &x->e_mbd;