Thanks for the info! Just uploaded the patch v2 as suggested. Best, Bohan
On Mon, Feb 8, 2021 at 8:04 PM Bohan Li <boha...@google.com> wrote: > 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 <boha...@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. > > +@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}: > + > +@example > +ffmpeg -i input -c:v libaom-av1 -b:v 500K -aom-params > tune=psnr:enable-tpl-model=1 output.mp4 > +@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 > > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".