Add --enable-dist-8x8, rename existing '--tune' as '--tune-metric'
Added 'cdef-dist' and 'daala-dist' options to --tune-metric'.
(Actual bodies of the options will be added in later separate commits)
Also, if --tune=cdef-dist or --tune=daala-dist,
enable-dist-8x8 is automatically turned on.
This commit is a part of prep-work to remove DIST_8X8, CDEF_DIST,
and DAALA_DIST experimental flags.
Change-Id: I0790b9537dfaf166cb59741997ae27da10697a33
diff --git a/aom/aomcx.h b/aom/aomcx.h
index 2b87a71..a465525 100644
--- a/aom/aomcx.h
+++ b/aom/aomcx.h
@@ -458,6 +458,21 @@
*/
AV1E_SET_QM_MAX,
+ /*!\brief Codec control function to encode with dist_8x8.
+ *
+ * The dist_8x8 is enabled automatically for model tuning parameters that
+ * require measuring distortion at the 8x8 level. This control also allows
+ * measuring distortion at the 8x8 level for other tuning options
+ * (e.g., PSNR), for testing purposes.
+ * 0 = do not use dist_8x8
+ * 1 = use dist_8x8
+ *
+ * By default, the encoder does not use dist_8x8
+ *
+ * Experiment: DIST_8X8
+ */
+ AV1E_SET_ENABLE_DIST_8X8,
+
/*!\brief Codec control function to set a maximum number of tile groups.
*
* This will set the maximum number of tile groups. This will be
@@ -622,7 +637,14 @@
* Changes the encoder to tune for certain types of input material.
*
*/
-typedef enum { AOM_TUNE_PSNR, AOM_TUNE_SSIM } aom_tune_metric;
+typedef enum {
+ AOM_TUNE_PSNR,
+ AOM_TUNE_SSIM,
+#ifdef CONFIG_DIST_8X8
+ AOM_TUNE_CDEF_DIST,
+ AOM_TUNE_DAALA_DIST
+#endif
+} aom_tune_metric;
/*!\cond */
/*!\brief Encoder control function parameter type
@@ -693,6 +715,9 @@
AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_QM, unsigned int)
#define AOM_CTRL_AV1E_SET_ENABLE_QM
+AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_DIST_8X8, unsigned int)
+#define AOM_CTRL_AV1E_SET_ENABLE_DIST_8X8
+
AOM_CTRL_USE_TYPE(AV1E_SET_QM_MIN, unsigned int)
#define AOM_CTRL_AV1E_SET_QM_MIN
diff --git a/aomenc.c b/aomenc.c
index 026f7ef..57dee38 100644
--- a/aomenc.c
+++ b/aomenc.c
@@ -377,10 +377,16 @@
static const arg_def_t arnr_strength =
ARG_DEF(NULL, "arnr-strength", 1, "AltRef filter strength (0..6)");
static const struct arg_enum_list tuning_enum[] = {
- { "psnr", AOM_TUNE_PSNR }, { "ssim", AOM_TUNE_SSIM }, { NULL, 0 }
+ { "psnr", AOM_TUNE_PSNR },
+ { "ssim", AOM_TUNE_SSIM },
+#ifdef CONFIG_DIST_8X8
+ { "cdef-dist", AOM_TUNE_CDEF_DIST },
+ { "daala-dist", AOM_TUNE_DAALA_DIST },
+#endif
+ { NULL, 0 }
};
-static const arg_def_t tune_ssim =
- ARG_DEF_ENUM(NULL, "tune", 1, "Material to favor", tuning_enum);
+static const arg_def_t tune_metric =
+ ARG_DEF_ENUM(NULL, "tune", 1, "Distortion metric tuned with", tuning_enum);
static const arg_def_t cq_level =
ARG_DEF(NULL, "cq-level", 1, "Constant/Constrained Quality level");
static const arg_def_t max_intra_rate_pct =
@@ -418,6 +424,11 @@
static const arg_def_t qm_max = ARG_DEF(
NULL, "qm-max", 1, "Max quant matrix flatness (0..15), default is 16");
#endif
+#if CONFIG_DIST_8X8
+static const arg_def_t enable_dist_8x8 =
+ ARG_DEF(NULL, "enable-dist-8x8", 1,
+ "Enable dist-8x8 (0: false (default), 1: true)");
+#endif // CONFIG_DIST_8X8
static const arg_def_t num_tg = ARG_DEF(
NULL, "num-tile-groups", 1, "Maximum number of tile groups, default is 1");
static const arg_def_t mtu_size =
@@ -550,7 +561,7 @@
#endif // CONFIG_LOOPFILTERING_ACROSS_TILES
&arnr_maxframes,
&arnr_strength,
- &tune_ssim,
+ &tune_metric,
&cq_level,
&max_intra_rate_pct,
&max_inter_rate_pct,
@@ -561,6 +572,9 @@
&qm_min,
&qm_max,
#endif
+#if CONFIG_DIST_8X8
+ &enable_dist_8x8,
+#endif
&frame_parallel_decoding,
&aq_mode,
#if CONFIG_EXT_DELTA_Q
@@ -617,6 +631,9 @@
AV1E_SET_QM_MIN,
AV1E_SET_QM_MAX,
#endif
+#if CONFIG_DIST_8X8
+ AV1E_SET_ENABLE_DIST_8X8,
+#endif
AV1E_SET_FRAME_PARALLEL_DECODING,
AV1E_SET_AQ_MODE,
#if CONFIG_EXT_DELTA_Q
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index f670762..ddca3d5 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -58,6 +58,9 @@
unsigned int qm_min;
unsigned int qm_max;
#endif
+#if CONFIG_DIST_8X8
+ unsigned int enable_dist_8x8;
+#endif
unsigned int num_tg;
unsigned int mtu_size;
#if CONFIG_TEMPMV_SIGNALING
@@ -122,6 +125,9 @@
DEFAULT_QM_FIRST, // qm_min
DEFAULT_QM_LAST, // qm_max
#endif
+#if CONFIG_DIST_8X8
+ 0,
+#endif
1, // max number of tile groups
0, // mtu_size
#if CONFIG_TEMPMV_SIGNALING
@@ -326,6 +332,14 @@
if (extra_cfg->tuning == AOM_TUNE_SSIM)
ERROR("Option --tune=ssim is not currently supported in AV1.");
+#if CONFIG_DIST_8X8
+ if (extra_cfg->tuning == AOM_TUNE_CDEF_DIST)
+ ERROR("Option --tune=cdef-dist is not currently supported in AV1.");
+
+ if (extra_cfg->tuning == AOM_TUNE_DAALA_DIST)
+ ERROR("Option --tune=daala-dist is not currently supported in AV1.");
+#endif // CONFIG_DIST_8X8
+
if (cfg->g_pass == AOM_RC_LAST_PASS) {
#if !CONFIG_XIPHRC
const size_t packet_sz = sizeof(FIRSTPASS_STATS);
@@ -480,7 +494,12 @@
oxcf->qm_minlevel = extra_cfg->qm_min;
oxcf->qm_maxlevel = extra_cfg->qm_max;
#endif
-
+#if CONFIG_DIST_8X8
+ oxcf->using_dist_8x8 = extra_cfg->enable_dist_8x8;
+ if (extra_cfg->tuning == AOM_TUNE_CDEF_DIST ||
+ extra_cfg->tuning == AOM_TUNE_DAALA_DIST)
+ oxcf->using_dist_8x8 = 1;
+#endif
oxcf->num_tile_groups = extra_cfg->num_tg;
#if CONFIG_EXT_TILE
// In large-scale tile encoding mode, num_tile_groups is always 1.
@@ -865,7 +884,14 @@
return update_extra_cfg(ctx, &extra_cfg);
}
#endif
-
+#if CONFIG_DIST_8X8
+static aom_codec_err_t ctrl_set_enable_dist_8x8(aom_codec_alg_priv_t *ctx,
+ va_list args) {
+ struct av1_extracfg extra_cfg = ctx->extra_cfg;
+ extra_cfg.enable_dist_8x8 = CAST(AV1E_SET_ENABLE_DIST_8X8, args);
+ return update_extra_cfg(ctx, &extra_cfg);
+}
+#endif
static aom_codec_err_t ctrl_set_num_tg(aom_codec_alg_priv_t *ctx,
va_list args) {
struct av1_extracfg extra_cfg = ctx->extra_cfg;
@@ -1547,6 +1573,9 @@
{ AV1E_SET_QM_MIN, ctrl_set_qm_min },
{ AV1E_SET_QM_MAX, ctrl_set_qm_max },
#endif
+#if CONFIG_DIST_8X8
+ { AV1E_SET_ENABLE_DIST_8X8, ctrl_set_enable_dist_8x8 },
+#endif
{ AV1E_SET_NUM_TG, ctrl_set_num_tg },
{ AV1E_SET_MTU, ctrl_set_mtu },
#if CONFIG_TEMPMV_SIGNALING
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index ce9d779..0c2fccd 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -207,6 +207,9 @@
int qm_minlevel;
int qm_maxlevel;
#endif
+#if CONFIG_DIST_8X8
+ int using_dist_8x8;
+#endif
unsigned int num_tile_groups;
unsigned int mtu;