[FFmpeg-devel] [PATCH] lavfi/anullsrc: fix format negotiation

Nicolas George nicolas.george at normalesup.org
Fri Mar 22 11:47:43 CET 2013


Le duodi 2 germinal, an CCXXI, Stefano Sabatini a écrit :
> Samplerate and channel layouts must be set in query_formats.

> +static int query_formats(AVFilterContext *ctx)
> +{
> +    ANullContext *null = ctx->priv;
> +    int64_t chlayouts[] = { null->channel_layout, -1 };
> +    int sample_rates[] = { null->sample_rate, -1 };
> +
> +    ff_set_common_formats        (ctx, ff_all_formats(AVMEDIA_TYPE_AUDIO));
> +    ff_set_common_channel_layouts(ctx, avfilter_make_format64_list(chlayouts));
> +    ff_set_common_samplerates    (ctx, ff_make_format_list(sample_rates));
> +
> +    return 0;
> +}

Unless I am mistaken, if query_formats() leaves field uninitialized and
returns success, then the wrapper makes that for you, so you could probably
omit formats.

(And by the way: ping for "lavfi: support multiple rounds of format
negotiation".)

> +
>  static int config_props(AVFilterLink *outlink)
>  {
>      ANullContext *null = outlink->src->priv;
>      char buf[128];
>      int chans_nb;
>  
> -    outlink->sample_rate = null->sample_rate;
> -    outlink->channel_layout = null->channel_layout;
> -
>      chans_nb = av_get_channel_layout_nb_channels(null->channel_layout);
>      av_get_channel_layout_string(buf, sizeof(buf), chans_nb, null->channel_layout);
>      av_log(outlink->src, AV_LOG_VERBOSE,
> @@ -132,6 +142,7 @@ AVFilter avfilter_asrc_anullsrc = {
>      .description = NULL_IF_CONFIG_SMALL("Null audio source, return empty audio frames."),
>  
>      .init        = init,
> +    .query_formats = query_formats,
>      .priv_size   = sizeof(ANullContext),
>  
>      .inputs      = NULL,

LGTM.

Regards,

-- 
  Nicolas George


More information about the ffmpeg-devel mailing list