diff --git a/doc/filters.texi b/doc/filters.texi index 926f2717ec..5db8e0302f 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -1806,6 +1806,19 @@ Default value is @var{o}. Set smooth factor. Default value is @var{11}. Allowed range is from @var{1} to @var{15}. @end table +@subsection Commands + +This filter supports the following commands: +@table @option +@item s +Change denoise strength. Argument is single float number. +Syntax for the command is : "@var{s}" + +@item o +Change output mode. +Syntax for the command is : "i", "o" or "n" string. +@end table + @section anull Pass the audio source unchanged to the output. diff --git a/libavfilter/af_anlmdn.c b/libavfilter/af_anlmdn.c index 93b76e0dff..b5bc94b4eb 100644 --- a/libavfilter/af_anlmdn.c +++ b/libavfilter/af_anlmdn.c @@ -22,6 +22,7 @@ #include "libavutil/avassert.h" #include "libavutil/audio_fifo.h" +#include "libavutil/avstring.h" #include "libavutil/opt.h" #include "avfilter.h" #include "audio.h" @@ -338,6 +339,29 @@ static av_cold void uninit(AVFilterContext *ctx) av_frame_free(&s->cache); } +static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, + char *res, int res_len, int flags) +{ + AudioNLMeansContext *s = ctx->priv; + + if (!strcmp(cmd, "s")) { + float a; + + if (av_sscanf(args, "%f", &a) == 1) + s->a = av_clipf(a, 0.00001, 10); + } else if (!strcmp(cmd, "o")) { + if (!strcmp(args, "i")) { + s->om = IN_MODE; + } else if (!strcmp(args, "o")) { + s->om = OUT_MODE; + } else if (!strcmp(args, "n")) { + s->om = NOISE_MODE; + } + } + + return 0; +} + static const AVFilterPad inputs[] = { { .name = "default", @@ -366,6 +390,7 @@ AVFilter ff_af_anlmdn = { .uninit = uninit, .inputs = inputs, .outputs = outputs, + .process_command = process_command, .flags = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | AVFILTER_FLAG_SLICE_THREADS, };