[FFmpeg-devel] [FFmpeg-cvslog] avfilter/af_amix: use av_strtod() for weights

Martin Storsjö martin at martin.st
Tue Apr 14 19:46:47 EEST 2020


On Tue, 14 Apr 2020, Paul B Mahol wrote:

> ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Tue Apr 14 12:38:47 2020 +0200| [10a68ccd58318c00c7872081a0518acec7ebe6c3] | committer: Paul B Mahol
>
> avfilter/af_amix: use av_strtod() for weights
>
>> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=10a68ccd58318c00c7872081a0518acec7ebe6c3
> ---
>
> libavfilter/af_amix.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/libavfilter/af_amix.c b/libavfilter/af_amix.c
> index af8ad58262..78b7a7c83d 100644
> --- a/libavfilter/af_amix.c
> +++ b/libavfilter/af_amix.c
> @@ -34,6 +34,7 @@
> #include "libavutil/avstring.h"
> #include "libavutil/channel_layout.h"
> #include "libavutil/common.h"
> +#include "libavutil/eval.h"
> #include "libavutil/float_dsp.h"
> #include "libavutil/mathematics.h"
> #include "libavutil/opt.h"
> @@ -506,9 +507,9 @@ static int activate(AVFilterContext *ctx)
> static av_cold int init(AVFilterContext *ctx)
> {
>     MixContext *s = ctx->priv;
> -    char *p, *arg, *saveptr = NULL;
>     float last_weight = 1.f;
>     int i, ret;
> +    char *p;
>
>     for (i = 0; i < s->nb_inputs; i++) {
>         AVFilterPad pad = { 0 };
> @@ -534,13 +535,13 @@ static av_cold int init(AVFilterContext *ctx)
>
>     p = s->weights_str;
>     for (i = 0; i < s->nb_inputs; i++) {
> -        if (!(arg = av_strtok(p, " ", &saveptr)))
> -            break;
> -
> -        p = NULL;
> -        sscanf(arg, "%f", &last_weight);
> +        last_weight = av_strtod(p, &p);
>         s->weights[i] = last_weight;
>         s->weight_sum += FFABS(last_weight);
> +        if (p && *p)
> +            p++;
> +        else
> +            break;

This broke fate - on the last iteration, weight_sum is accumulated but we 
break before incrementing i, thus one weight is counted twice.

// Martin




More information about the ffmpeg-devel mailing list