aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas George <george@nsup.org>2013-10-25 16:02:04 +0200
committerCarl Eugen Hoyos <cehoyos@ag.or.at>2013-11-28 01:05:26 +0100
commitbc04a3a489513eedb1c89eca46de971e2e638dfa (patch)
tree75b15c53c863615c6274f62362ab7406792b5d4f
parentcfcb22a77bd4605c4e1d343b7e8dfe4c356134da (diff)
downloadffmpeg-bc04a3a489513eedb1c89eca46de971e2e638dfa.tar.gz
lavfi/af_pan: support unknown layouts on output.
(cherry picked from commit 4e9adc9b7363cc336e3d47c98455e1508902fd29)
-rw-r--r--libavfilter/af_pan.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/libavfilter/af_pan.c b/libavfilter/af_pan.c
index e742d9e999..9f78ff0539 100644
--- a/libavfilter/af_pan.c
+++ b/libavfilter/af_pan.c
@@ -116,10 +116,10 @@ static av_cold int init(AVFilterContext *ctx)
if (!args)
return AVERROR(ENOMEM);
arg = av_strtok(args, "|", &tokenizer);
- ret = ff_parse_channel_layout(&pan->out_channel_layout, NULL, arg, ctx);
+ ret = ff_parse_channel_layout(&pan->out_channel_layout,
+ &pan->nb_output_channels, arg, ctx);
if (ret < 0)
goto fail;
- pan->nb_output_channels = av_get_channel_layout_nb_channels(pan->out_channel_layout);
/* parse channel specifications */
while ((arg = arg0 = av_strtok(NULL, "|", &tokenizer))) {
@@ -244,7 +244,9 @@ static int query_formats(AVFilterContext *ctx)
// outlink supports only requested output channel layout
layouts = NULL;
- ff_add_channel_layout(&layouts, pan->out_channel_layout);
+ ff_add_channel_layout(&layouts,
+ pan->out_channel_layout ? pan->out_channel_layout :
+ FF_COUNT2LAYOUT(pan->nb_output_channels));
ff_channel_layouts_ref(layouts, &outlink->in_channel_layouts);
return 0;
}
@@ -286,6 +288,8 @@ static int config_props(AVFilterLink *link)
0, ctx);
if (!pan->swr)
return AVERROR(ENOMEM);
+ if (!pan->out_channel_layout)
+ av_opt_set_int(pan->swr, "och", pan->nb_output_channels, 0);
// gains are pure, init the channel mapping
if (pan->pure_gains) {