Set libaom-specific option -a tune=ssim by default Note that we have recommended setting -a tune=ssim only for high quality levels. This pull request sets -a tune=ssim by default for all quality levels, because we have not determined empirically the quality level above which -a tune=ssim is better than -a tune=psnr. Also, it is easier to understand the default value of an option if it is independent of other options. Part of https://github.com/AOMediaCodec/libavif/issues/955.
diff --git a/src/codec_aom.c b/src/codec_aom.c index 3b06147..44deab9 100644 --- a/src/codec_aom.c +++ b/src/codec_aom.c
@@ -69,6 +69,9 @@ // Whether cq-level was set with an // avifEncoderSetCodecSpecificOption(encoder, "cq-level", value) call. avifBool cqLevelSet; + // Whether 'tuning' (of the specified distortion metric) was set with an + // avifEncoderSetCodecSpecificOption(encoder, "tune", value) call. + avifBool tuningSet; #endif }; @@ -466,6 +469,8 @@ } if (!strcmp(key, "cq-level")) { codec->internal->cqLevelSet = AVIF_TRUE; + } else if (!strcmp(key, "tune")) { + codec->internal->tuningSet = AVIF_TRUE; } #else // !defined(HAVE_AOM_CODEC_SET_OPTION) avifBool match = AVIF_FALSE; @@ -500,6 +505,8 @@ } if (aomOptionDefs[j].controlId == AOME_SET_CQ_LEVEL) { codec->internal->cqLevelSet = AVIF_TRUE; + } else if (aomOptionDefs[j].controlId == AOME_SET_TUNING) { + codec->internal->tuningSet = AVIF_TRUE; } break; } @@ -752,6 +759,11 @@ aom_codec_control(&codec->internal->encoder, AOME_SET_CQ_LEVEL, cqLevel); } #endif + if (!codec->internal->tuningSet) { + if (aom_codec_control(&codec->internal->encoder, AOME_SET_TUNING, AOM_TUNE_SSIM) != AOM_CODEC_OK) { + return AVIF_RESULT_UNKNOWN_ERROR; + } + } } aom_image_t aomImage;