[FFmpeg-devel] [PATCH v2] Add support for the new key & value API in libaom.
Bohan Li
bohanli at google.com
Tue Feb 9 06:04:41 EET 2021
This key & value API can greatly help with users who wants to try
libaom-av1 specific options that are not supported by ffmpeg options.
As was previously discussed in this thread:
https://lists.ffmpeg.org/pipermail/ffmpeg-devel/2020-October/271658.
The commit that added the API to libaom:
https://aomedia.googlesource.com/aom/+/c1d42fe6615c96fc929257
The libaom issue tracker:
https://bugs.chromium.org/p/aomedia/issues/detail?id=2875
Signed-off-by: Bohan Li <bohanli at google.com>
---
doc/encoders.texi | 11 +++++++++++
libavcodec/libaomenc.c | 18 ++++++++++++++++++
2 files changed, 29 insertions(+)
diff --git a/doc/encoders.texi b/doc/encoders.texi
index c2ba7d3e6f..8fb573c416 100644
--- a/doc/encoders.texi
+++ b/doc/encoders.texi
@@ -1684,6 +1684,17 @@ Enable interintra compound. Default is true.
@item enable-smooth-interintra (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable smooth interintra mode. Default is true.
+ at item aom-params
+Set libaom options using a list of @var{key}=@var{value} pairs separated
+by ":". For a list of supported options, see @command{aomenc --help} under the
+section "AV1 Specific Options".
+
+For example to specify libaom encoding options with @option{-aom-params}:
+
+ at example
+ffmpeg -i input -c:v libaom-av1 -b:v 500K -aom-params tune=psnr:enable-tpl-model=1 output.mp4
+ at end example
+
@end table
@section libsvtav1
diff --git a/libavcodec/libaomenc.c b/libavcodec/libaomenc.c
index 342d0883e4..9a26b5f9ef 100644
--- a/libavcodec/libaomenc.c
+++ b/libavcodec/libaomenc.c
@@ -124,6 +124,7 @@ typedef struct AOMEncoderContext {
int enable_diff_wtd_comp;
int enable_dist_wtd_comp;
int enable_dual_filter;
+ AVDictionary *aom_params;
} AOMContext;
static const char *const ctlidstr[] = {
@@ -874,6 +875,20 @@ static av_cold int aom_init(AVCodecContext *avctx,
codecctl_int(avctx, AV1E_SET_ENABLE_INTRABC, ctx->enable_intrabc);
#endif
+#if AOM_ENCODER_ABI_VERSION >= 23
+ {
+ AVDictionaryEntry *en = NULL;
+
+ while ((en = av_dict_get(ctx->aom_params, "", en, AV_DICT_IGNORE_SUFFIX))) {
+ int ret = aom_codec_set_option(&ctx->encoder, en->key, en->value);
+ if (ret != AOM_CODEC_OK) {
+ log_encoder_error(avctx, en->key);
+ return AVERROR_EXTERNAL;
+ }
+ }
+ }
+#endif
+
// provide dummy value to initialize wrapper, values will be updated each _encode()
aom_img_wrap(&ctx->rawimg, img_fmt, avctx->width, avctx->height, 1,
(unsigned char*)1);
@@ -1299,6 +1314,9 @@ static const AVOption options[] = {
{ "enable-masked-comp", "Enable masked compound", OFFSET(enable_masked_comp), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VE},
{ "enable-interintra-comp", "Enable interintra compound", OFFSET(enable_interintra_comp), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VE},
{ "enable-smooth-interintra", "Enable smooth interintra mode", OFFSET(enable_smooth_interintra), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VE},
+#if AOM_ENCODER_ABI_VERSION >= 23
+ { "aom-params", "Set libaom options using a :-separated list of key=value pairs", OFFSET(aom_params), AV_OPT_TYPE_DICT, { 0 }, 0, 0, VE },
+#endif
{ NULL },
};
--
2.30.0.478.g8a0d178c01-goog
More information about the ffmpeg-devel
mailing list