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.
This commit is contained in:
Anton Khirnov 2013-02-25 21:21:29 +01:00
parent 3f14febbdf
commit dd7fc37c71
2 changed files with 13 additions and 10 deletions

View File

@ -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
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

View File

@ -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)
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 = {
.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,