[FFmpeg-devel] [PATCH 04/10] lavfi: implement ff_query_formats_all().

Stefano Sabatini stefasab at gmail.com
Fri Jan 18 01:33:23 CET 2013


On date Wednesday 2013-01-16 17:50:18 +0100, Nicolas George encoded:
> 
> Signed-off-by: Nicolas George <nicolas.george at normalesup.org>
> ---
>  libavfilter/formats.c |   15 +++++++++++++--
>  libavfilter/formats.h |    8 ++++++++
>  2 files changed, 21 insertions(+), 2 deletions(-)
> 
> 
> Made it work with video too, as requested by Stefano.
> 
> 
> diff --git a/libavfilter/formats.c b/libavfilter/formats.c
> index 5f8954c..0284db2 100644
> --- a/libavfilter/formats.c
> +++ b/libavfilter/formats.c
> @@ -516,7 +516,8 @@ void ff_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats)
>                         ff_formats_ref, formats);
>  }
>  
> -int ff_default_query_formats(AVFilterContext *ctx)

> +static int default_query_formats_common(AVFilterContext *ctx,
> +                                        AVFilterChannelLayouts *(layouts)(void))

I don't like "layouts" in a generic non-audio function but can't
really suggest a better alternative. Maybe a simple switch or flags
would be better, given that the API is internal is not a serious
issue.

>  {
>      enum AVMediaType type = ctx->inputs  && ctx->inputs [0] ? ctx->inputs [0]->type :
>                              ctx->outputs && ctx->outputs[0] ? ctx->outputs[0]->type :
> @@ -524,13 +525,23 @@ int ff_default_query_formats(AVFilterContext *ctx)
>  
>      ff_set_common_formats(ctx, ff_all_formats(type));
>      if (type == AVMEDIA_TYPE_AUDIO) {
> -        ff_set_common_channel_layouts(ctx, ff_all_channel_layouts());
> +        ff_set_common_channel_layouts(ctx, layouts());
>          ff_set_common_samplerates(ctx, ff_all_samplerates());
>      }
>  
>      return 0;
>  }
>  
> +int ff_default_query_formats(AVFilterContext *ctx)
> +{
> +    return default_query_formats_common(ctx, ff_all_channel_layouts);
> +}
> +
> +int ff_query_formats_all(AVFilterContext *ctx)
> +{
> +    return default_query_formats_common(ctx, ff_all_channel_counts);
> +}
> +
>  /* internal functions for parsing audio format arguments */
>  
>  int ff_parse_pixel_format(enum AVPixelFormat *ret, const char *arg, void *log_ctx)
> diff --git a/libavfilter/formats.h b/libavfilter/formats.h
> index c6ace3a..6f2f778 100644
> --- a/libavfilter/formats.h
> +++ b/libavfilter/formats.h
> @@ -172,6 +172,14 @@ void ff_channel_layouts_changeref(AVFilterChannelLayouts **oldref,
>  
>  int ff_default_query_formats(AVFilterContext *ctx);
>  
> +/**
> + * Set the formats list to all existing formats.
> + * This function behaves like ff_default_query_formats(), except it also
> + * accepts channel layouts with unknown disposition. It should only be used
> + * with audio filters.
> + */
> +int ff_query_formats_all(AVFilterContext *ctx);
> +

LGTM otherwise.
-- 
FFmpeg = Furious and Fanciful Mean Purposeless Ecumenical Guru


More information about the ffmpeg-devel mailing list