[FFmpeg-devel] [PATCH v2] Add support for the new key & value API in libaom.

Bohan Li bohanli at google.com
Tue Feb 9 06:06:16 EET 2021


Thanks for the info! Just uploaded the patch v2 as suggested.

Best,
Bohan

On Mon, Feb 8, 2021 at 8:04 PM Bohan Li <bohanli at 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 <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