summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/filters.texi4
-rw-r--r--libavfilter/af_lv2.c21
2 files changed, 25 insertions, 0 deletions
diff --git a/doc/filters.texi b/doc/filters.texi
index 3c64d13b82..914baaf134 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -5433,6 +5433,10 @@ lv2=p=http\\\\://www.openavproductions.com/artyfx#bitta:c=crush=0.3
@end example
@end itemize
+@subsection Commands
+
+This filter supports all options that are exported by plugin as commands.
+
@section mcompand
Multiband Compress or expand the audio's dynamic range.
diff --git a/libavfilter/af_lv2.c b/libavfilter/af_lv2.c
index 0f0c797989..0c23adeb15 100644
--- a/libavfilter/af_lv2.c
+++ b/libavfilter/af_lv2.c
@@ -538,6 +538,26 @@ static int query_formats(AVFilterContext *ctx)
return 0;
}
+static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
+ char *res, int res_len, int flags)
+{
+ LV2Context *s = ctx->priv;
+ const LilvPort *port;
+ LilvNode *sym;
+ int index;
+
+ sym = lilv_new_string(s->world, cmd);
+ port = lilv_plugin_get_port_by_symbol(s->plugin, sym);
+ lilv_node_free(sym);
+ if (!port) {
+ av_log(s, AV_LOG_WARNING, "Unknown option: <%s>\n", cmd);
+ } else {
+ index = lilv_port_get_index(s->plugin, port);
+ s->controls[index] = atof(args);
+ }
+ return 0;
+}
+
static av_cold void uninit(AVFilterContext *ctx)
{
LV2Context *s = ctx->priv;
@@ -578,6 +598,7 @@ const AVFilter ff_af_lv2 = {
.priv_class = &lv2_class,
.init = init,
.uninit = uninit,
+ .process_command = process_command,
.inputs = 0,
FILTER_OUTPUTS(lv2_outputs),
FILTER_QUERY_FUNC(query_formats),