summaryrefslogtreecommitdiff
path: root/libavcodec/libaomenc.c
diff options
context:
space:
mode:
authorBohan Li <bohanli@google.com>2021-02-08 20:04:41 -0800
committerJan Ekström <jeebjp@gmail.com>2021-02-10 11:52:46 +0200
commit82aab8a4eec33ee92c92c7679a4d7e6f03b109b4 (patch)
treea90e0ae9ef3d1ed6e07923f2f3e541590f3d5410 /libavcodec/libaomenc.c
parente0fd35d867752e6fcc7329a7d4f5e5fc619f2634 (diff)
downloadffmpeg-82aab8a4eec33ee92c92c7679a4d7e6f03b109b4.tar.gz
avcodec/libaomenc: add support for setting arbitrary libaom options
A new key & value API lets us gain access to newly added parameters without adding explicit support for them in our wrapper. Add an option utilizing this functionality in a similar manner to other encoder libraries' wrappers. Signed-off-by: Bohan Li <bohanli@google.com>
Diffstat (limited to 'libavcodec/libaomenc.c')
-rw-r--r--libavcodec/libaomenc.c18
1 files changed, 18 insertions, 0 deletions
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 },
};