avfilter/af_ladspa: allow changing controls dynamically
authorPaul B Mahol <onemda@gmail.com>
Tue, 24 Sep 2013 16:20:53 +0000 (16:20 +0000)
committerPaul B Mahol <onemda@gmail.com>
Fri, 27 Sep 2013 12:49:55 +0000 (12:49 +0000)
Signed-off-by: Paul B Mahol <onemda@gmail.com>
doc/filters.texi
libavfilter/af_ladspa.c

index 800a666..7708fe3 100644 (file)
@@ -1502,6 +1502,16 @@ ladspa=caps:Eq10X2:c=c0=-48|c9=-24|c3=12|c4=2
 @end example
 @end itemize
 
+@subsection Commands
+
+This filter supports the following commands:
+@table @option
+@item cN
+Modify the @var{N}-th control value.
+
+If the specified value is not valid, it is ignored and prior one is kept.
+@end table
+
 @section lowpass
 
 Apply a low-pass filter with 3dB point frequency.
index 45f17ff..3ceb91e 100644 (file)
@@ -662,6 +662,18 @@ static av_cold void uninit(AVFilterContext *ctx)
         av_freep(&ctx->input_pads[0].name);
 }
 
+static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
+                           char *res, int res_len, int flags)
+{
+    LADSPA_Data value;
+    unsigned long port;
+
+    if (sscanf(cmd, "c%ld", &port) + sscanf(args, "%f", &value) != 2)
+        return AVERROR(EINVAL);
+
+    return set_control(ctx, port, value);
+}
+
 static const AVFilterPad ladspa_outputs[] = {
     {
         .name          = "default",
@@ -680,6 +692,7 @@ AVFilter avfilter_af_ladspa = {
     .init          = init,
     .uninit        = uninit,
     .query_formats = query_formats,
+    .process_command = process_command,
     .inputs        = 0,
     .outputs       = ladspa_outputs,
     .flags         = AVFILTER_FLAG_DYNAMIC_INPUTS,