avfilter/af_anlmdn: add support for commands
authorPaul B Mahol <onemda@gmail.com>
Mon, 3 Jun 2019 12:14:37 +0000 (14:14 +0200)
committerPaul B Mahol <onemda@gmail.com>
Mon, 3 Jun 2019 12:20:19 +0000 (14:20 +0200)
doc/filters.texi
libavfilter/af_anlmdn.c

index 926f271..5db8e03 100644 (file)
@@ -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.
index 93b76e0..b5bc94b 100644 (file)
@@ -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,
 };