context: add library.use-fallback option

Normally, when loading a plugin feature, often a library.name property
is given as well. If the feature to load is not explicitly listed in
context.spa-libs, the library.name is used a fallback library.

Add an option to ignore this library.name and only use the
context.spa-libs entries. This makes it possible to only load explicitly
listed features in the config file and makes it possible to lock down
what plugins can be loaded.

Set the option to true by default for now, which keeps the existing
behaviour of using the fallback library. Add some more entries to the
context.spa-libs in case the option is switched off to make things
work.

Set the option to false for the minimal.conf.
This commit is contained in:
Wim Taymans 2026-05-08 09:57:52 +02:00
parent ddab12a5aa
commit b3257ae425
7 changed files with 72 additions and 17 deletions

View file

@ -13,6 +13,7 @@ context.properties = {
#library.name.system = support/libspa-support
#context.data-loop.library.name.system = support/libspa-support
#support.dbus = true
library.use-fallback = false
#link.max-buffers = 64
link.max-buffers = 16 # version < 3 clients can't handle more
#mem.warn-mlock = false
@ -70,10 +71,28 @@ context.spa-libs = {
# regular expression to a library name that should contain
# that factory.
#
support.* = support/libspa-support
audio.convert.* = audioconvert/libspa-audioconvert
audio.adapt = audioconvert/libspa-audioconvert
api.alsa.* = alsa/libspa-alsa
support.* = support/libspa-support
#api.v4l2.* = v4l2/libspa-v4l2
#api.libcamera.* = libcamera/libspa-libcamera
#api.bluez5.* = bluez5/libspa-bluez5
#api.vulkan.* = vulkan/libspa-vulkan
#video.convert.* = videoconvert/libspa-videoconvert
#video.adapt = videoconvert/libspa-videoconvert
audio.mixer.* = audiomixer/libspa-audiomixer
control.mixer = control/libspa-mixer
#audio.aec = aec/libspa-aec-webrtc
#filter.graph.plugin.ffmpeg = filter-graph/libspa-filter-graph-plugin-ffmpeg
#filter.graph.plugin.onnx = filter-graph/libspa-filter-graph-plugin-onnx
#filter.graph.plugin.pipe = blocked
#filter.graph.plugin.ebur128 = filter-graph/libspa-filter-graph-plugin-ebur128
#filter.graph.plugin.sofa = filter-graph/libspa-filter-graph-plugin-sofa
#filter.graph.plugin.ladspa = filter-graph/libspa-filter-graph-plugin-ladspa
#filter.graph.plugin.lv2 = filter-graph/libspa-filter-graph-plugin-lv2
#filter.graph.plugin.builtin = filter-graph/libspa-filter-graph-plugin-builtin
#filter.graph = filter-graph/libspa-filter-graph
}
context.modules = [

View file

@ -15,17 +15,29 @@ context.properties = {
#mem.mlock-all = false
#log.level = 2
#rlimit.nofile = -1
#library.use-fallback = true
#default.clock.quantum-limit = 8192
}
context.spa-libs = {
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
audio.convert.* = audioconvert/libspa-audioconvert
audio.adapt = audioconvert/libspa-audioconvert
audio.mixer = audiomixer/libspa-audiomixer
audio.aec = aec/libspa-aec-webrtc
# because the pulse server allows dynamic loading of streams and modules
# inside the server, we must be careful with the filter-graph. Only allow
# LADSPA filters.
filter.graph.plugin.pipe = blocked
# inside the server, we must be careful with the filter-graph.
#filter.graph.plugin.ffmpeg = filter-graph/libspa-filter-graph-plugin-ffmpeg
#filter.graph.plugin.onnx = filter-graph/libspa-filter-graph-plugin-onnx
#filter.graph.plugin.pipe = filter-graph/libspa-filter-graph-plugin-pipe
filter.graph.plugin.pipe = blocked
#filter.graph.plugin.ebur128 = filter-graph/libspa-filter-graph-plugin-ebur128
#filter.graph.plugin.sofa = filter-graph/libspa-filter-graph-plugin-sofa
filter.graph.plugin.ladspa = filter-graph/libspa-filter-graph-plugin-ladspa
#filter.graph.plugin.lv2 = filter-graph/libspa-filter-graph-plugin-lv2
filter.graph.plugin.builtin = filter-graph/libspa-filter-graph-plugin-builtin
filter.graph = filter-graph/libspa-filter-graph
}
context.modules = [

View file

@ -12,6 +12,7 @@ context.properties = {
## Configure properties in the system.
#library.name.system = support/libspa-support
#context.data-loop.library.name.system = support/libspa-support
#library.use-fallback = true
#support.dbus = true
#link.max-buffers = 64
link.max-buffers = 16 # version < 3 clients can't handle more
@ -75,17 +76,29 @@ context.spa-libs = {
# regular expression to a library name that should contain
# that factory.
#
support.* = support/libspa-support
audio.convert.* = audioconvert/libspa-audioconvert
avb.* = avb/libspa-avb
audio.adapt = audioconvert/libspa-audioconvert
api.alsa.* = alsa/libspa-alsa
api.v4l2.* = v4l2/libspa-v4l2
api.libcamera.* = libcamera/libspa-libcamera
api.bluez5.* = bluez5/libspa-bluez5
api.vulkan.* = vulkan/libspa-vulkan
api.jack.* = jack/libspa-jack
support.* = support/libspa-support
#api.vulkan.* = vulkan/libspa-vulkan
video.convert.* = videoconvert/libspa-videoconvert
#filter.graph = filter-graph/libspa-filter-graph
video.adapt = videoconvert/libspa-videoconvert
audio.mixer.* = audiomixer/libspa-audiomixer
control.mixer = control/libspa-mixer
audio.aec = aec/libspa-aec-webrtc
#filter.graph.plugin.ffmpeg = filter-graph/libspa-filter-graph-plugin-ffmpeg
filter.graph.plugin.onnx = filter-graph/libspa-filter-graph-plugin-onnx
#filter.graph.plugin.pipe = filter-graph/libspa-filter-graph-plugin-pipe
filter.graph.plugin.pipe = blocked
filter.graph.plugin.ebur128 = filter-graph/libspa-filter-graph-plugin-ebur128
filter.graph.plugin.sofa = filter-graph/libspa-filter-graph-plugin-sofa
filter.graph.plugin.ladspa = filter-graph/libspa-filter-graph-plugin-ladspa
filter.graph.plugin.lv2 = filter-graph/libspa-filter-graph-plugin-lv2
filter.graph.plugin.builtin = filter-graph/libspa-filter-graph-plugin-builtin
filter.graph = filter-graph/libspa-filter-graph
#videotestsrc = videotestsrc/libspa-videotestsrc
#audiotestsrc = audiotestsrc/libspa-audiotestsrc
}