[FFmpeg-devel] [PATCH] lavfi/pan: allow negative gain parameters also for other inputs than the first named
Nicolas George
george at nsup.org
Thu Oct 13 12:31:22 EEST 2016
Le decadi 20 vendémiaire, an CCXXV, Moritz Barsnick a écrit :
> Expands the parser to also accept the separator '-' in addition to
> '+', and take the negative sign into consideration.
>
> Signed-off-by: Moritz Barsnick <barsnick at gmx.net>
> ---
> doc/filters.texi | 2 +-
> libavfilter/af_pan.c | 11 ++++++++---
> 2 files changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/doc/filters.texi b/doc/filters.texi
> index 4b2f7bf..fb4756e 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -3001,7 +3001,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..161097a 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,15 +178,20 @@ 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 {
Nit: inconsistent placement of the else clause. Not blocking.
> + sign = 1;
> + }
> arg++;
> }
> }
I would have put the "sign = 1" unconditionally before the test for the
delimiter, but this version works too, so LGTM.
Regards,
--
Nicolas George
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20161013/94782e23/attachment.sig>
More information about the ffmpeg-devel
mailing list