wireplumber merge requestshttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests2022-04-04T10:12:44Zhttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/350tests: Add tests for WpSettings object2022-04-04T10:12:44ZAshok Sidipotutests: Add tests for WpSettings object- settings.c tests conf file loading & parsing, metadata updates,
wpsetttings object creation and its API.
- settings.lua tests the API from lua scripts.
- Add a sample settings.conf file, this file contains sections copied
over from...- settings.c tests conf file loading & parsing, metadata updates,
wpsetttings object creation and its API.
- settings.lua tests the API from lua scripts.
- Add a sample settings.conf file, this file contains sections copied
over from client.conf along with the settings section. Add a file
each for wp side and lua side of scripts.
- Make changes in base test infrastructure to take a custom conf file.
- Enhance the wp_settings_get_instance_api() to be take metadata_name
parameter. So, Wpsetttings is now a singleton instance for a given
metadata file.
- Enhance the m-settings module also to be take metadata_name parameter.
this is handy for lua side of tests as its cumbersome to do this is
lua.Ashok SidipotuAshok Sidipotuhttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/370Draft: default nodes module fix for disabled nodes2022-05-20T11:18:22ZJulian Bouzasjulian.bouzas@collabora.comDraft: default nodes module fix for disabled nodesCurrently, if a user disables a node in `50-alsa-config.lua` with the following property:
["node.disabled"] = "true"
The default nodes module will never find a default node, not allowing capture or playback to work at all in wirep...Currently, if a user disables a node in `50-alsa-config.lua` with the following property:
["node.disabled"] = "true"
The default nodes module will never find a default node, not allowing capture or playback to work at all in wireplumber.
This is because the default nodes module always waits for all the device nodes to be created, avoiding audio glitches when changing the default node and device profile quickly (eg Gnome Sound Settings). If a node has been disabled, the default nodes module will wait forever because the disable node is never activated, leading to wireplumber not being able to play or capture anything because it thinks the nodes are not ready.
To fix this issue, the `nodes_ready()` function from the default nodes module has been improved to ignore disabled nodes, so the following changes have been made:
- The nodes are always created and stored in the managed objects list of the parent spa device, even if the node is disabled. The only difference with a disabled node is that it is never activated (never bound to pipewire).
- Similar to session items, the spa devices can be registered now so that they can be accessed anywhere in wireplumber, and they are automatically registered or removed when they are stored/removed in the managed objects list of the parent spa device.
- The default nodes module has another object manager that listens for spa devices. When the nodes_ready() function wants to check if there is a disabled node for a device, it gets the associated spa device, and counts all nodes that has the "node.disable" property set to `true`, which is later used to determine if all the nodes of a device are ready or not.
Fixes #279
PS: is it really worth doing all of this instead of just removing the `nodes_ready()` function and live with the audio glitch which only happens with Gnome Sound Settings?George KiagiadakisGeorge Kiagiadakishttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/376wpctl: Add option to query audio volumes2022-06-04T19:46:00ZVarnit Singhwpctl: Add option to query audio volumesHey!
I found out that there was no easy way to query volumes of audio sinks and sources from the CLI tool so i tried to add an option to do that. The functionality seems to be working. It is helpful for people who want to use wpctl to ge...Hey!
I found out that there was no easy way to query volumes of audio sinks and sources from the CLI tool so i tried to add an option to do that. The functionality seems to be working. It is helpful for people who want to use wpctl to getting volume levels from custom scripts like for people using WMs.
**Demo:**
Output for `$ wpctl`
![Screenshot_2022-06-01-11-22-43_1920x1080](/uploads/f9192604d2e0a31f101ead3afaa70495/Screenshot_2022-06-01-11-22-43_1920x1080.png)
Output for `$ wpctl get-volume`
![Screenshot_2022-06-01-11-24-44_1920x1080](/uploads/19c415a6317c93e88a64200b781ab9f0/Screenshot_2022-06-01-11-24-44_1920x1080.png)https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/382Fix bug in WpEvent referencing.2022-06-16T09:35:36ZAshok SidipotuFix bug in WpEvent referencing.while calling async execute closure, take a reference to the WpEvent
object before pushing it to the Lua stack. Otherwise Lua garbage
collector frees it, which leads to invalid memory access.while calling async execute closure, take a reference to the WpEvent
object before pushing it to the Lua stack. Otherwise Lua garbage
collector frees it, which leads to invalid memory access.Ashok SidipotuAshok Sidipotuhttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/393Update src/config/main.lua.d/50-alsa-config.lua2022-07-09T12:42:11ZAdolfo RodriguesUpdate src/config/main.lua.d/50-alsa-config.luaDefault values made my arch VM sound start cracking/distorting after a few minutes.Default values made my arch VM sound start cracking/distorting after a few minutes.https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/406Draft: Add module-default-routes, and simplify policy-device-routes.lua2022-09-13T20:10:47ZJulian Bouzasjulian.bouzas@collabora.comDraft: Add module-default-routes, and simplify policy-device-routes.luaThis MR essentially moves the logic that saves the default routes into a new `module-default-routes` C module, and refactors `policy-device-routes.lua` to use the new module API if the policy wants to restore a route. This code refactor ...This MR essentially moves the logic that saves the default routes into a new `module-default-routes` C module, and refactors `policy-device-routes.lua` to use the new module API if the policy wants to restore a route. This code refactor has several advantages:
- Simplifies `policy-device-profiles.lua` script.
- Keep consistency with `module-default-profiles` and `policy-device-profiles.lua`.
- Some users might not want to store/restore the default routes for a device. Instead, they might just want wireplumber to automatically select the best routes every time they change. This is now possible to do if we don't load `module-default-routes`, like `module-default-profiles`.
- Having a module API to get the default routes and their properties can also be useful in case one day we want to print information about them in `wpctl status`. More APIs could also be added such as "clear-routes" and "clear-route-properties" to clear the current stored routes with wpctl, similar to the `clear-default` sub-command.
- The new `module-default-routes` uses the WpSpaJson API to store the route properties. This is much cleaner than manually implementing a simple serializer in `policy-device-routes.lua` like before. Because of this, the information stored in the state file changes from this:
```
[default-routes]
alsa_card.pci-0000_00_1f.3:output:analog-output-headphones:channelMap=FL;FR;
alsa_card.pci-0000_00_1f.3:output:analog-output-headphones:channelVolumes=0.39999160170555;0.39999160170555;
alsa_card.pci-0000_00_1f.3:output:analog-output-headphones:latencyOffsetNsec=0
alsa_card.pci-0000_00_1f.3:output:analog-output-speaker:channelMap=FL;FR;
alsa_card.pci-0000_00_1f.3:output:analog-output-speaker:channelVolumes=0.043797824531794;0.043797824531794;
alsa_card.pci-0000_00_1f.3:output:analog-output-speaker:latencyOffsetNsec=0
alsa_card.pci-0000_00_1f.3:profile:output:analog-stereo+input:analog-stereo=analog-output-speaker;
alsa_card.pci-0000_00_1f.3:profile:output:analog-stereo=analog-output-speaker;
````
To like this:
```
[device-routes]
alsa_card.pci-0000_00_1f.3:output:analog-output-speaker={"mute":false, "channelVolumes":[0.209385, 0.209385], "volumeBase":1.000000, "volumeStep":0.000015, "channelMap":["FL", "FR"], "softVolumes":[1.000000, 1.000000], "latencyOffsetNsec":"0"}
alsa_card.pci-0000_00_1f.3:output:analog-output-headphones={"mute":false, "channelVolumes":[0.022422, 0.022422], "volumeBase":1.000000, "volumeStep":0.000015, "channelMap":["FL", "FR"], "softVolumes":[1.000000, 1.000000], "latencyOffsetNsec":"0"}
alsa_card.pci-0000_00_1f.3:profile:output:analog-stereo+input:analog-stereo=["analog-output-speaker"]
alsa_card.pci-0000_00_1f.3:profile:output:analog-stereo=["analog-output-speaker"]
````
The new format is stored in a different file (`device-routes` instead of `default-routes`) to avoid issues in case someone forgot to remove the old state files when updating wireplumber from `0.4` to `0.5`. Maybe we should also rename the `default-profiles` state file to `device-profiles` for the sake of consistency?
cc @ashoksJulian Bouzasjulian.bouzas@collabora.comJulian Bouzasjulian.bouzas@collabora.comhttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/430Draft: config: move commented configuration into their own override file2022-09-23T18:05:19ZJulian Bouzasjulian.bouzas@collabora.comDraft: config: move commented configuration into their own override fileThe override configuration files will be installed under /etc
@gkiagia @ashoks is there a better name for the configuration override file? I named it `wireplumber-override.conf` for now. Bear in mind that we cannot name the override fil...The override configuration files will be installed under /etc
@gkiagia @ashoks is there a better name for the configuration override file? I named it `wireplumber-override.conf` for now. Bear in mind that we cannot name the override files the same as base configuration files, this is because users might want to install them in the same directory by configuring meson's `datadir` and `sysconfigdir` with the same path.
Finally, there is currently no way to unload a module in `wireplumber-override.conf` that is loaded in `wireplumber.conf`. This is because array elements are appended and object properties are merged, so doing `wireplumber.components = []` won't do anything (it would append an empty array to the current wireplumber.components array, instead of resetting it). If a user wants to do that, he could copy `wireplumber.conf` into /etc, and then remove the module that he does not want to load from the array list in that file. I guess this is OK?
Another thing to keep in mind is to never add new settings in `wireplumber.conf`. Instead, they should always be added in `wireplumber-override.conf` commented, and wireplumber should always use a default value if the property is not found in WpSettings. Eventually, it would be great to have wireplumber working without any base configuration, and the users would just uncomment settings in the override configuration files to change functionality.Ashok SidipotuAshok Sidipotuhttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/404policy-node: Fix waiting logic in handleLinkable2022-10-25T09:58:10Zigreksterpolicy-node: Fix waiting logic in handleLinkableWhen `reconnect` is true and the target node is not yet available, `handleLinkable` should just return and not send an error.When `reconnect` is true and the target node is not yet available, `handleLinkable` should just return and not send an error.https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/442Draft: main: Use a GResource to load a default configuration2022-11-07T13:19:46ZJulian Bouzasjulian.bouzas@collabora.comDraft: main: Use a GResource to load a default configurationThis MR is a request for comments (RFC) for the next wireplumber 0.5 configuration refactoring.
The changes here will make the wireplumber configuration 100% optional by always loading the default configuration stored as a GResource in ...This MR is a request for comments (RFC) for the next wireplumber 0.5 configuration refactoring.
The changes here will make the wireplumber configuration 100% optional by always loading the default configuration stored as a GResource in the executable. This means that any of the changes in the configuration files (`wireplumber.conf` and `wireplumber.conf.d/*`) will always override the default configuration, and will always be installed under `/etc` (there won't be any configuration files under `/usr/share`). The configuration files are fully commented by default, and users can just uncomment/change settings when they want to change wireplumber's default behavior.
The point of this MR is to avoid wireplumber not working when the configuration changes with an update (eg when a new module is added).
You need the following pipewire branch to test this MR: https://gitlab.freedesktop.org/julian/pipewire/-/commits/default-config
cc @gkiagia @pvir @wtaymansAshok SidipotuAshok Sidipotuhttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/457v4l2 and libcamera fallback-only options2022-11-21T12:53:33ZJulian Bouzasjulian.bouzas@collabora.comv4l2 and libcamera fallback-only optionsThis MR adds an option in V4L2 monitor to not be created if libcamera monitor can be created, and another option in libcamera monitor to not be created if v4l2 monitor can be created.
This allows users to prioritize either video backend...This MR adds an option in V4L2 monitor to not be created if libcamera monitor can be created, and another option in libcamera monitor to not be created if v4l2 monitor can be created.
This allows users to prioritize either video backend if one is not installed.https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/467Deleted subprojects/lua.wrap, wp-uninstalled.sh, meson.build, Makefile,...2022-12-04T23:24:16ZFederica GovoniDeleted subprojects/lua.wrap, wp-uninstalled.sh, meson.build, Makefile,...Deleted subprojects/lua.wrap, wp-uninstalled.sh, meson.build, Makefile, meson_options.txt, .editorconfig, tests/common/base-test-fixture.h, tests/common/test-server.h, tests/examples/audiotestsrc-play.c, tests/examples/bt-pinephone.lua, ...Deleted subprojects/lua.wrap, wp-uninstalled.sh, meson.build, Makefile, meson_options.txt, .editorconfig, tests/common/base-test-fixture.h, tests/common/test-server.h, tests/examples/audiotestsrc-play.c, tests/examples/bt-pinephone.lua, tests/examples/bt-profile-switch.lua, tests/examples/filter-chain.lua, tests/examples/get-default-sink-volume.lua, tests/examples/interactive.lua, tests/examples/meson.build, tests/modules/file-monitor.c, tests/modules/meson.build, tests/modules/reserve-device.c, tests/modules/si-audio-adapter.c, tests/modules/si-audio-endpoint.c, tests/modules/si-node.c, tests/modules/si-standard-link.c, tests/wp/core.c, tests/wp/dbus.c, tests/wp/endpoint.c, tests/wp/factory.c, tests/wp/meson.build, tests/wp/metadata.c, tests/wp/object-interest.c, tests/wp/object-manager.c, tests/wp/properties.c, tests/wp/proxy.c, tests/wp/session-item.c, tests/wp/spa-json.c, tests/wp/spa-pod.c, tests/wp/spa-type.c, tests/wp/state.c, tests/wp/transition.c, tests/wplua/scripts/lib/testlib.lua, tests/wplua/scripts/async-activation.lua, tests/wplua/scripts/json.lua, tests/wplua/scripts/monitor-rules.lua, tests/wplua/scripts/pod.lua, tests/wplua/scripts/require.lua, tests/wplua/meson.build, tests/wplua/script-tester.c, tests/wplua/wplua.c, tests/meson.build, .gitlab-ci.yml, src/systemd/system/wireplumber@.service.in, src/tools/wpctl.c, src/systemd/system/meson.build, src/tools/meson.build, src/systemd/meson.build, src/systemd/user/meson.build, src/systemd/user/wireplumber@.service.in, src/config/bluetooth.lua.d/00-functions.lua, src/config/bluetooth.lua.d/30-bluez-monitor.lua, src/config/bluetooth.lua.d/50-bluez-config.lua, src/config/bluetooth.lua.d/90-enable-all.lua, src/config/common/00-functions.lua, src/config/main.lua.d/00-functions.lua, src/config/main.lua.d/20-default-access.lua, src/config/main.lua.d/30-alsa-monitor.lua, src/config/main.lua.d/30-libcamera-monitor.lua, src/config/main.lua.d/30-v4l2-monitor.lua, src/config/main.lua.d/40-device-defaults.lua, src/config/main.lua.d/40-stream-defaults.lua, src/config/main.lua.d/50-alsa-config.lua, src/config/main.lua.d/50-default-access-config.lua, src/config/main.lua.d/50-libcamera-config.lua, src/config/main.lua.d/50-v4l2-config.lua, src/config/main.lua.d/90-enable-all.lua, src/config/policy.lua.d/00-functions.lua, src/config/policy.lua.d/10-default-policy.lua, src/config/policy.lua.d/50-endpoints-config.lua, src/config/policy.lua.d/90-enable-all.lua, src/config/bluetooth.conf, src/config/main.conf, src/config/policy.conf, src/config/wireplumber.conf, src/scripts/access/access-default.lua, src/scripts/access/access-portal.lua, src/scripts/monitors/alsa-midi.lua, src/scripts/monitors/alsa.lua, src/scripts/monitors/bluez.lua, src/scripts/monitors/libcamera.lua, src/scripts/monitors/v4l2.lua, src/scripts/create-item.lua, src/scripts/fallback-sink.lua, src/scripts/intended-roles.lua, src/scripts/policy-bluetooth.lua, src/scripts/policy-device-profile.lua, src/scripts/policy-device-routes.lua, src/scripts/policy-endpoint-client-links.lua, src/scripts/policy-endpoint-client.lua, src/scripts/policy-endpoint-device.lua, src/scripts/policy-node.lua, src/scripts/restore-stream.lua, src/scripts/static-endpoints.lua, src/scripts/suspend-node.lua, src/systemd/system/wireplumber.service.in, src/tools/wpexec.c, src/main.c, src/meson.build, modules/module-file-monitor-api.c, modules/module-lua-scripting/api/api.c, modules/module-lua-scripting/api/api.lua, modules/module-lua-scripting/api/config.c, modules/module-lua-scripting/api/gresource.xml, modules/module-lua-scripting/api/json.c, modules/module-lua-scripting/api/meson.build, modules/module-lua-scripting/api/pod.c, modules/module-lua-scripting/api/require.c, modules/module-lua-scripting/wplua/boxed.c, modules/module-lua-scripting/wplua/closure.c, modules/module-lua-scripting/wplua/gresource.xml, modules/module-lua-scripting/wplua/meson.build, modules/module-lua-scripting/wplua/object.c, modules/module-lua-scripting/wplua/private.h, modules/module-lua-scripting/wplua/sandbox.lua, modules/module-lua-scripting/wplua/userdata.c, modules/module-lua-scripting/wplua/value.c, modules/module-lua-scripting/wplua/wplua.c, modules/module-lua-scripting/wplua/wplua.h, modules/module-lua-scripting/meson.build, modules/module-lua-scripting/module.c, modules/module-lua-scripting/script.c, modules/module-lua-scripting/script.h, modules/module-default-nodes/common.h, modules/module-reserve-device/meson.build, modules/module-reserve-device/org.freedesktop.ReserveDevice1.xml, modules/module-reserve-device/plugin.c, modules/module-reserve-device/plugin.h, modules/module-reserve-device/reserve-device.c, modules/module-reserve-device/reserve-device.h, modules/module-reserve-device/transitions.c, modules/module-reserve-device/transitions.h, modules/meson.build, modules/module-default-nodes-api.c, modules/module-default-nodes.c, modules/module-default-profile.c, modules/module-logind.c, modules/module-metadata.c, modules/module-mixer-api.c, modules/module-portal-permissionstore.c, modules/module-si-audio-adapter.c, modules/module-si-audio-endpoint.c, modules/module-si-node.c, modules/module-si-standard-link.c, lib/wp/private/pipewire-object-mixin.c, lib/wp/private/pipewire-object-mixin.h, lib/wp/private/registry.h, lib/wp/client.c, lib/wp/client.h, lib/wp/component-loader.c, lib/wp/component-loader.h, lib/wp/core.c, lib/wp/core.h, lib/wp/dbus.c, lib/wp/dbus.h, lib/wp/defs.h, lib/wp/device.c, lib/wp/device.h, lib/wp/endpoint.c, lib/wp/endpoint.h, lib/wp/error.c, lib/wp/error.h, lib/wp/factory.c, lib/wp/factory.h, lib/wp/global-proxy.c, lib/wp/global-proxy.h, lib/wp/iterator.c, lib/wp/iterator.h, lib/wp/link.c, lib/wp/link.h, lib/wp/log.c, lib/wp/log.h, lib/wp/meson.build, lib/wp/metadata.c, lib/wp/metadata.h, lib/wp/module.c, lib/wp/module.h, lib/wp/node.c, lib/wp/node.h, lib/wp/object-interest.c, lib/wp/object-interest.h, lib/wp/object-manager.c, lib/wp/object-manager.h, lib/wp/object.c, lib/wp/object.h, lib/wp/plugin.c, lib/wp/plugin.h, lib/wp/port.c, lib/wp/port.h, lib/wp/properties.c, lib/wp/properties.h, lib/wp/proxy-interfaces.c, lib/wp/proxy-interfaces.h, lib/wp/proxy.c, lib/wp/proxy.h, lib/wp/session-item.c, lib/wp/session-item.h, lib/wp/si-factory.c, lib/wp/si-factory.h, lib/wp/si-interfaces.c, lib/wp/si-interfaces.h, lib/wp/spa-json.c, lib/wp/spa-json.h, lib/wp/spa-pod.c, lib/wp/spa-pod.h, lib/wp/spa-type.c, lib/wp/spa-type.h, lib/wp/state.c, lib/wp/state.h, lib/wp/transition.c, lib/wp/transition.h, lib/wp/wp.c, lib/wp/wp.h, lib/wp/wpversion.h.in, lib/meson.build, docs/_static/custom.css, docs/rst/c_api/client_api.rst, docs/rst/c_api/component_loader_api.rst, docs/rst/c_api/core_api.rst, docs/rst/c_api/device_api.rst, docs/rst/c_api/endpoint_api.rst, docs/rst/c_api/global_proxy_api.rst, docs/rst/c_api/impl_module_api.rst, docs/rst/c_api/impl_node_api.rst, docs/rst/c_api/iterator_api.rst, docs/rst/c_api/link_api.rst, docs/rst/c_api/log_api.rst, docs/rst/c_api/meson.build, docs/rst/c_api/metadata_api.rst, docs/rst/c_api/node_api.rst, docs/rst/c_api/obj_interest_api.rst, docs/rst/c_api/obj_manager_api.rst, docs/rst/c_api/object_api.rst, docs/rst/c_api/pipewire_object_api.rst, docs/rst/c_api/plugin_api.rst, docs/rst/c_api/port_api.rst, docs/rst/c_api/properties_api.rst, docs/rst/c_api/proxy_api.rst, docs/rst/c_api/session_item_api.rst, docs/rst/c_api/si_factory_api.rst, docs/rst/c_api/si_interfaces_api.rst, docs/rst/c_api/spa_device_api.rst, docs/rst/c_api/spa_json_api.rst, docs/rst/c_api/spa_pod_api.rst, docs/rst/c_api/spa_type_api.rst, docs/rst/c_api/state_api.rst, docs/rst/c_api/transitions_api.rst, docs/rst/c_api/wp_api.rst, docs/rst/c_api/wperror_api.rst, docs/rst/configuration/access.rst, docs/rst/configuration/alsa.rst, docs/rst/configuration/bluetooth.rst, docs/rst/configuration/config_lua.rst, docs/rst/configuration/locations.rst, docs/rst/configuration/main.rst, docs/rst/configuration/meson.build, docs/rst/configuration/multi_instance.rst, docs/rst/configuration/policy.rst, docs/rst/lua_api/lua_core_api.rst, docs/rst/lua_api/lua_gobject.rst, docs/rst/lua_api/lua_introduction.rst, docs/rst/lua_api/lua_local_module_api.rst, docs/rst/lua_api/lua_log_api.rst, docs/rst/lua_api/lua_object_api.rst, docs/rst/lua_api/lua_object_interest_api.rst, docs/rst/lua_api/lua_object_manager_api.rst, docs/rst/lua_api/lua_proxies_api.rst, docs/rst/lua_api/lua_session_item_api.rst, docs/rst/lua_api/lua_spa_device_api.rst, docs/rst/lua_api/lua_spa_pod.rst, docs/rst/lua_api/meson.build, docs/rst/c_api.rst, docs/rst/community.rst, docs/rst/configuration.rst, docs/rst/contributing.rst, docs/rst/daemon-logging.rst, docs/rst/index.rst, docs/rst/installing-wireplumber.rst, docs/rst/lua_api.rst, docs/rst/meson.build, docs/rst/releases.rst, docs/rst/running-wireplumber-daemon.rst, docs/rst/testing.rst, docs/Doxyfile.in, docs/conf.py.in, docs/gen-api-gtkdoc.py, docs/meson.build, README.rst, NEWS.rst, .gitignore, LICENSE, po/LINGUAS, po/POTFILES.in, po/POTFILES.skip, po/af.po, po/as.po, po/be.po, po/bg.po, po/bn_IN.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/de_CH.po, po/el.po, po/eo.po, po/es.po, po/fa.po, po/fi.po, po/fr.po, po/gl.po, po/gu.po, po/he.po, po/hi.po, po/hr.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ka.po, po/kk.po, po/kn.po, po/ko.po, po/lt.po, po/meson.build, po/ml.po, po/mr.po, po/my.po, po/nl.po, po/nn.po, po/oc.po, po/or.po, po/pa.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/si.po, po/sk.po, po/sr.po, po/sr@latin.po, po/sv.po, po/ta.po, po/te.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.pohttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/469policy-node: destroy dont-reconnect nodes when handled2022-12-06T10:04:01ZWim Taymanspolicy-node: destroy dont-reconnect nodes when handledWhen we find a dont-reconnect node, don't just return but let the logic
continue to destroy the node when it was already linked before.
Fixes pavucontrol-qt infinite monitor streams.
see pipewire#1840When we find a dont-reconnect node, don't just return but let the logic
continue to destroy the node when it was already linked before.
Fixes pavucontrol-qt infinite monitor streams.
see pipewire#1840https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/446meson.build: simplify lua dependency lookup2023-01-14T18:55:13ZBarnabás Pőczemeson.build: simplify lua dependency lookup```
The `dependency()` function can accept multiple dependency
names since meson 0.60.0, so increase the required meson
version and use this feature. For consistency, "lua53" is
added to the list of dependency names. Meson 0.60.0 was
rel...```
The `dependency()` function can accept multiple dependency
names since meson 0.60.0, so increase the required meson
version and use this feature. For consistency, "lua53" is
added to the list of dependency names. Meson 0.60.0 was
released exactly a year ago and is available in recent
releases of many distributions.
```https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/366Add a config option to persist bluetooth devices on tty change2023-01-26T21:10:12ZSimon BrandAdd a config option to persist bluetooth devices on tty changeHello,
with this PR bluetooth devices stay connected to one session, even if the tty changes.
This is useful, if you often switch between tty1-tty7 and want continuous output from one session.
If there are additional changes needed, I ...Hello,
with this PR bluetooth devices stay connected to one session, even if the tty changes.
This is useful, if you often switch between tty1-tty7 and want continuous output from one session.
If there are additional changes needed, I am happy to adapt change-requests.
Best and thank you for the great product,
Simonhttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/486po: Update Ukrainian translation2023-02-15T20:54:19ZYuri Chornoivanpo: Update Ukrainian translationThanks in advance for merging.Thanks in advance for merging.https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/494Revert "config: use the pipewire directory"2023-03-09T18:35:02ZJulian Bouzasjulian.bouzas@collabora.comRevert "config: use the pipewire directory"This MR reverts back commit 8f541e9efc9f3fc23f99fc9c5932b056ecbec8bb as it does not allow wireplumber to run correctly if installed in the system.
The commit was originally added because we wanted the configuration to be stored in the p...This MR reverts back commit 8f541e9efc9f3fc23f99fc9c5932b056ecbec8bb as it does not allow wireplumber to run correctly if installed in the system.
The commit was originally added because we wanted the configuration to be stored in the pipewire subdirectory, but after re-thinking the configuration refactoring, we eventually changed our mind and decided to keep it under the wireplumbver subdirectory, like master.
cc @ashoksGeorge KiagiadakisGeorge Kiagiadakishttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/503Add nofaildefault flag to mark components enabled by default if available2023-06-21T11:20:37ZP VAdd nofaildefault flag to mark components enabled by default if availableMake Wireplumber in its default configuration start successfully also when logind
or DBus user session is not available.
Consider the logind, reserve-device, and flatpak-portal components as optional and
enabled by default, but not maki...Make Wireplumber in its default configuration start successfully also when logind
or DBus user session is not available.
Consider the logind, reserve-device, and flatpak-portal components as optional and
enabled by default, but not making Wireplumber fail to start up if not available. However,
if they were explicitly enabled in the settings, make Wireplumber startup fail
if they cannot be enabled.
Do this by adding a new `nofaildefault` component flag that acts as `nofail` if
the component dependency setting was not enabled explicitly.
<s>Also adjust Lua Plugin.find so that it returns nil for plugins that are not active,
so that scripts do not have to explicitly check for that explicitly.</s>
Seems tests assume otherwise, so just check plugin enabled in scripts then.
----------------
The idea here is to make it easier to just run Pipewire & Wireplumber in any environment, e.g. for automated testing, or on bare-bones Linux distros.https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/517Include latest spa-json fixes in next branch2023-06-21T18:04:26ZJulian Bouzasjulian.bouzas@collabora.comInclude latest spa-json fixes in next branchThis MR includes the spa-json fixes from https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/515 and https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/516 that were merged in master.This MR includes the spa-json fixes from https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/515 and https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/516 that were merged in master.George KiagiadakisGeorge Kiagiadakishttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/522[next] modules: add new module-filters-api to enable smart filter policy2023-08-09T21:05:04ZJulian Bouzasjulian.bouzas@collabora.com[next] modules: add new module-filters-api to enable smart filter policyThis MR ports the filters-api MR from master (https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/499) into the next branch.
The filters configuration is done in [policy.conf](https://gitlab.freedesktop.org/julian/wirep...This MR ports the filters-api MR from master (https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/499) into the next branch.
The filters configuration is done in [policy.conf](https://gitlab.freedesktop.org/julian/wireplumber/-/blob/next-filters-api/src/config/wireplumber.conf.d/policy.conf#L40-105)George KiagiadakisGeorge Kiagiadakishttps://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/534[next] tests: add event dispatch order test for same priority events2023-09-03T14:31:11ZDuncan Overbruck[next] tests: add event dispatch order test for same priority eventsAdds a new test case for events with the same priority being delivered in the same order as they have been received.
If the events are not correctly ordered, like as example a state change will result in the suspend-node hook wrongfully ...Adds a new test case for events with the same priority being delivered in the same order as they have been received.
If the events are not correctly ordered, like as example a state change will result in the suspend-node hook wrongfully suspending clients.
I'm currently using this workaround:
```patch
From afa821620c23b2e890bbb08c6368faf0fee92e4a Mon Sep 17 00:00:00 2001
From: Duncan Overbruck <mail@duncano.de>
Date: Sun, 3 Sep 2023 14:17:25 +0200
Subject: [PATCH] WIP: hack in sequence numbers for events
---
lib/wp/event-dispatcher.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/lib/wp/event-dispatcher.c b/lib/wp/event-dispatcher.c
index 9a481dcd..1cc8e506 100644
--- a/lib/wp/event-dispatcher.c
+++ b/lib/wp/event-dispatcher.c
@@ -21,14 +21,18 @@ struct _EventData
WpEvent *event;
WpIterator *hooks_iter;
WpEventHook *current_hook_in_async;
+ guint64 seq;
};
+static guint64 seqn;
+
static inline EventData *
event_data_new (WpEvent * event)
{
EventData *event_data = g_new0 (EventData, 1);
event_data->event = wp_event_ref (event);
event_data->hooks_iter = wp_event_new_hooks_iterator (event);
+ event_data->seq = seqn++;
return event_data;
}
@@ -238,7 +242,9 @@ wp_event_dispatcher_get_instance (WpCore * core)
static gint
event_cmp_func (const EventData *a, const EventData *b)
{
- return wp_event_get_priority (b->event) - wp_event_get_priority (a->event);
+ int c = wp_event_get_priority (b->event) - wp_event_get_priority (a->event);
+ if (c != 0) return c;
+ return a->seq - b->seq;
}
/*!
--
2.42.0
```