X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Faf_adelay.c;h=6ac81c2a3e04cf77b8fd8af577f5b3cccf8a8d14;hb=bebea787554fe4481847afabf7107171d6523323;hp=eb97039566d7169867e0eb90b51046fd4d4962b2;hpb=ebdc5c419aef0d9eed8c1ec57b30238194c1db0a;p=ffmpeg diff --git a/libavfilter/af_adelay.c b/libavfilter/af_adelay.c index eb97039566d..6ac81c2a3e0 100644 --- a/libavfilter/af_adelay.c +++ b/libavfilter/af_adelay.c @@ -36,6 +36,7 @@ typedef struct ChanDelay { typedef struct AudioDelayContext { const AVClass *class; + int all; char *delays; ChanDelay *chandelay; int nb_delays; @@ -54,6 +55,7 @@ typedef struct AudioDelayContext { static const AVOption adelay_options[] = { { "delays", "set list of delays for each channel", OFFSET(delays), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, A }, + { "all", "use last available delay for remained channels", OFFSET(all), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, A }, { NULL } }; @@ -153,7 +155,10 @@ static int config_input(AVFilterLink *inlink) ret = av_sscanf(arg, "%d%c", &d->delay, &type); if (ret != 2 || type != 'S') { div = type == 's' ? 1.0 : 1000.0; - av_sscanf(arg, "%f", &delay); + if (av_sscanf(arg, "%f", &delay) != 1) { + av_log(ctx, AV_LOG_ERROR, "Invalid syntax for delay.\n"); + return AVERROR(EINVAL); + } d->delay = delay * inlink->sample_rate / div; } @@ -163,6 +168,11 @@ static int config_input(AVFilterLink *inlink) } } + if (s->all && i) { + for (int j = i; j < s->nb_delays; j++) + s->chandelay[j].delay = s->chandelay[i-1].delay; + } + s->padding = s->chandelay[0].delay; for (i = 1; i < s->nb_delays; i++) { ChanDelay *d = &s->chandelay[i];