Commit dd7fc37c authored by Anton Khirnov's avatar Anton Khirnov

af_join: switch to an AVOptions-based system.

Change the mappings separator from comma to '|' to avoid excessive
escaping, since comma is already used for separating filters in the
filtergraph description.
parent 3f14febb
...@@ -347,7 +347,7 @@ Number of input streams. Defaults to 2. ...@@ -347,7 +347,7 @@ Number of input streams. Defaults to 2.
Desired output channel layout. Defaults to stereo. Desired output channel layout. Defaults to stereo.
@item map @item map
Map channels from inputs to output. The argument is a comma-separated list of Map channels from inputs to output. The argument is a '|'-separated list of
mappings, each in the @code{@var{input_idx}.@var{in_channel}-@var{out_channel}} mappings, each in the @code{@var{input_idx}.@var{in_channel}-@var{out_channel}}
form. @var{input_idx} is the 0-based index of the input stream. @var{in_channel} form. @var{input_idx} is the 0-based index of the input stream. @var{in_channel}
can be either the name of the input channel (e.g. FL for front left) or its can be either the name of the input channel (e.g. FL for front left) or its
...@@ -367,7 +367,7 @@ avconv -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT ...@@ -367,7 +367,7 @@ avconv -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT
To build a 5.1 output from 6 single-channel streams: To build a 5.1 output from 6 single-channel streams:
@example @example
avconv -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex avconv -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex
'join=inputs=6:channel_layout=5.1:map=0.0-FL\,1.0-FR\,2.0-FC\,3.0-SL\,4.0-SR\,5.0-LFE' 'join=inputs=6:channel_layout=5.1:map=0.0-FL|1.0-FR|2.0-FC|3.0-SL|4.0-SR|5.0-LFE'
out out
@end example @end example
......
...@@ -102,14 +102,23 @@ static int filter_frame(AVFilterLink *link, AVFrame *frame) ...@@ -102,14 +102,23 @@ static int filter_frame(AVFilterLink *link, AVFrame *frame)
static int parse_maps(AVFilterContext *ctx) static int parse_maps(AVFilterContext *ctx)
{ {
JoinContext *s = ctx->priv; JoinContext *s = ctx->priv;
char separator = '|';
char *cur = s->map; char *cur = s->map;
#if FF_API_OLD_FILTER_OPTS
if (cur && strchr(cur, ',')) {
av_log(ctx, AV_LOG_WARNING, "This syntax is deprecated, use '|' to "
"separate the mappings.\n");
separator = ',';
}
#endif
while (cur && *cur) { while (cur && *cur) {
char *sep, *next, *p; char *sep, *next, *p;
uint64_t in_channel = 0, out_channel = 0; uint64_t in_channel = 0, out_channel = 0;
int input_idx, out_ch_idx, in_ch_idx; int input_idx, out_ch_idx, in_ch_idx;
next = strchr(cur, ','); next = strchr(cur, separator);
if (next) if (next)
*next++ = 0; *next++ = 0;
...@@ -182,13 +191,6 @@ static int join_init(AVFilterContext *ctx, const char *args) ...@@ -182,13 +191,6 @@ static int join_init(AVFilterContext *ctx, const char *args)
JoinContext *s = ctx->priv; JoinContext *s = ctx->priv;
int ret, i; int ret, i;
s->class = &join_class;
av_opt_set_defaults(s);
if ((ret = av_set_options_string(s, args, "=", ":")) < 0) {
av_log(ctx, AV_LOG_ERROR, "Error parsing options string '%s'.\n", args);
return ret;
}
if (!(s->channel_layout = av_get_channel_layout(s->channel_layout_str))) { if (!(s->channel_layout = av_get_channel_layout(s->channel_layout_str))) {
av_log(ctx, AV_LOG_ERROR, "Error parsing channel layout '%s'.\n", av_log(ctx, AV_LOG_ERROR, "Error parsing channel layout '%s'.\n",
s->channel_layout_str); s->channel_layout_str);
...@@ -512,6 +514,7 @@ AVFilter avfilter_af_join = { ...@@ -512,6 +514,7 @@ AVFilter avfilter_af_join = {
.description = NULL_IF_CONFIG_SMALL("Join multiple audio streams into " .description = NULL_IF_CONFIG_SMALL("Join multiple audio streams into "
"multi-channel output"), "multi-channel output"),
.priv_size = sizeof(JoinContext), .priv_size = sizeof(JoinContext),
.priv_class = &join_class,
.init = join_init, .init = join_init,
.uninit = join_uninit, .uninit = join_uninit,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment