Le septidi 17 pluviôse, an CCXXIV, Paul B Mahol a écrit :
> From eab0be0e21fe312bf40c6330e493d2d0e9fdff2b Mon Sep 17 00:00:00 2001
> From: Paul B Mahol <one...@gmail.com>
> Date: Fri, 5 Feb 2016 09:11:55 +0100
> Subject: [PATCH] avfilter/split: support any channel count for asplit filter
> 
> Signed-off-by: Paul B Mahol <one...@gmail.com>
> ---
>  libavfilter/split.c | 28 ++++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
> 
> diff --git a/libavfilter/split.c b/libavfilter/split.c
> index 1e4fb42..0d0a96b 100644
> --- a/libavfilter/split.c
> +++ b/libavfilter/split.c
> @@ -32,6 +32,7 @@
>  
>  #include "avfilter.h"
>  #include "audio.h"
> +#include "formats.h"
>  #include "internal.h"
>  #include "video.h"
>  
> @@ -93,6 +94,32 @@ static int filter_frame(AVFilterLink *inlink, AVFrame 
> *frame)
>      return ret;
>  }
>  
> +static int asplit_query_formats(AVFilterContext *ctx)
> +{
> +    AVFilterChannelLayouts *in_layouts = NULL;
> +    int i, ret;
> +
> +    if ((ret = ff_set_common_formats(ctx, 
> ff_all_formats(AVMEDIA_TYPE_AUDIO))) < 0 ||
> +        (ret = ff_set_common_samplerates(ctx, ff_all_samplerates())) < 0)
> +        return ret;
> +

> +    ret = AVERROR(ENOMEM);
> +    if ((in_layouts = ff_all_channel_counts()) == NULL ||
> +        (ret = ff_channel_layouts_ref(in_layouts, 
> &ctx->inputs[0]->out_channel_layouts)) < 0)
> +        return ret;
> +
> +    for (i = 0; i < ctx->nb_outputs; i++) {
> +        AVFilterChannelLayouts *out_layouts = NULL;
> +
> +        ret = AVERROR(ENOMEM);
> +        if ((out_layouts = ff_all_channel_counts()) == NULL ||
> +            (ret = ff_channel_layouts_ref(out_layouts, 
> &ctx->outputs[i]->in_channel_layouts)) < 0)
> +            return ret;
> +    }

This look strange. Why do you set a different channel layout on input and
all outputs? The way asplit works, the layout need to be the same on input
and all outputs, since it's the same frames. Or did I miss something?

> +
> +    return 0;
> +}
> +
>  #define OFFSET(x) offsetof(SplitContext, x)
>  #define FLAGS AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_VIDEO_PARAM
>  static const AVOption options[] = {
> @@ -143,6 +170,7 @@ AVFilter ff_af_asplit = {
>      .priv_class  = &asplit_class,
>      .init        = split_init,
>      .uninit      = split_uninit,
> +    .query_formats = asplit_query_formats,
>      .inputs      = avfilter_af_asplit_inputs,
>      .outputs     = NULL,
>      .flags       = AVFILTER_FLAG_DYNAMIC_OUTPUTS,

Regards,

-- 
  Nicolas George

Attachment: signature.asc
Description: Digital signature

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to