[FFmpeg-cvslog] lavfi/pan: allow negative gain parameters also for other inputs than the first named
Moritz Barsnick
git at videolan.org
Thu Nov 24 01:56:26 EET 2016
ffmpeg | branch: master | Moritz Barsnick <barsnick at gmx.net> | Fri Oct 28 14:13:25 2016 +0200| [0700d02a697e0a2901abc6422edfe72a246bae01] | committer: 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: Moritz Barsnick <barsnick at gmx.net>
Reviewed-by: Nicolas George <george at nsup.org>
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0700d02a697e0a2901abc6422edfe72a246bae01
---
doc/filters.texi | 2 +-
libavfilter/af_pan.c | 10 +++++++---
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/doc/filters.texi b/doc/filters.texi
index b15f78a..b3899b2 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -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
diff --git a/libavfilter/af_pan.c b/libavfilter/af_pan.c
index fbd79a5..94f1587 100644
--- a/libavfilter/af_pan.c
+++ b/libavfilter/af_pan.c
@@ -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++;
}
More information about the ffmpeg-cvslog
mailing list