diff --git a/Makefile b/Makefile index 9321a0b7..5aa78505 100644 --- a/Makefile +++ b/Makefile @@ -12,8 +12,8 @@ clean: run: all WIREPLUMBER_MODULE_DIR=build/modules \ - WIREPLUMBER_CONFIG_FILE=src/wireplumber.conf \ - WIREPLUMBER_CONFIG_DIR=src/wireplumber \ + WIREPLUMBER_CONFIG_FILE=src/config/wireplumber.conf \ + WIREPLUMBER_CONFIG_DIR=src/config \ $(DBG) ./build/src/wireplumber test: all diff --git a/src/wireplumber/audio-sink.endpoint b/src/config/00-audio-sink.endpoint similarity index 84% rename from src/wireplumber/audio-sink.endpoint rename to src/config/00-audio-sink.endpoint index 0bf52ab6..25659f83 100644 --- a/src/wireplumber/audio-sink.endpoint +++ b/src/config/00-audio-sink.endpoint @@ -5,6 +5,6 @@ properties = [ ] [endpoint] -direction = "sink" type = "pw-audio-softdsp-endpoint" -streams = "default.streams" +direction = "sink" +streams = "playback.streams" diff --git a/src/wireplumber/audio-source.endpoint b/src/config/00-audio-source.endpoint similarity index 85% rename from src/wireplumber/audio-source.endpoint rename to src/config/00-audio-source.endpoint index 6aedc5c1..b86b80a3 100644 --- a/src/wireplumber/audio-source.endpoint +++ b/src/config/00-audio-source.endpoint @@ -5,6 +5,6 @@ properties = [ ] [endpoint] -direction = "source" type = "pw-audio-softdsp-endpoint" -streams = "default.streams" +direction = "source" +streams = "capture.streams" diff --git a/src/config/00-default-input-audio.endpoint-link b/src/config/00-default-input-audio.endpoint-link new file mode 100644 index 00000000..4b70dc89 --- /dev/null +++ b/src/config/00-default-input-audio.endpoint-link @@ -0,0 +1,7 @@ +[match-endpoint] +priority = 0 +direction = "sink" +media_class = "Stream/Input/Audio" + +[endpoint-link] +keep = false diff --git a/src/config/00-default-output-audio.endpoint-link b/src/config/00-default-output-audio.endpoint-link new file mode 100644 index 00000000..5d6428f9 --- /dev/null +++ b/src/config/00-default-output-audio.endpoint-link @@ -0,0 +1,7 @@ +[match-endpoint] +priority = 0 +direction = "source" +media_class = "Stream/Output/Audio" + +[endpoint-link] +keep = false diff --git a/src/wireplumber/stream-input-audio.endpoint b/src/config/00-stream-input-audio.endpoint similarity index 100% rename from src/wireplumber/stream-input-audio.endpoint rename to src/config/00-stream-input-audio.endpoint diff --git a/src/wireplumber/stream-output-audio.endpoint b/src/config/00-stream-output-audio.endpoint similarity index 100% rename from src/wireplumber/stream-output-audio.endpoint rename to src/config/00-stream-output-audio.endpoint diff --git a/src/config/01-hw:0,0-audio-sink.endpoint b/src/config/01-hw:0,0-audio-sink.endpoint new file mode 100644 index 00000000..a0e702e1 --- /dev/null +++ b/src/config/01-hw:0,0-audio-sink.endpoint @@ -0,0 +1,12 @@ +[match-node] +priotity = 1 +properties = [ + { name = "media.class", value = "Audio/Sink" }, + { name = "api.alsa.path", value = "hw:0,0" }, +] + +[endpoint] +type = "pw-audio-softdsp-endpoint" +direction = "sink" +streams = "playback.streams" +priority = 1 diff --git a/src/config/01-hw:0,0-audio-source.endpoint b/src/config/01-hw:0,0-audio-source.endpoint new file mode 100644 index 00000000..fa820b14 --- /dev/null +++ b/src/config/01-hw:0,0-audio-source.endpoint @@ -0,0 +1,12 @@ +[match-node] +priotity = 1 +properties = [ + { name = "media.class", value = "Audio/Source" }, + { name = "api.alsa.path", value = "hw:0,0" }, +] + +[endpoint] +type = "pw-audio-softdsp-endpoint" +direction = "source" +streams = "capture.streams" +priority = 1 diff --git a/src/config/70-usb-audio-sink.endpoint b/src/config/70-usb-audio-sink.endpoint new file mode 100644 index 00000000..b69a1555 --- /dev/null +++ b/src/config/70-usb-audio-sink.endpoint @@ -0,0 +1,12 @@ +[match-node] +priotity = 70 +properties = [ + { name = "media.class", value = "Audio/Sink" }, + { name = "api.alsa.card.driver", value = "USB-Audio" }, +] + +[endpoint] +type = "pw-audio-softdsp-endpoint" +direction = "sink" +streams = "playback.streams" +priority = 70 diff --git a/src/config/70-usb-audio-source.endpoint b/src/config/70-usb-audio-source.endpoint new file mode 100644 index 00000000..052dcc8d --- /dev/null +++ b/src/config/70-usb-audio-source.endpoint @@ -0,0 +1,12 @@ +[match-node] +priotity = 70 +properties = [ + { name = "media.class", value = "Audio/Source" }, + { name = "api.alsa.card.driver", value = "USB-Audio" }, +] + +[endpoint] +type = "pw-audio-softdsp-endpoint" +direction = "source" +streams = "capture.streams" +priority = 70 diff --git a/src/config/README.md b/src/config/README.md new file mode 100644 index 00000000..169e3b29 --- /dev/null +++ b/src/config/README.md @@ -0,0 +1,43 @@ +WirePlumber Configuration +=== + +This directory contains WirePlumber's configuration files. +There are 4 kinds of files: + +* `wireplumber.conf` + + This file lists the modules that are being loaded by WirePlumber. + +* `*.endpoint` files + + These files contain rules to create endpoints when WirePlumber detects + new nodes in the pipewire graph. They are TOML v0.5 files. + + The `00-stream-*.endpoint` files contain rules to create endpoints for the + nodes of the client applications that connect to pipewire. You should not + change or remove those unless you know what you are doing. + + The rest of the `.endpoint` files contain rules to create endpoints for + ALSA device nodes. + + TODO: more info + +* `*.endpoint-link` files + + These files contain rules to link endpoints with each other. They are part + of the policy module. + +* `*.streams` files + + These files contain a list of streams and their priorities. + + The names of the streams are used to create streams on new endpoints. + In order to use a specific list of streams for a specific endpoint, + the relevant `.endpoint` file that contains the creation rule for that + endpoint must reference the `.streams` file. + + The stream priorities are being interpreted by the policy module to apply + restrictions on which app can use the device at a given time. + + The `media.role` of the application's stream is matched against the names + of the streams when applying policy. diff --git a/src/config/capture.streams b/src/config/capture.streams new file mode 100644 index 00000000..a2cff83e --- /dev/null +++ b/src/config/capture.streams @@ -0,0 +1,3 @@ +[[streams]] +name = "Capture" +priority = 1 diff --git a/src/wireplumber/default.streams b/src/config/playback.streams similarity index 100% rename from src/wireplumber/default.streams rename to src/config/playback.streams diff --git a/src/wireplumber.conf b/src/config/wireplumber.conf similarity index 100% rename from src/wireplumber.conf rename to src/config/wireplumber.conf diff --git a/src/meson.build b/src/meson.build index 2b6d9926..d697e201 100644 --- a/src/meson.build +++ b/src/meson.build @@ -3,12 +3,10 @@ wp_sources = [ ] wireplumber_config_file = join_paths(wireplumber_config_dir, 'wireplumber.conf') -install_data('wireplumber.conf', - install_dir: wireplumber_config_dir -) -install_subdir('wireplumber', - install_dir: wireplumber_config_dir +install_subdir('config', + install_dir: wireplumber_config_dir, + strip_directory : true ) executable('wireplumber', diff --git a/src/wireplumber/bluealsa-input-audio.endpoint-link b/src/wireplumber/bluealsa-input-audio.endpoint-link deleted file mode 100644 index dc532da8..00000000 --- a/src/wireplumber/bluealsa-input-audio.endpoint-link +++ /dev/null @@ -1,15 +0,0 @@ -[match-endpoint] -priority = 75 -direction = "sink" -name = "bluealsa*" -media_class = "Stream/Input/Audio" - -[target-endpoint] -media_class = "Audio/Source" -stream = "Multimedia" -properties = [ - { name = "api.alsa.path", value = "hw:0,0" }, -] - -[endpoint-link] -keep = true diff --git a/src/wireplumber/bluealsa-output-audio.endpoint-link b/src/wireplumber/bluealsa-output-audio.endpoint-link deleted file mode 100644 index a03ce56f..00000000 --- a/src/wireplumber/bluealsa-output-audio.endpoint-link +++ /dev/null @@ -1,15 +0,0 @@ -[match-endpoint] -priority = 75 -direction = "source" -name = "bluealsa*" -media_class = "Stream/Output/Audio" - -[target-endpoint] -media_class = "Audio/Sink" -stream = "Multimedia" -properties = [ - { name = "api.alsa.path", value = "hw:0,0" }, -] - -[endpoint-link] -keep = true diff --git a/src/wireplumber/default-input-audio.endpoint-link b/src/wireplumber/default-input-audio.endpoint-link deleted file mode 100644 index bac71690..00000000 --- a/src/wireplumber/default-input-audio.endpoint-link +++ /dev/null @@ -1,13 +0,0 @@ -[match-endpoint] -priority = 50 -direction = "sink" -media_class = "Stream/Input/Audio" - -[target-endpoint] -media_class = "Audio/Source" -properties = [ - { name = "api.alsa.path", value = "hw:0,0" }, -] - -[endpoint-link] -keep = false diff --git a/src/wireplumber/default-output-audio.endpoint-link b/src/wireplumber/default-output-audio.endpoint-link deleted file mode 100644 index 5fb84524..00000000 --- a/src/wireplumber/default-output-audio.endpoint-link +++ /dev/null @@ -1,13 +0,0 @@ -[match-endpoint] -priority = 50 -direction = "source" -media_class = "Stream/Output/Audio" - -[target-endpoint] -media_class = "Audio/Sink" -properties = [ - { name = "api.alsa.path", value = "hw:0,0" }, -] - -[endpoint-link] -keep = false