Add an encoding option "--enable-chroma-deltaq"
An encoder side option to enable a delta quantizer in chroma planes
on top of the main q parameter.
Change-Id: If480ac4e1ad1da408d183660c96c51e41b631a53
diff --git a/aom/aomcx.h b/aom/aomcx.h
index b424c3c..305e690 100644
--- a/aom/aomcx.h
+++ b/aom/aomcx.h
@@ -853,6 +853,15 @@
*/
AV1E_SET_ENABLE_DUAL_FILTER,
+ /*!\brief Codec control function to turn on / off delta quantization in chroma
+ * planes usage for a sequence.
+ *
+ * This will enable or disable use of chroma deltaq.
+ * The default value is 0.
+ *
+ */
+ AV1E_SET_ENABLE_CHROMA_DELTAQ,
+
/*!\brief Codec control function to turn on / off masked compound usage
* for a sequence.
*
@@ -1353,6 +1362,9 @@
AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_DUAL_FILTER, int)
#define AOM_CTRL_AV1E_SET_ENABLE_DUAL_FILTER
+AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_CHROMA_DELTAQ, int)
+#define AOM_CTRL_AV1E_SET_ENABLE_CHROMA_DELTAQ
+
AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_MASKED_COMP, int)
#define AOM_CTRL_AV1E_SET_ENABLE_MASKED_COMP
diff --git a/apps/aomenc.c b/apps/aomenc.c
index 59246da..bad4f53 100644
--- a/apps/aomenc.c
+++ b/apps/aomenc.c
@@ -460,6 +460,10 @@
ARG_DEF(NULL, "enable-dual-filter", 1,
"Enable dual filter "
"(0: false, 1: true (default))");
+static const arg_def_t enable_chroma_deltaq =
+ ARG_DEF(NULL, "enable-chroma-deltaq", 1,
+ "Enable chroma delta quant "
+ "(0: false (default), 1: true)");
static const arg_def_t enable_intra_edge_filter =
ARG_DEF(NULL, "enable-intra-edge-filter", 1,
"Enable intra edge filtering "
@@ -808,6 +812,7 @@
&min_partition_size,
&max_partition_size,
&enable_dual_filter,
+ &enable_chroma_deltaq,
&enable_intra_edge_filter,
&enable_order_hint,
&enable_tx64,
@@ -909,6 +914,7 @@
AV1E_SET_MIN_PARTITION_SIZE,
AV1E_SET_MAX_PARTITION_SIZE,
AV1E_SET_ENABLE_DUAL_FILTER,
+ AV1E_SET_ENABLE_CHROMA_DELTAQ,
AV1E_SET_ENABLE_INTRA_EDGE_FILTER,
AV1E_SET_ENABLE_ORDER_HINT,
AV1E_SET_ENABLE_TX64,
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index 2a1f61a..33f252f 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -70,6 +70,7 @@
aom_timing_info_type_t timing_info_type;
unsigned int frame_parallel_decoding_mode;
int enable_dual_filter;
+ unsigned int enable_chroma_deltaq;
AQ_MODE aq_mode;
DELTAQ_MODE deltaq_mode;
int deltalf_mode;
@@ -187,6 +188,7 @@
AOM_TIMING_UNSPECIFIED, // No picture timing signaling in bitstream
0, // frame_parallel_decoding_mode
1, // enable dual filter
+ 0, // enable delta quant in chroma planes
NO_AQ, // aq_mode
DELTA_Q_OBJECTIVE, // deltaq_mode
0, // delta lf mode
@@ -480,6 +482,8 @@
if (extra_cfg->lossless) {
if (extra_cfg->aq_mode != 0)
ERROR("Only --aq_mode=0 can be used with --lossless=1.");
+ if (extra_cfg->enable_chroma_deltaq)
+ ERROR("Only --enable_chroma_deltaq=0 can be used with --lossless=1.");
#if CONFIG_DIST_8X8
if (extra_cfg->enable_dist_8x8)
ERROR("dist-8x8 cannot be used with lossless compression.");
@@ -863,6 +867,7 @@
oxcf->enable_tpl_model = extra_cfg->enable_tpl_model;
+ oxcf->enable_chroma_deltaq = extra_cfg->enable_chroma_deltaq;
oxcf->aq_mode = extra_cfg->aq_mode;
oxcf->deltaq_mode = extra_cfg->deltaq_mode;
// Turn on tpl model for deltaq_mode == DELTA_Q_OBJECTIVE and no
@@ -1183,6 +1188,13 @@
return update_extra_cfg(ctx, &extra_cfg);
}
+static aom_codec_err_t ctrl_set_enable_chroma_deltaq(aom_codec_alg_priv_t *ctx,
+ va_list args) {
+ struct av1_extracfg extra_cfg = ctx->extra_cfg;
+ extra_cfg.enable_chroma_deltaq = CAST(AV1E_SET_ENABLE_CHROMA_DELTAQ, args);
+ return update_extra_cfg(ctx, &extra_cfg);
+}
+
static aom_codec_err_t ctrl_set_enable_rect_partitions(
aom_codec_alg_priv_t *ctx, va_list args) {
struct av1_extracfg extra_cfg = ctx->extra_cfg;
@@ -2272,6 +2284,7 @@
{ AV1E_SET_MIN_PARTITION_SIZE, ctrl_set_min_partition_size },
{ AV1E_SET_MAX_PARTITION_SIZE, ctrl_set_max_partition_size },
{ AV1E_SET_ENABLE_DUAL_FILTER, ctrl_set_enable_dual_filter },
+ { AV1E_SET_ENABLE_CHROMA_DELTAQ, ctrl_set_enable_chroma_deltaq },
{ AV1E_SET_ENABLE_INTRA_EDGE_FILTER, ctrl_set_enable_intra_edge_filter },
{ AV1E_SET_ENABLE_ORDER_HINT, ctrl_set_enable_order_hint },
{ AV1E_SET_ENABLE_TX64, ctrl_set_enable_tx64 },
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 17dbcc8..f8e7313 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -246,6 +246,7 @@
int worst_allowed_q;
int best_allowed_q;
int cq_level;
+ int enable_chroma_deltaq;
AQ_MODE aq_mode; // Adaptive Quantization mode
DELTAQ_MODE deltaq_mode;
int deltalf_mode;