[FFmpeg-devel] [PATCH 14/25] avfilter/vf_format: re-use AVFilterList for pix_fmt parsing

Anton Khirnov anton at khirnov.net
Wed Dec 13 10:48:38 EET 2023


Quoting Niklas Haas (2023-11-09 13:19:46)
>Subject: avfilter/vf_format: re-use AVFilterList for pix_fmt parsing
                                     ^^^^^^^^^^^^
You mean AVFilterFormats

> From: Niklas Haas <git at haasn.dev>
> 
> Rewrite the format parsing code to make it more easily generalizable. In
> particular, `invert_formats` does not depend on the type of format list
> passed to it, which allows me to re-use this helper in an upcoming
> commit.
> 
> Slightly shortens the code, at the sole cost of doing several malloc
> (ff_add_format) instead of a single malloc.
> ---
>  libavfilter/vf_format.c | 103 +++++++++++++++++-----------------------
>  1 file changed, 43 insertions(+), 60 deletions(-)
> 
> diff --git a/libavfilter/vf_format.c b/libavfilter/vf_format.c
> index 1189bd61c2..b137e3075e 100644
> --- a/libavfilter/vf_format.c
> +++ b/libavfilter/vf_format.c
> @@ -41,25 +41,48 @@ typedef struct FormatContext {
>      const AVClass *class;
>      char *pix_fmts;
>  
> -    /**
> -     * pix_fmts parsed into AVPixelFormats and terminated with
> -     * AV_PIX_FMT_NONE
> -     */
> -    enum AVPixelFormat *formats;
> +    AVFilterFormats *formats; ///< parsed from `pix_fmts`
>  } FormatContext;
>  
>  static av_cold void uninit(AVFilterContext *ctx)
>  {
>      FormatContext *s = ctx->priv;
> -    av_freep(&s->formats);
> +    ff_formats_unref(&s->formats);
> +}
> +
> +static av_cold int invert_formats(AVFilterFormats **fmts,
> +                                   AVFilterFormats *allfmts)

This would look better with AVFilterFormats vertically aligned as well.

Looks ok otherwise, though I'm slightly surprised we don't seem to have
a function for "is format in list?".

-- 
Anton Khirnov


More information about the ffmpeg-devel mailing list