From d89293b606f282c38cfee362b910b8eaf2d19275 Mon Sep 17 00:00:00 2001 From: James Calligeros Date: Sat, 6 Apr 2024 16:12:57 +1000 Subject: [PATCH] node/software-dsp: implement loading filter graphs from disk Using the new Conf() constructor, we can load and parse a filter graph from a file on disk. This is useful when, for example, maintaining a large database of filter graphs. It also keeps wireplumber.conf.d free from clutter. Signed-off-by: James Calligeros --- src/scripts/node/software-dsp.lua | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/scripts/node/software-dsp.lua b/src/scripts/node/software-dsp.lua index 1887408c..da410bd7 100644 --- a/src/scripts/node/software-dsp.lua +++ b/src/scripts/node/software-dsp.lua @@ -36,6 +36,19 @@ SimpleEventHook { if props["filter-graph"] then log:debug("Loading filter graph for " .. node.properties["node.name"]) filter_nodes[node.properties["object.id"]] = LocalModule("libpipewire-module-filter-chain", props["filter-graph"], {}) + elseif props["filter-path"] then + log:debug("Loading filter graph for " .. node.properties["node.name"] .. " from disk") + local conf = Conf(props["filter-path"], { + ["as-section"] = "node.software-dsp.graph", + ["no-fragments"] = true + }) + local err = conf:open() + if not err then + local args = conf:get_section_as_json("node.software-dsp.graph"):to_string() + filter_nodes[node.properties["object.id"]] = LocalModule("libpipewire-module-filter-chain", args, {}) + else + log:warning("Unable to load filter graph for " .. node.properties["node.name"]) + end end if cutils.parseBool (props["hide-parent"]) then