diff options
author | George Kiagiadakis <george.kiagiadakis@collabora.com> | 2024-09-04 16:11:54 +0300 |
---|---|---|
committer | Jan-Simon Moeller <jsmoeller@linuxfoundation.org> | 2024-09-09 14:37:48 +0000 |
commit | b0db8f5e35a65ac44fa8931cfbc8386e3db85cf1 (patch) | |
tree | 90f4e2ce1838ceed6c61e1ad844ecb59018ed5a4 /meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl | |
parent | 7b8a17be6743d4e585392eb61a569a63c9ba4f4b (diff) |
meta-pipewire: update wireplumber to 0.5.6
- use the wireplumber recipe from meta-openembedded (albeit copied
here with the version changed, because 0.5.6 is not available in
meta-openembedded)
- rewrite configuration files as needed for 0.5.x
- configure wireplumber with the main service masked, using only the
template service files for a split-instance configuration.
split-instance facilitates the multi-container setup that is used
in the instrument cluster images.
Bug-AGL: SPEC-4934
Change-Id: Ica83f869cdc9527a9edce25e63918a2ba97a4766
Signed-off-by: George Kiagiadakis <george.kiagiadakis@collabora.com>
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/30243
Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tested-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
(cherry picked from commit 5dd43491b6e44664ad1d2e2fb596b6cb248c88fb)
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/30209
Diffstat (limited to 'meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl')
13 files changed, 191 insertions, 571 deletions
diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua deleted file mode 100644 index 7e1794df0..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/00-functions.lua +++ /dev/null @@ -1,27 +0,0 @@ -components = {} - -function load_module(m) - if not components[m] then - components[m] = { "libwireplumber-module-" .. m, type = "module" } - end -end - -function load_pw_module(m) - if not components[m] then - components[m] = { "libpipewire-module-" .. m, type = "pw_module" } - end -end - -function load_script(s, a) - if not components[s] then - components[s] = { s, type = "script/lua", args = a } - end -end - -function load_monitor(s, a) - load_script("monitors/" .. s .. ".lua", a) -end - -function load_access(s, a) - load_script("access/access-" .. s .. ".lua", a) -end diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf new file mode 100644 index 000000000..7dc8938fc --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-log.conf @@ -0,0 +1,5 @@ +context.properties = { + # F=fatal, E=critical, W=warning, N=notice, I=info, D=debug, T=trace + # See https://pipewire.pages.freedesktop.org/wireplumber/daemon/logging.html + log.level = "N" +} diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf new file mode 100644 index 000000000..d029887df --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/20-AGL-profiles.conf @@ -0,0 +1,29 @@ +# This configuration fragment sets up the split-instance profiles to include +# the standard "embedded" configuration of running systemwide without +# maintaining user state across reboots. +# In addition, runtime settings support is disabled on the device monitor +# instances, as it depends on the "sm-settings" metadata, which lives on the +# policy instance. In containerized setups (such as the IC demo), the policy +# instance runs in a container and the device monitors should not wait for it +# or depend on it in any other way. + +wireplumber.profiles = { + policy = { + inherits = [ mixin.systemwide-session, mixin.stateless ] + } + + audio = { + inherits = [ mixin.systemwide-session, mixin.stateless ] + support.settings = disabled + } + + bluetooth = { + inherits = [ mixin.systemwide-session, mixin.stateless ] + support.settings = disabled + } + + video-capture = { + inherits = [ mixin.systemwide-session, mixin.stateless ] + support.settings = disabled + } +} diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf new file mode 100644 index 000000000..fc03ceb38 --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-alsa.conf @@ -0,0 +1,101 @@ +# Default AGL WirePlumber ALSA monitor configuration + +monitor.alsa.rules = [ + # + # Bump priority of well-known output devices + # Higher priority means it gets selected as the default if it's present + # + + # USB output + { + matches = [ + { + node.name = "~alsa_output.*" + api.alsa.card.driver = "USB-Audio" + } + ] + actions = { + update-props = { + priority.driver = 1300 + priority.session = 1300 + } + } + } + + # USB input + { + matches = [ + { + node.name = "~alsa_input.*" + api.alsa.card.driver = "USB-Audio" + } + ] + actions = { + update-props = { + priority.driver = 2300 + priority.session = 2300 + } + } + } + + # well-known internal output devices + { + matches = [ + # ak4613 + { + node.name = "~alsa_output.*" + api.alsa.card.id = "ak4613" + api.alsa.pcm.device = "0" + } + # imx8mq + { + node.name = "~alsa_output.*" + api.alsa.card.id = "wm8524audio" + } + # rcarsound + { + node.name = "~alsa_output.*" + api.alsa.card.id = "rcarsound" + api.alsa.pcm.device = "0" + } + # rpi3 + { + node.name = "~alsa_output.*" + api.alsa.pcm.name = "bcm2835 ALSA" + } + ] + actions = { + update-props = { + priority.driver = 1100 + priority.session = 1100 + } + } + } + + # well-known internal input devices + { + matches = [ + # ak4613 + { + node.name = "~alsa_input.*" + api.alsa.card.id = "ak4613" + } + # imx8mq + { + node.name = "~alsa_input.*" + api.alsa.card.id = "wm8524audio" + } + # rcarsound + { + node.name = "~alsa_input.*" + api.alsa.card.id = "rcarsound" + } + ] + actions = { + update-props = { + priority.driver = 2100 + priority.session = 2100 + } + } + } +] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf new file mode 100644 index 000000000..db5b20dc2 --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/30-AGL-bluetooth.conf @@ -0,0 +1,41 @@ +# Default AGL WirePlumber Bluetooth monitor configuration + +monitor.bluez.properties = { + ## HFP/HSP backend (default: native). + ## Available values: any, none, hsphfpd, ofono, native + bluez5.hfphsp-backend = "ofono" +} + +monitor.bluez.rules = [ + { + matches = [ + { + ## This matches all bluetooth devices. + device.name = "~bluez_card.*" + } + ] + actions = { + update-props = { + ## Auto-connect as headset/sink on start up or when only partial + ## profiles have connected. + bluez5.auto-connect = [ hfp_hf hsp_hs a2dp_sink ] + } + } + } + + # Make output a2dp stream nodes go through the Multimedia sink + # We cannot match on "media.class" here because this property + # is not known before the node is created + { + matches = [ + { + api.bluez5.profile = "a2dp-source" + } + ] + actions = { + update-props = { + media.role = "Multimedia" + } + } + } +] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf new file mode 100644 index 000000000..93687501c --- /dev/null +++ b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/50-AGL-pw-ic-ipc.conf @@ -0,0 +1,15 @@ +wireplumber.profiles = { + # Run on the "audio" instance, which runs the ALSA monitor on the host + audio = { + agl.script.pipewire-ic-ipc.alsa-suspend = required + } +} + +wireplumber.components = [ + # Mutes ALSA sinks when requested by pipewire-ic-ipc + { + name = alsa-suspend.lua, type = script/lua + provides = agl.script.pipewire-ic-ipc.alsa-suspend + requires = [ api.mixer ] + } +] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf deleted file mode 100644 index 9077e3f45..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.conf +++ /dev/null @@ -1,74 +0,0 @@ -# WirePlumber daemon context configuration # - -context.properties = { - ## Properties to configure the PipeWire context and some modules - - application.name = "WirePlumber Bluetooth" - log.level = 2 - wireplumber.script-engine = lua-scripting - wireplumber.export-core = true - - #mem.mlock-all = false - #support.dbus = true -} - -context.spa-libs = { - #<factory-name regex> = <library-name> - # - # Used to find spa factory names. It maps an spa factory name - # regular expression to a library name that should contain - # that factory. - # - api.bluez5.* = bluez5/libspa-bluez5 - audio.convert.* = audioconvert/libspa-audioconvert - support.* = support/libspa-support -} - -context.modules = [ - #{ name = <module-name> - # [ args = { <key> = <value> ... } ] - # [ flags = [ [ ifexists ] [ nofail ] ] - #} - # - # PipeWire modules to load. - # If ifexists is given, the module is ignored when it is not found. - # If nofail is given, module initialization failures are ignored. - # - - # The native communication protocol. - { name = libpipewire-module-protocol-native } - - # Allows creating nodes that run in the context of the - # client. Is used by all clients that want to provide - # data to PipeWire. - { name = libpipewire-module-client-node } - - # Allows creating devices that run in the context of the - # client. Is used by the session manager. - { name = libpipewire-module-client-device } - - # Makes a factory for wrapping nodes in an adapter with a - # converter and resampler. - { name = libpipewire-module-adapter } - - # Allows applications to create metadata objects. It creates - # a factory for Metadata objects. - { name = libpipewire-module-metadata } - - # Provides factories to make session manager objects. - { name = libpipewire-module-session-manager } -] - -wireplumber.components = [ - #{ name = <component-name>, type = <component-type> } - # - # WirePlumber components to load - # - - # The lua scripting engine - { name = libwireplumber-module-lua-scripting, type = module } - - # The lua configuration file - # Other components are loaded from there - { name = bluetooth.lua, type = config/lua } -] diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua deleted file mode 100644 index 530f4cc62..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/bluetooth.lua.d/30-bluez-monitor.lua +++ /dev/null @@ -1,110 +0,0 @@ --- Bluez monitor config file -- - -bluez_monitor = {} - -bluez_monitor.properties = { - -- These features do not work on all headsets, so they are enabled - -- by default based on the hardware database. They can also be - -- forced on/off for all devices by the following options: - - --["bluez5.enable-sbc-xq"] = true, - --["bluez5.enable-msbc"] = true, - --["bluez5.enable-hw-volume"] = true, - - -- See bluez-hardware.conf for the hardware database. - - -- Enabled headset roles (default: [ hsp_hs hfp_ag ]), this - -- property only applies to native backend. Currently some headsets - -- (Sony WH-1000XM3) are not working with both hsp_ag and hfp_ag - -- enabled, disable either hsp_ag or hfp_ag to work around it. - -- - -- Supported headset roles: hsp_hs (HSP Headset), - -- hsp_ag (HSP Audio Gateway), - -- hfp_hf (HFP Hands-Free), - -- hfp_ag (HFP Audio Gateway) - ["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]", - - -- Enabled A2DP codecs (default: all). - --["bluez5.codecs"] = "[ sbc sbc_xq aac ldac aptx aptx_hd aptx_ll aptx_ll_duplex faststream faststream_duplex ]", - - -- HFP/HSP backend (default: native). - -- Available values: any, none, hsphfpd, ofono, native - ["bluez5.hfphsp-backend"] = "ofono", - - -- Properties for the A2DP codec configuration - --["bluez5.default.rate"] = 48000, - --["bluez5.default.channels"] = 2, -} - -bluez_monitor.rules = { - -- An array of matches/actions to evaluate. - { - -- Rules for matching a device or node. It is an array of - -- properties that all need to match the regexp. If any of the - -- matches work, the actions are executed for the object. - matches = { - { - -- This matches all cards. - { "device.name", "matches", "bluez_card.*" }, - }, - }, - -- Apply properties on the matched object. - apply_properties = { - -- Auto-connect device profiles on start up or when only partial - -- profiles have connected. Disabled by default if the property - -- is not specified. - --["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]", - ["bluez5.auto-connect"] = "[ hfp_hf hsp_hs a2dp_sink ]", - - -- Hardware volume control (default: [ hfp_ag hsp_ag a2dp_source ]) - --["bluez5.hw-volume"] = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]", - - -- LDAC encoding quality - -- Available values: auto (Adaptive Bitrate, default) - -- hq (High Quality, 990/909kbps) - -- sq (Standard Quality, 660/606kbps) - -- mq (Mobile use Quality, 330/303kbps) - --["bluez5.a2dp.ldac.quality"] = "auto", - - -- AAC variable bitrate mode - -- Available values: 0 (cbr, default), 1-5 (quality level) - --["bluez5.a2dp.aac.bitratemode"] = 0, - - -- Profile connected first - -- Available values: a2dp-sink (default), headset-head-unit - --["device.profile"] = "a2dp-sink", - }, - }, - { - -- Make output hsp/hfp stream nodes go through the Communication endpoint - -- Unfortunately we cannot match on "media.class" because this property - -- is not known before the node is created - matches = { - { - { "api.bluez5.profile", "equals", "headset-audio-gateway" }, - { "factory.name", "matches", "*source*" }, - }, - }, - apply_properties = { - ["media.role"] = "Communication", - }, - }, - { - -- Make output a2dp stream nodes go through the Multimedia endpoint - -- Unfortunately we cannot match on "media.class" because this property - -- is not known before the node is created - matches = { - { - { "api.bluez5.profile", "equals", "a2dp-source" }, - }, - }, - apply_properties = { - ["media.role"] = "Multimedia", - }, - }, -} - -load_monitor("bluez", { - properties = bluez_monitor.properties, - rules = bluez_monitor.rules, -}) diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua deleted file mode 100644 index d07f7ab85..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-alsa-monitor.lua +++ /dev/null @@ -1,151 +0,0 @@ --- ALSA monitor config file -- - -alsa_monitor = {} - -alsa_monitor.properties = { - ["alsa.jack-device"] = false, - ["alsa.reserve"] = false, -} - -alsa_monitor.rules = { - -- enable ACP (PulseAudio-like profiles) - { - matches = { - { - { "device.name", "matches", "alsa_card.*" }, - }, - }, - apply_properties = { - ["api.alsa.use-acp"] = true, - }, - }, - - -- - -- Bump priority of well-known output devices - -- Higher priority means it gets selected as the default if it's present - -- - - -- USB card - { - matches = { - { - { "node.name", "matches", "alsa_output.*" }, - { "api.alsa.card.driver", "=", "USB-Audio" }, - }, - }, - apply_properties = { - ["priority.driver"] = 1300, - ["priority.session"] = 1300, - } - }, - - -- fiberdyne amp - { - matches = { - { - { "node.name", "matches", "alsa_output.*" }, - { "api.alsa.card.id", "=", "ep016ch" }, - }, - }, - apply_properties = { - ["priority.driver"] = 1200, - ["priority.session"] = 1200, - } - }, - - -- well-known internal devices - { - matches = { - { - -- ak4613 - { "node.name", "matches", "alsa_output.*" }, - { "api.alsa.card.id", "=", "ak4613" }, - { "api.alsa.pcm.device", "=", "0" }, - }, - { - -- imx8mq - { "node.name", "matches", "alsa_output.*" }, - { "api.alsa.card.id", "=", "wm8524audio" }, - }, - { - -- rcarsound - { "node.name", "matches", "alsa_output.*" }, - { "api.alsa.card.id", "=", "rcarsound" }, - { "api.alsa.pcm.device", "=", "0" }, - }, - { - -- rpi3 - { "node.name", "matches", "alsa_output.*" }, - { "api.alsa.pcm.name", "=", "bcm2835 ALSA" }, - }, - }, - apply_properties = { - ["priority.driver"] = 1100, - ["priority.session"] = 1100, - } - }, - - -- - -- Same for input devices - -- - - -- USB card - { - matches = { - { - { "node.name", "matches", "alsa_input.*" }, - { "api.alsa.card.driver", "=", "USB-Audio" }, - }, - }, - apply_properties = { - ["priority.driver"] = 2300, - ["priority.session"] = 2300, - } - }, - - -- microchip mic - { - matches = { - { - { "node.name", "matches", "alsa_input.*" }, - { "api.alsa.card.id", "=", "ep811ch" }, - }, - }, - apply_properties = { - ["priority.driver"] = 2200, - ["priority.session"] = 2200, - } - }, - - -- well-known internal devices - { - matches = { - { - -- ak4613 - { "node.name", "matches", "alsa_input.*" }, - { "api.alsa.card.id", "=", "ak4613" }, - }, - { - -- imx8mq - { "node.name", "matches", "alsa_input.*" }, - { "api.alsa.card.id", "=", "wm8524audio" }, - }, - { - -- rcarsound - { "node.name", "matches", "alsa_input.*" }, - { "api.alsa.card.id", "=", "rcarsound" }, - }, - }, - apply_properties = { - ["priority.driver"] = 2100, - ["priority.session"] = 2100, - } - }, -} - -function alsa_monitor.enable() - load_monitor("alsa", { - properties = alsa_monitor.properties, - rules = alsa_monitor.rules, - }) -end diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua deleted file mode 100644 index a4eb58ac8..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/30-v4l2-monitor.lua +++ /dev/null @@ -1,48 +0,0 @@ --- V4L2 monitor config file -- - -v4l2_monitor = {} -v4l2_monitor.properties = {} - -v4l2_monitor.rules = { - -- An array of matches/actions to evaluate. - { - -- Rules for matching a device or node. It is an array of - -- properties that all need to match the regexp. If any of the - -- matches work, the actions are executed for the object. - matches = { - { - -- This matches all cards. - { "device.name", "matches", "v4l2_device.*" }, - }, - }, - -- Apply properties on the matched object. - apply_properties = { - -- ["device.nick"] = "My Device", - }, - }, - { - matches = { - { - -- Matches all sources. - { "node.name", "matches", "v4l2_input.*" }, - }, - { - -- Matches all sinks. - { "node.name", "matches", "v4l2_output.*" }, - }, - }, - apply_properties = { - --["node.nick"] = "My Node", - --["priority.driver"] = 100, - --["priority.session"] = 100, - --["node.pause-on-idle"] = false, - }, - }, -} - -function v4l2_monitor.enable() - load_monitor("v4l2", { - properties = v4l2_monitor.properties, - rules = v4l2_monitor.rules, - }) -end diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua deleted file mode 100644 index e0d332422..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/40-device-defaults.lua +++ /dev/null @@ -1,26 +0,0 @@ -device_defaults = {} - -device_defaults.properties = { - -- store preferences to the file system and restore them at startup; - -- when set to false, default nodes and routes are selected based on - -- their priorities and any runtime changes do not persist after restart - ["use-persistent-storage"] = false, -} - -function device_defaults.enable() - -- Selects appropriate default nodes and enables saving and restoring them - load_module("default-nodes", device_defaults.properties) - - -- Selects appropriate default routes ("ports" in pulseaudio terminology) - -- and enables saving and restoring them together with - -- their properties (per-route/port volume levels, channel maps, etc) - load_script("policy-device-routes.lua", device_defaults.properties) - - if device_defaults.properties["use-persistent-storage"] then - -- Enables functionality to save and restore default device profiles - load_module("default-profile") - - -- Save and restore stream-specific properties - load_script("restore-stream.lua") - end -end diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua deleted file mode 100644 index ecb7da476..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/host.lua.d/90-enable-all.lua +++ /dev/null @@ -1,20 +0,0 @@ --- Provide the "default" pw_metadata, which stores --- dynamic properties of pipewire objects in RAM -load_module("metadata") - --- Load devices -alsa_monitor.enable() -v4l2_monitor.enable() - --- Track/store/restore user choices about devices -device_defaults.enable() - --- Automatically suspends idle nodes after 3 seconds -load_script("suspend-node.lua") - --- Automatically sets device profiles to 'On' -load_script("policy-device-profile.lua") - --- Mute ALSA sinks when requested by pipewire-ic-ipc -load_module("mixer-api") -load_script("alsa-suspend.lua") diff --git a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf b/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf deleted file mode 100644 index 46ad11302..000000000 --- a/meta-pipewire/recipes-multimedia/wireplumber/wireplumber-config-agl/wireplumber.conf +++ /dev/null @@ -1,115 +0,0 @@ -# WirePlumber daemon context configuration # - -context.properties = { - ## Properties to configure the PipeWire context and some modules - - # 1=error/critical/warning, 2=message, 3=info, 4=debug, 5=trace - log.level = 2 - - wireplumber.script-engine = lua-scripting -} - -context.spa-libs = { - #<factory-name regex> = <library-name> - # - # Used to find spa factory names. It maps an spa factory name - # regular expression to a library name that should contain - # that factory. - # - api.alsa.* = alsa/libspa-alsa - api.bluez5.* = bluez5/libspa-bluez5 - api.v4l2.* = v4l2/libspa-v4l2 - api.libcamera.* = libcamera/libspa-libcamera - audio.convert.* = audioconvert/libspa-audioconvert - support.* = support/libspa-support -} - -context.modules = [ - #{ name = <module-name> - # [ args = { <key> = <value> ... } ] - # [ flags = [ [ ifexists ] [ nofail ] ] - #} - # - # PipeWire modules to load. - # If ifexists is given, the module is ignored when it is not found. - # If nofail is given, module initialization failures are ignored. - # - - # The native communication protocol. - { name = libpipewire-module-protocol-native } - - # Allows creating nodes that run in the context of the - # client. Is used by all clients that want to provide - # data to PipeWire. - { name = libpipewire-module-client-node } - - # Allows creating devices that run in the context of the - # client. Is used by the session manager. - { name = libpipewire-module-client-device } - - # Makes a factory for wrapping nodes in an adapter with a - # converter and resampler. - { name = libpipewire-module-adapter } - - # Allows applications to create metadata objects. It creates - # a factory for Metadata objects. - { name = libpipewire-module-metadata } - - # Provides factories to make session manager objects. - { name = libpipewire-module-session-manager } - - { name = libpipewire-module-filter-chain - args = { - node.description = "Equalizer Sink" - media.name = "Equalizer Sink" - filter.graph = { - nodes = [ - { - type = builtin - name = bass - label = bq_lowshelf - # the cut off freq of the bass filter can be adjusted here. - control = { "Freq" = 250.0 "Q" = 1.0 "Gain" = 0.0 } - } - { - type = builtin - name = treble - label = bq_peaking - # the cut off freq of the treble filter can be adjusted here. - control = { "Freq" = 6000.0 "Q" = 1.0 "Gain" = 0.0 } - } - ] - links = [ - { output = "bass:Out" input = "treble:In" } - ] - } - audio.channels = 2 - audio.position = [ FL FR ] - capture.props = { - node.name = "eq-sink" - media.class = Audio/Sink - # select the endpoint to which the node is attached - target.endpoint = "endpoint.multimedia" - node.passive = true - } - playback.props = { - node.name = "eq-output-stream" - node.passive = true - } - } - } -] - -wireplumber.components = [ - #{ name = <component-name>, type = <component-type> } - # - # WirePlumber components to load - # - - # The lua scripting engine - { name = libwireplumber-module-lua-scripting, type = module } - - # The lua configuration file(s) - # Other components are loaded from there - { name = host.lua, type = config/lua } -] |