Commit 0700d02a authored by Moritz Barsnick's avatar Moritz Barsnick Committed by Michael Niedermayer

lavfi/pan: allow negative gain parameters also for other inputs than the first named

Expands the parser to also accept the separator '-' in addition to
'+', and take the negative sign into consideration.

The optional sign for the first factor in the expression is already
covered by parsing for an integer.
Signed-off-by: 's avatarMoritz Barsnick <barsnick@gmx.net>
Reviewed-by: 's avatarNicolas George <george@nsup.org>
Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent 584eea5b
......@@ -3026,7 +3026,7 @@ output channel layout or number of channels
@item outdef
output channel specification, of the form:
"@var{out_name}=[@var{gain}*]@var{in_name}[+[@var{gain}*]@var{in_name}...]"
"@var{out_name}=[@var{gain}*]@var{in_name}[(+-)[@var{gain}*]@var{in_name}...]"
@item out_name
output channel to define, either a channel name (FL, FR, etc.) or a channel
......
......@@ -102,7 +102,7 @@ static av_cold int init(AVFilterContext *ctx)
{
PanContext *const pan = ctx->priv;
char *arg, *arg0, *tokenizer, *args = av_strdup(pan->args);
int out_ch_id, in_ch_id, len, named, ret;
int out_ch_id, in_ch_id, len, named, ret, sign = 1;
int nb_in_channels[2] = { 0, 0 }; // number of unnamed and named input channels
double gain;
......@@ -178,14 +178,18 @@ static av_cold int init(AVFilterContext *ctx)
ret = AVERROR(EINVAL);
goto fail;
}
pan->gain[out_ch_id][in_ch_id] = gain;
pan->gain[out_ch_id][in_ch_id] = sign * gain;
skip_spaces(&arg);
if (!*arg)
break;
if (*arg != '+') {
if (*arg == '-') {
sign = -1;
} else if (*arg != '+') {
av_log(ctx, AV_LOG_ERROR, "Syntax error near \"%.8s\"\n", arg);
ret = AVERROR(EINVAL);
goto fail;
} else {
sign = 1;
}
arg++;
}
......
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