Blob Blame History Raw
From d89293b606f282c38cfee362b910b8eaf2d19275 Mon Sep 17 00:00:00 2001
From: James Calligeros <jcalligeros99@gmail.com>
Date: Sat, 6 Apr 2024 16:12:57 +1000
Subject: [PATCH 08/10] 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 <jcalligeros99@gmail.com>
---
 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
-- 
2.44.0