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
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel