commit 4208d2399fbcf0653e952dc79c5c2fa520ee26dddce058f2c7a5b2151e75c533 Author: Antonio Larrosa Date: Wed Dec 4 11:44:23 2024 +0000 - Update to version 0.5.7: * Highlights: - Fixed an issue that would cause random profile switching when an application was trying to capture from non-Bluetooth devices (#715, #634, !669) - Fixed an issue that would cause strange profile selection issues [choices not being remembered or unavailable routes being selected] (#734) - Added a timer that delays switching Bluetooth headsets to the HSP/HFP profile, avoiding needless rapid switching when an application is trying to probe device capabilities instead of actually capturing audio (!664) - Improved libcamera/v4l2 device deduplication logic to work with more complex devices (!674, !675, #689, #708) * Fixes: - Fixed two memory leaks in module-mixer-api and module-dbus-connection (!672, !673) - Fixed a crash that could occur in module-reserve-device (!680, #742) - Fixed an issue that would cause the warning "[string "alsa.lua"]:182: attempt to concatenate a nil value (local 'node_name')" to appear in the logs when an ALSA device was busy, breaking node name deduplication (!681) - Fixed an issue that could make find-preferred-profile.lua crash instead of properly applying profile priority rules (#751) - Remove patches that are already included in 0.5.7: * 0001-autoswitch-bluetooth-profile-switch-only-Bluetooth-devices.patch * 0002-autoswitch-bluetooth-profile-Switch-to-HSP_HFP-on-timeout.patch * 0003-m-mixer-api-Fix-memory-in-leak-wp_mixer_api_set_volume.patch OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/wireplumber?expand=0&rev=89 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/0001-autoswitch-bluetooth-profile-switch-only-Bluetooth-devices.patch b/0001-autoswitch-bluetooth-profile-switch-only-Bluetooth-devices.patch new file mode 100644 index 0000000..8788121 --- /dev/null +++ b/0001-autoswitch-bluetooth-profile-switch-only-Bluetooth-devices.patch @@ -0,0 +1,67 @@ +From b68a6794cd5c3702a2144be60c41a9ca982c416b Mon Sep 17 00:00:00 2001 +From: Pauli Virtanen +Date: Sun, 8 Sep 2024 20:22:41 +0300 +Subject: [PATCH] autoswitch-bluetooth-profile: switch only Bluetooth devices + +Handle only devices associated with Bluetooth loopback nodes. + +Make sure the node.link-group iteration cannot get stuck if there is a +loop in the link graph. +--- + .../device/autoswitch-bluetooth-profile.lua | 18 ++++++++++++++---- + 1 file changed, 14 insertions(+), 4 deletions(-) + +diff --git a/src/scripts/device/autoswitch-bluetooth-profile.lua b/src/scripts/device/autoswitch-bluetooth-profile.lua +index d4f3529f..70e27601 100644 +--- a/src/scripts/device/autoswitch-bluetooth-profile.lua ++++ b/src/scripts/device/autoswitch-bluetooth-profile.lua +@@ -301,13 +301,14 @@ end + + -- We consider a Stream of interest if it is linked to a bluetooth loopback + -- source filter +-local function checkStreamStatus (stream, node_om) ++local function checkStreamStatus (stream, node_om, visited_link_groups) + -- check if the stream is linked to a bluetooth loopback source + local stream_id = tonumber(stream["bound-id"]) + local peer_id = lutils.getNodePeerId (stream_id) + if peer_id ~= nil then + local bt_node = node_om:lookup { +- Constraint { "bound-id", "=", peer_id, type = "gobject" } ++ Constraint { "bound-id", "=", peer_id, type = "gobject" }, ++ Constraint { "bluez5.loopback", "=", "true", type = "pw" } + } + if bt_node ~= nil then + local dev_id = bt_node.properties["device.id"] +@@ -325,18 +326,27 @@ local function checkStreamStatus (stream, node_om) + else + -- Check if it is linked to a filter main node, and recursively advance if so + local filter_main_node = node_om:lookup { +- Constraint { "bound-id", "=", peer_id, type = "gobject" } ++ Constraint { "bound-id", "=", peer_id, type = "gobject" }, ++ Constraint { "node.link-group", "+", type = "pw" } + } + if filter_main_node ~= nil then + -- Now check all stream nodes for this filter + local filter_link_group = filter_main_node.properties ["node.link-group"] ++ if visited_link_groups == nil then ++ visited_link_groups = {} ++ end ++ if visited_link_groups [filter_link_group] then ++ return nil ++ else ++ visited_link_groups [filter_link_group] = true ++ end + for filter_stream_node in node_om:iterate { + Constraint { "media.class", "matches", "Stream/Input/Audio", type = "pw-global" }, + Constraint { "stream.monitor", "!", "true", type = "pw" }, + Constraint { "bluez5.loopback", "!", "true", type = "pw" }, + Constraint { "node.link-group", "=", filter_link_group, type = "pw" } + } do +- local dev_id = checkStreamStatus (filter_stream_node, node_om) ++ local dev_id = checkStreamStatus (filter_stream_node, node_om, visited_link_groups) + if dev_id ~= nil then + return dev_id + end +-- +GitLab + diff --git a/0002-autoswitch-bluetooth-profile-Switch-to-HSP_HFP-on-timeout.patch b/0002-autoswitch-bluetooth-profile-Switch-to-HSP_HFP-on-timeout.patch new file mode 100644 index 0000000..0bb07ae --- /dev/null +++ b/0002-autoswitch-bluetooth-profile-Switch-to-HSP_HFP-on-timeout.patch @@ -0,0 +1,94 @@ +From 76985fff5b4f771714ea1814d85a69298dd83897 Mon Sep 17 00:00:00 2001 +From: Julian Bouzas +Date: Fri, 12 Jul 2024 10:49:16 -0400 +Subject: [PATCH] autoswitch-bluetooth-profile: Switch to HSP/HFP on timeout + +This patch adds a 500ms timeout callback to switch to HSP/HFP when a stream +starts capturing BT audio. This avoids quickly switching from A2DP to HSP/HFP +back and forth if an application just wants to probe the BT source for a short +period of time. + +See #634 +--- + .../device/autoswitch-bluetooth-profile.lua | 34 ++++++++++++++----- + 1 file changed, 26 insertions(+), 8 deletions(-) + +diff --git a/src/scripts/device/autoswitch-bluetooth-profile.lua b/src/scripts/device/autoswitch-bluetooth-profile.lua +index 70e27601..bd9def55 100644 +--- a/src/scripts/device/autoswitch-bluetooth-profile.lua ++++ b/src/scripts/device/autoswitch-bluetooth-profile.lua +@@ -32,9 +32,11 @@ state = nil + headset_profiles = nil + + local profile_restore_timeout_msec = 2000 ++local profile_switch_timeout_msec = 500 + + local INVALID = -1 + local restore_timeout_source = {} ++local switch_timeout_source = {} + + local last_profiles = {} + +@@ -174,12 +176,6 @@ local function switchDeviceToHeadsetProfile (dev_id, device_om) + return + end + +- -- clear restore callback, if any +- if restore_timeout_source[dev_id] ~= nil then +- restore_timeout_source[dev_id]:destroy () +- restore_timeout_source[dev_id] = nil +- end +- + local cur_profile_name = getCurrentProfile (device) + local priority, index, name = findProfile (device, nil, cur_profile_name) + if hasProfileInputRoute (device, index) then +@@ -278,6 +274,24 @@ local function restoreProfile (dev_id, device_om) + end + end + ++local function triggerSwitchDeviceToHeadsetProfile (dev_id, device_om) ++ -- Always clear any pending restore/switch callbacks when triggering a new switch ++ if restore_timeout_source[dev_id] ~= nil then ++ restore_timeout_source[dev_id]:destroy () ++ restore_timeout_source[dev_id] = nil ++ end ++ if switch_timeout_source[dev_id] ~= nil then ++ switch_timeout_source[dev_id]:destroy () ++ switch_timeout_source[dev_id] = nil ++ end ++ ++ -- create new switch callback ++ switch_timeout_source[dev_id] = Core.timeout_add (profile_switch_timeout_msec, function () ++ switch_timeout_source[dev_id] = nil ++ switchDeviceToHeadsetProfile (dev_id, device_om) ++ end) ++end ++ + local function triggerRestoreProfile (dev_id, device_om) + -- we never restore the device profiles if there are active streams + for _, v in pairs (active_streams) do +@@ -286,7 +300,11 @@ local function triggerRestoreProfile (dev_id, device_om) + end + end + +- -- clear restore callback, if any ++ -- Always clear any pending restore/switch callbacks when triggering a new restore ++ if switch_timeout_source[dev_id] ~= nil then ++ switch_timeout_source[dev_id]:destroy () ++ switch_timeout_source[dev_id] = nil ++ end + if restore_timeout_source[dev_id] ~= nil then + restore_timeout_source[dev_id]:destroy () + restore_timeout_source[dev_id] = nil +@@ -367,7 +385,7 @@ local function handleStream (stream, node_om, device_om) + if dev_id ~= nil then + active_streams [stream.id] = dev_id + previous_streams [stream.id] = dev_id +- switchDeviceToHeadsetProfile (dev_id, device_om) ++ triggerSwitchDeviceToHeadsetProfile (dev_id, device_om) + else + dev_id = active_streams [stream.id] + active_streams [stream.id] = nil +-- +GitLab + diff --git a/0003-m-mixer-api-Fix-memory-in-leak-wp_mixer_api_set_volume.patch b/0003-m-mixer-api-Fix-memory-in-leak-wp_mixer_api_set_volume.patch new file mode 100644 index 0000000..a0801b2 --- /dev/null +++ b/0003-m-mixer-api-Fix-memory-in-leak-wp_mixer_api_set_volume.patch @@ -0,0 +1,36 @@ +From 255b65d18204f7cf5c0706308196ffbcf8f1a697 Mon Sep 17 00:00:00 2001 +From: Torkel Niklasson +Date: Thu, 26 Sep 2024 12:01:18 +0200 +Subject: [PATCH] m-mixer-api: Fix memory in leak wp_mixer_api_set_volume + +Declare result from wp_object_manager_lookup as g_autoptr, to prevent +leaking memory. +--- + modules/module-mixer-api.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/modules/module-mixer-api.c b/modules/module-mixer-api.c +index e9dccbab0..502640c68 100644 +--- a/modules/module-mixer-api.c ++++ b/modules/module-mixer-api.c +@@ -501,7 +501,7 @@ wp_mixer_api_set_volume (WpMixerApi * self, guint32 id, GVariant * vvolume) + props = wp_spa_pod_builder_end (b); + + if (info->device_id != SPA_ID_INVALID) { +- WpPipewireObject *device = wp_object_manager_lookup (self->om, ++ g_autoptr (WpPipewireObject) device = wp_object_manager_lookup (self->om, + WP_TYPE_DEVICE, WP_CONSTRAINT_TYPE_G_PROPERTY, + "bound-id", "=u", info->device_id, NULL); + g_return_val_if_fail (device != NULL, FALSE); +@@ -514,7 +514,7 @@ wp_mixer_api_set_volume (WpMixerApi * self, guint32 id, GVariant * vvolume) + "save", "b", true, + NULL)); + } else { +- WpPipewireObject *node = wp_object_manager_lookup (self->om, ++ g_autoptr (WpPipewireObject) node = wp_object_manager_lookup (self->om, + WP_TYPE_NODE, WP_CONSTRAINT_TYPE_G_PROPERTY, + "bound-id", "=u", id, NULL); + g_return_val_if_fail (node != NULL, FALSE); +-- +GitLab + diff --git a/0004-module-dbus-connection-fix-GCancellable-leak.patch b/0004-module-dbus-connection-fix-GCancellable-leak.patch new file mode 100644 index 0000000..aa24069 --- /dev/null +++ b/0004-module-dbus-connection-fix-GCancellable-leak.patch @@ -0,0 +1,64 @@ +From ed80938b8c6a08aeb22ec4cefdee6f98c2f8e646 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= +Date: Thu, 26 Sep 2024 14:49:12 +0200 +Subject: [PATCH] module-dbus-connection: fix GCancellable leak + +`wp_dbus_connection_disable()` creates a new GCancellable +object at the end, which is never freed if the GObject +is then destroyed. To fix this, override `finalize()` and +clear everything there as well. + +Direct leak of 64 byte(s) in 1 object(s) allocated from: + 0 0x70e688efd1aa in calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77 + 1 0x70e6874b3e62 in g_malloc0 (/usr/lib/libglib-2.0.so.0+0x63e62) (BuildId: 7b781c8d1a6e2161838c5d8f3bd797797c132753) + 2 0x70e6875dea75 in g_type_create_instance (/usr/lib/libgobject-2.0.so.0+0x3ea75) (BuildId: 5af5e0f7d0a900ecb6083fbd71e22e5522d872e2) + 3 0x70e6875c3804 (/usr/lib/libgobject-2.0.so.0+0x23804) (BuildId: 5af5e0f7d0a900ecb6083fbd71e22e5522d872e2) + 4 0x70e6875c4e7e in g_object_new_with_properties (/usr/lib/libgobject-2.0.so.0+0x24e7e) (BuildId: 5af5e0f7d0a900ecb6083fbd71e22e5522d872e2) + 5 0x70e6875c5ed1 in g_object_new (/usr/lib/libgobject-2.0.so.0+0x25ed1) (BuildId: 5af5e0f7d0a900ecb6083fbd71e22e5522d872e2) + 6 0x70e684d2a8a6 in wp_dbus_connection_disable ../subprojects/wireplumber/modules/module-dbus-connection.c:173 + 7 0x70e688a833cc in wp_plugin_deactivate ../subprojects/wireplumber/lib/wp/plugin.c:144 + 8 0x70e688a7126c in wp_object_deactivate ../subprojects/wireplumber/lib/wp/object.c:542 + 9 0x70e688a6e74e in wp_object_dispose ../subprojects/wireplumber/lib/wp/object.c:191 + 10 0x70e6875c0f6c in g_object_unref (/usr/lib/libgobject-2.0.so.0+0x20f6c) (BuildId: 5af5e0f7d0a900ecb6083fbd71e22e5522d872e2) + 11 0x70e6841f7d6d in wp_portal_permissionstore_plugin_disable ../subprojects/wireplumber/modules/module-portal-permissionstore.c:207 + 12 0x70e688a833cc in wp_plugin_deactivate ../subprojects/wireplumber/lib/wp/plugin.c:144 + [...] +--- + modules/module-dbus-connection.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/modules/module-dbus-connection.c b/modules/module-dbus-connection.c +index 21ba95a20..b337be5e1 100644 +--- a/modules/module-dbus-connection.c ++++ b/modules/module-dbus-connection.c +@@ -211,6 +211,19 @@ wp_dbus_connection_set_property (GObject * object, guint property_id, + } + } + ++static void ++wp_dbus_connection_finalize (GObject * object) ++{ ++ WpDBusConnection *self = WP_DBUS_CONNECTION (object); ++ ++ g_cancellable_cancel (self->cancellable); ++ ++ g_clear_object (&self->connection); ++ g_clear_object (&self->cancellable); ++ ++ G_OBJECT_CLASS (wp_dbus_connection_parent_class)->finalize (object); ++} ++ + static void + wp_dbus_connection_class_init (WpDBusConnectionClass * klass) + { +@@ -219,6 +232,7 @@ wp_dbus_connection_class_init (WpDBusConnectionClass * klass) + + object_class->get_property = wp_dbus_connection_get_property; + object_class->set_property = wp_dbus_connection_set_property; ++ object_class->finalize = wp_dbus_connection_finalize; + + plugin_class->enable = wp_dbus_connection_enable; + plugin_class->disable = wp_dbus_connection_disable; +-- +GitLab + diff --git a/_service b/_service new file mode 100644 index 0000000..4973499 --- /dev/null +++ b/_service @@ -0,0 +1,24 @@ + + + + git + https://gitlab.freedesktop.org/pipewire/wireplumber.git + 0.5.7 + @PARENT_TAG@ + + + + + + *.tar + xz + + + diff --git a/split-config-file.py b/split-config-file.py new file mode 100644 index 0000000..c3b4daf --- /dev/null +++ b/split-config-file.py @@ -0,0 +1,52 @@ +#!/usr/bin/python3 +import hashlib +import sys +import re + +def sha256_from_data(data): + hash_sha256 = hashlib.sha256() + hash_sha256.update(data) + return hash_sha256.hexdigest() + +lines = open('wireplumber.conf', 'r', encoding='utf-8').readlines() + +is_in_device_monitor = False +main_config_content = '' +device_monitors_content = '' +main_profile_contents = '' + +for line in lines: + if re.match(' *## Device monitors$', line): + main_config_content += line + main_config_content += ' # Section moved to a device-monitors.conf file which is provided by the wireplumber-audio package\n\n' + is_in_device_monitor = True + continue + elif re.match(' *## ', line): + is_in_device_monitor = False + + if is_in_device_monitor: + device_monitors_content += line + else: + # Fixes wireplumber running the main profile when not having audio support (bsc#1223916) + if line in [' hardware.audio = required\n', ' hardware.bluetooth = required\n']: + main_profile_contents += line + line = line.replace('required', 'disabled') + main_config_content += line + +config_sha256 = sha256_from_data(device_monitors_content.encode('utf-8')) +verified_sha256 = 'bf33d018e5b924da71266636757fa264bc677b945c35e4dcd7f708da42731cc9' +if config_sha256 != verified_sha256: + print('The "Device monitors" section was modified, please verify that the contents are ok') + print('and if they are, modify the "verified_sha256" value in this script to') + print(f' {config_sha256}') + print('Current device monitors section is:') + print(device_monitors_content) + sys.exit(1) + +device_monitors_content = 'wireplumber.components = [\n' + device_monitors_content + ']' +main_profile_contents = 'wireplumber.profiles = {\n main = {\n' + main_profile_contents + ' }\n}\n' + + +open('wireplumber.conf', 'w', encoding='utf-8').write(main_config_content) +open('wireplumber.conf.d/00-device-monitors.conf', 'w', encoding='utf-8').write(device_monitors_content) +open('wireplumber.conf.d/01-require-audio-in-main-profile.conf', 'w', encoding='utf-8').write(main_profile_contents) diff --git a/wireplumber-0.5.6.obscpio b/wireplumber-0.5.6.obscpio new file mode 100644 index 0000000..f8f188d --- /dev/null +++ b/wireplumber-0.5.6.obscpio @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ff1cbdbaa30d1341814dd1ec6d0ed0a93cc8e4634082b232181f10c8a5f0262 +size 2791436 diff --git a/wireplumber-0.5.7.obscpio b/wireplumber-0.5.7.obscpio new file mode 100644 index 0000000..dcf9686 --- /dev/null +++ b/wireplumber-0.5.7.obscpio @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93899496a3ffaf69bc0d683343b14eb4a98a505f98796f592f9a7b6c9e4672a8 +size 2802700 diff --git a/wireplumber.changes b/wireplumber.changes new file mode 100644 index 0000000..3742f2f --- /dev/null +++ b/wireplumber.changes @@ -0,0 +1,2240 @@ +------------------------------------------------------------------- +Wed Dec 4 10:29:34 UTC 2024 - Antonio Larrosa + +- Update to version 0.5.7: + * Highlights: + - Fixed an issue that would cause random profile switching when + an application was trying to capture from non-Bluetooth + devices (#715, #634, !669) + - Fixed an issue that would cause strange profile selection + issues [choices not being remembered or unavailable routes + being selected] (#734) + - Added a timer that delays switching Bluetooth headsets to the + HSP/HFP profile, avoiding needless rapid switching when an + application is trying to probe device capabilities instead of + actually capturing audio (!664) + - Improved libcamera/v4l2 device deduplication logic to work + with more complex devices (!674, !675, #689, #708) + * Fixes: + - Fixed two memory leaks in module-mixer-api and + module-dbus-connection (!672, !673) + - Fixed a crash that could occur in module-reserve-device + (!680, #742) + - Fixed an issue that would cause the warning + "[string "alsa.lua"]:182: attempt to concatenate a nil value + (local 'node_name')" to appear in the logs when an ALSA + device was busy, breaking node name deduplication (!681) + - Fixed an issue that could make find-preferred-profile.lua + crash instead of properly applying profile priority rules + (#751) +- Remove patches that are already included in 0.5.7: + * 0001-autoswitch-bluetooth-profile-switch-only-Bluetooth-devices.patch + * 0002-autoswitch-bluetooth-profile-Switch-to-HSP_HFP-on-timeout.patch + * 0003-m-mixer-api-Fix-memory-in-leak-wp_mixer_api_set_volume.patch + * 0004-module-dbus-connection-fix-GCancellable-leak.patch + +------------------------------------------------------------------- +Mon Oct 21 15:52:33 UTC 2024 - Antonio Larrosa + +- Add patch from upstream to fix switching automatically the + profile of non-bluetooth devices (boo#1231815): + * 0001-autoswitch-bluetooth-profile-switch-only-Bluetooth-devices.patch +- Add patch from upstream to fix switching automatically the + profile when starting some apps and then switching to the + previous profile: + * 0002-autoswitch-bluetooth-profile-Switch-to-HSP_HFP-on-timeout.patch +- Add patches from upstream to fix a couple of memory leaks: + * 0003-m-mixer-api-Fix-memory-in-leak-wp_mixer_api_set_volume.patch + * 0004-module-dbus-connection-fix-GCancellable-leak.patch + +------------------------------------------------------------------- +Mon Sep 9 12:12:28 UTC 2024 - Frederic Crozat + +- Update to version 0.5.6: + * Additions: + - Implemented before/after dependencies for components, to + ensure correct load order in custom configurations (#600) + - Implemented profile inheritance in the configuration file. + This allows profiles to inherit all the feature specifications + of other profiles, which is useful to avoid copying long lists + of features just to make small changes + - Added multi-instance configuration profiles, tested and + documented them + - Added a ``main-systemwide`` profile, which is now the default + for instances started via the system-wide systemd service and + disables features that depend on the user session (#608) + - Added a ``wp_core_connect_fd`` method, which allows making a + connection to PipeWire via an existing open socket (useful + for portal-based connections) + * Fixes: + - The Bluetooth auto-switch script now uses the common event + source object managers, which should improve its + stability (!663) + - Fix an issue where switching between Bluetooth profiles + would temporarily link active audio streams to the internal + speakers (!655) + +------------------------------------------------------------------- +Tue Jul 2 08:14:44 UTC 2024 - Antonio Larrosa + +- Update to version 0.5.5: + * Highlights: + - Hotfix release to address crashes in the Bluetooth HSP/HFP + autoswitch functionality that were side-effects of some + changes that were part of the role-based linking policy + (#682) + * Improvements: + - wpctl will now properly show a '*' in front of sink filters + when they are selected as the default sink (!660) + +------------------------------------------------------------------- +Fri Jun 28 06:01:56 UTC 2024 - alarrosa@suse.com + +- Update to version 0.5.4+git2.96dc045: + * l/find-best-target: Allow regular filters to be best targets + * linking-utils: fallback to role priority 0 if none is defined + +------------------------------------------------------------------- +Fri Jun 28 05:56:38 UTC 2024 - Antonio Larrosa + +- Update to version 0.5.4: + * Highlights: + - Refactored the role-based linking policy (previously known + also as "endpoints" or "virtual items" policy) to blend in + with the standard desktop policy. It is now possible use + role-based sinks alongside standard desktop audio operations + and they will only be used for streams that have a + "media.role" defined. It is also possible to force streams to + have a media.role, using a setting. Other features include: + blending with smart filters in the graph and allowing + hardware DSP nodes to be also used easily instead of + requiring software loopbacks for all roles. (#610, !649) + * Improvements: + - Filters that are not declared as smart will now behave again + as normal application streams, instead of being treated + sometimes differently (!657) + * Fixes: + - Fixed an issue that would cause WirePlumber to crash at + startup if an empty configuration file was present in one of + the search paths (#671) + - Fixed Bluetooth profile auto-switching when a filter is + permanently linked to the Bluetooth source (!650) + - Fixed an issue in the software-dsp script that would cause + DSP filters to stay around and cause issues after their + device node was destroyed (!651) + - Fixed an issue in the autoswitch-bluetooth-profile script + that could cause an infinite loop of switching between + profiles (!652, #617) + - Fixed a rare issue that could cause WirePlumber to crash when + dealing with a device object that didn't have the + "device.name" property set (#674) + +------------------------------------------------------------------- +Wed Jun 26 11:08:08 UTC 2024 - alarrosa@suse.com + +- Update to version 0.5.3+git11.4868b3c: + * get-filter-from-target: Don't bypass the hook if the session item is a regular filter + * filter-utils: Allow smart filters to have as target filters that are not smart + * tests: skip some tests when audiotestsrc is unavailable + * scripts/device: avoid crashing if the device.name is not set + * tests/examples: add example on how to set node "params" under Props + * autoswitch-bluetooth-profile: Always destroy the restore timeout source before switching + * node/software-dsp: ensure that filter chains are properly unloaded + * scripts: Fix autoswitch BT profile when using filters + * bluez: Don't create loopback source if autoswitch setting is disabled + * conf: further improve how top-level objects are handled + * conf: skip empty configuration files to avoid crashing + +------------------------------------------------------------------- +Tue Jun 4 22:08:54 UTC 2024 - Alexei Sorokin + +- Update to version 0.5.3: + * Fixes: + - Fix a long standing issue that would cause many device nodes + to have inconsistent naming, with a '.N' suffix (where N is + a number >= 2) being appended at seemingly random times. + - Fix an issue that would cause unavailable device profiles to + be selected if they were previously stored in the state file, + sometimes requiring users to manually remove the state file + to get things working again. + - Fix an occasional crash that could sometimes be triggered by + hovering the volume icon on the KDE taskbar, and possibly + other similar actions. + - Fix camera device deduplication logic when the same device + is available through both V4L2 and libcamera, and the + libcamera one groups multiple V4L2 devices together. + - Fix applying the default volume on streams that have no + volume previously stored in the state file. + - Fix an issue that would prevent some camera nodes, + in some cases, from being destroyed when the camera device + is removed. + - Fix an issue that would cause video stream nodes to be + linked with audio smart filters, if smart audio filters were + configured. + - Fix an issue that would cause WP to re-activate device + profiles even though they were already active. + - Configuration files in standard JSON format (starting with a + '{', among other things) are now correctly parsed. + - Fix overriding non-container values when merging JSON + objects. + - Functions marked with WP_PRIVATE_API are now also marked as + non-introspectable in the gobject-introspection metadata. + * Improvements: + - Logging on the systemd journal now includes the log topic + and also the log level and location directly on the message + string when the log level is high enough, which is useful + for gathering additional context in logs submitted by users. + - Add a video-only profile in wireplumber.conf, for systems + where only camera & screensharing are to be used. + - Improve seat state monitoring so that Bluetooth devices are + only enabled when the user is active on a local seat, + instead of allowing remote users as well. + - Improve how main filter nodes are detected for the smart + filters. + - Add Lua method to merge JSON containers. +- Remove patch already included upstream: + * 0001-lua-json-fix-error-ouput.patch + * 0002-lua-json-add-method-to-merge-json-containers.patch + * 0003-json-utils-fix-overriding-of-non-container-values-when.patch + * 0004-transition-fix-memleak-when-error-set.patch + * 0005-transition-ensure-single-completion-and-finish.patch + * 0006-linking-return-after-aborting-transition.patch + * 0007-state-stream-fix-using-default-volume.patch + +------------------------------------------------------------------- +Sat May 25 13:28:01 UTC 2024 - Alexei Sorokin + +- Add patches from upstream to fix a crash for aborted links: + * 0004-transition-fix-memleak-when-error-set.patch + * 0005-transition-ensure-single-completion-and-finish.patch + * 0006-linking-return-after-aborting-transition.patch +- Add patch from upstream to fix default playback volume ignore: + * 0007-state-stream-fix-using-default-volume.patch + +------------------------------------------------------------------- +Mon May 6 16:23:47 UTC 2024 - Antonio Larrosa + +- Better fix for (bsc#1223916) that basically turns the main + profile into the (to be in 0.5.3) video-only profile unless + wireplumber-audio is installed which now turns the main profile + into exactly upstream's main profile. + +------------------------------------------------------------------- +Mon May 6 07:41:23 UTC 2024 - Antonio Larrosa + +- Add patch from upstream to fix a json log issue: + * 0001-lua-json-fix-error-ouput.patch +- Add patch from upstream to add a method to merge json containers: + * 0002-lua-json-add-method-to-merge-json-containers.patch +- Add patch from upstream to fix merging a particular case + of configuration options: + * 0003-json-utils-fix-overriding-of-non-container-values-when.patch +- Fix wireplumber not starting successfully when audio support is + not enabled since the main profile now requires it. The best + option would be to use a video-only profile but it's too late + to change the way wireplumber is started in SLE/Leap, so the + solution just makes audio/bluetooth optional for now + (bsc#1223916) + * split-config-file.py + +------------------------------------------------------------------- +Tue Apr 23 06:48:06 UTC 2024 - Antonio Larrosa + +- Update to version 0.5.2: + * Highlights: + - Added support for loading configuration files other than the + default wireplumber.conf within Lua scripts (!629) + - Added support for loading single-section configuration files, + without fragments (!629) + - Updated the node.software-dsp script to be able to load + filter-chain graphs from external configuration files, which + is needed for Asahi Linux audio DSP configuration (!629) + * Fixes: + - Fixed destroying camera nodes when the camera device is + removed (#627, !631) + - Fixed an issue with Bluetooth BAP device set naming (!632) + - Fixed an issue caused by the pipewire event loop not being + "entered" as expected (!634, #638) + - A false positive warning about no modules being loaded is + now suppressed when using libpipewire >= 1.0.5 (#620) + - Default nodes can now be selected using priority.driver when + priority.session is not set (#642) + * Changes: + - The library version is now generated following pipewire's + versioning scheme: libwireplumber-0.5.so.0.5.2 becomes + libwireplumber-0.5.so.0.0502.0 (!633) +- Remove patches from upstream that are already in 0.5.2: + * 0001-core-set-context.modules.allow-empty-to-silence-warning-in.patch + * 0002-monitor-utils-clear-cam-data-after-creating-nodes.patch + * 0003-monitors_bluez-fix-BAP-device-set-node-naming.patch + +------------------------------------------------------------------- +Mon Apr 15 07:54:54 UTC 2024 - Antonio Larrosa + +- Add patch from upstream to silence a warning on pipewire + (since 1.0.5): + * 0001-core-set-context.modules.allow-empty-to-silence-warning-in.patch +- Add patch from upstream to fix a dangling reference to a device: + * 0002-monitor-utils-clear-cam-data-after-creating-nodes.patch +- Add patch from upstream to fix BAP node naming: + * 0003-monitors_bluez-fix-BAP-device-set-node-naming.patch + +------------------------------------------------------------------- +Mon Apr 1 07:53:59 UTC 2024 - Antonio Larrosa + +- Update to version 0.5.1: + * Highlights: + - Added a guide documenting how to migrate configuration from + 0.4 to 0.5, also available online at: + https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/migration.html + If you are packaging WirePlumber for a distribution, please + consider informing users about this. Installing the + wireplumber-doc subpackage, this file can be read by running: + xdg-open /usr/share/doc/wireplumber/html/daemon/configuration/migration.html + * Fixes: + - Fixed an odd issue where microphones would stop being usable + when a Bluetooth headset was connected in the HSP/HFP profile + (#598, !620) + - Fixed an issue where it was not possible to store the + volume/mute state of system notifications (#604) + - Fixed a rare crash that could occur when a node was destroyed + while the 'select-target' event was still being processed + (!621) + - Fixed deleting all the persistent settings via + wpctl --delete (!622) + - Fixed using Bluetooth autoswitch with A2DP profiles that have + an input route (!624) + - Fixed sending an error to clients when linking fails due to a + format mismatch (!625) + * Additions: + - Added a check that prints a verbose warning when old-style + 0.4.x Lua configuration files are found in the system. (#611) + - The "policy-dsp" script, used in Asahi Linux to provide a + software DSP for Apple Sillicon devices, has now been ported + to 0.5 properly and documented (#619, !627) +- Remove patch already included upstream: + * 0001-filter-utils-fix-handling-of-targetless-smart-filters.patch +- Enable documentation generation and create new doc subpackage + including the documentation that can be read by running: + xdg-open /usr/share/doc/wireplumber/html/index.html + +------------------------------------------------------------------- +Fri Mar 22 08:30:48 UTC 2024 - Antonio Larrosa + +- Add patch from upstream to fix all input sources only working + when bluetooth profile is set to HSF/HFP, which was a regression + in 0.5.0 (glfo#pipewire/wireplumber#598): + * 0001-filter-utils-fix-handling-of-targetless-smart-filters.patch + +------------------------------------------------------------------- +Tue Mar 19 07:43:16 UTC 2024 - Richard Biener + +- Avoid %if %{pkg_vcmp gcc < 8}, instead replicate the condition + from the BuildRequires section. + +------------------------------------------------------------------- +Mon Mar 18 16:34:10 UTC 2024 - Antonio Larrosa + +- Update to version 0.5.0: + * Changes: + - Bumped the minimum required version of PipeWire to 1.0.2, + because we make use of the 'api.bluez5.internal' property of + the BlueZ monitor (!613) + - Improved the naming of Bluetooth nodes when the + auto-switching loopback node is present (!614) + - Updated the documentation on "settings", the Bluetooth + monitor, the Access configuration, the file search locations + and added a document on how to modify the configuration file + (#595, !616) + * Fixes: + - Fixed checking for available routes when selecting the + default node (!609) + - Fixed an issue that was causing an infinite loop storing + routes in the state file (!610) + - Fixed the interpretation of boolean values in the alsa + monitor rules (#586, !611) + - Fixes a Lua crash when we have 2 smart filters, one with a + target and one without (!612) + - Fixed an issue where the default nodes would not be updated + when the currently selected default node became unavailable + (#588, !615) + - Fixed an issue that would cause the Props (volume, mute, etc) + of loopbacks and other filter nodes to not be restored at + startup (#577, !617) + - Fixed how some constants were represented in the + gobject-introspection file, mostly by converting them from + defines to enums (#540, #591) + - Fixed an issue using WirePlumber headers in other projects + due to redefinition of G_LOG_DOMAIN (#571) + +------------------------------------------------------------------- +Tue Mar 12 16:25:39 UTC 2024 - alarrosa@suse.com + +- Update to version 0.4.90+git25.95cfa9e: + * wpctl: fix settings --help listing + * docs: conf_file: small updates + * docs: installing: update dependency versions + * si-linkables: do not fully reset when the underlying proxy is + destroyed + * registry: move to a separate file and decouple it from the + object manager + * log: docs: document the log topic definition macros + * monitors/bluez: add 'internal' prefix to internal bluez node + names. + * monitor/bluez: set node.name property when creating combine + stream + * meson: bump min pipewire version to 1.0.2 + * scripts: fix regression in state-routes.lua when marking routes + as 'active' + * scripts: improve linking logs + * monitors: use parseBool for boolean properties in rules + * config: add {device|node}.disable + * object-interest: make WP_INTEREST_MATCH_ALL part of the enum + * proxy: make the FEATURES_MINIMAL and FEATURES_ALL constants + part of the enum + * log: fix WP_LOG_LEVEL_TRACE value in the g-i bindings + * base-dirs: wrap flag groups in parenthesis + * log.h: define G_LOG_DOMAIN only if + WP_USE_LOCAL_LOG_TOPIC_IN_G_LOG is defined + * meson: make sure the boolean options have boolean values + * meson: move the common CFLAGS to project-wide scope + * scripts: make sure target is not nil when iterating filters + with matching targets + * docs: update the documentation around file search locations + * scripts: rescan linkables when device EnumRoute param changes + * scripts: fix available routes check when selecting the default + node + * scripts: fix typo in rescan-virtual-links.lua +- Remove patch already included in the upstream version + * 0001-scripts-fix-typo-in-rescan-virtual-links.lua.patch +- Set minimum pipewire version to 1.0.2 + +------------------------------------------------------------------- +Wed Mar 6 15:43:02 UTC 2024 - Antonio Larrosa + +- Revert that last change. Obsoletes shouldn't be used for that. + +------------------------------------------------------------------- +Wed Mar 6 11:27:41 UTC 2024 - Antonio Larrosa + +- Obsolete libwireplumber-0_4-0 from libwireplumber-0_5-0 + +------------------------------------------------------------------- +Tue Mar 5 19:29:02 UTC 2024 - Antonio Larrosa + +- Add patch from upstream to fix a typo a lua script: + * 0001-scripts-fix-typo-in-rescan-virtual-links.lua.patch + +------------------------------------------------------------------- +Tue Mar 5 05:36:27 UTC 2024 - Antonio Larrosa + +- Update to version 0.4.90 (0.5.0 RC1) + * Highlights: + - The configuration system has been changed back to load files + from the WirePlumber configuration directories, such as + /etc/wireplumber and $XDG_CONFIG_HOME/wireplumber, unlike in + the pre-releases. This was done because issues were observed + with installations that use a different prefix for pipewire + and wireplumber. If you had a wireplumber.conf file in + /etc/pipewire or $XDG_CONFIG_HOME/pipewire, you should move + it to /etc/wireplumber or $XDG_CONFIG_HOME/wireplumber + respectively (!601) + - The internal base directories lookup system now also respects + the XDG_CONFIG_DIRS and XDG_DATA_DIRS environment variables, + and their default values as per the XDG spec, so it is + possible to install configuration files also in places like + /etc/xdg/wireplumber and override system-wide data paths + (!601) + - wpctl now has a settings subcommand to show, change and + delete settings at runtime. This comes with changes in the + WpSettings system to validate settings using a schema that is + defined in the configuration file. The schema is also + exported on a metadata object, so it is available to any + client that wants to expose WirePlumber settings (!599, !600) + - The WpConf API has changed to not be a singleton and support + opening arbitrary config files. The main config file now + needs to be opened prior to creating a WpCore and passed to + the core using a property. The core uses that without letting + the underlying pw_context open and read the default + client.conf. The core also closes the WpConf after all + components are loaded, which means all the config loading is + done early at startup. Finally, WpConf loads all sections + lazily, keeping the underlying files memory mapped until it + is closed and merging them on demand (!601, !606) +- Remove patch that's already included: + * 0001-wpctl-add-settings-subcomand-to-show_-delete-or-change.patch + +------------------------------------------------------------------- +Mon Feb 19 07:29:52 UTC 2024 - Antonio Larrosa + +- Add patch from upstream to remove the "clear-persistent" + sub-command and add a "settings" sub-command: + * 0001-wpctl-add-settings-subcomand-to-show_-delete-or-change.patch + +------------------------------------------------------------------- +Thu Feb 15 07:23:41 UTC 2024 - Antonio Larrosa + +- Update to version 0.4.82 (0.5.0 pre-release 2) + * Highlights: + - Bluetooth auto-switching is now implemented with a virtual + source node. When an application links to it, the actual + device switches to the HSP/HFP profile to provide the real + audio stream. This is a more robust solution that works with + more applications and is more user-friendly than the previous + application whitelist approach + - Added support for dynamic log level changes via the PipeWire + settings metadata. Also added support for log level patterns + in the configuration file + - The "persistent" (i.e. stored) settings approach has changed + to use two different metadata objects: sm-settings and + persistent-sm-settings. Changes in the former are applied in + the current session but not stored, while changes in the + latter are stored and restored at startup. Some work was also + done to expose a wpctl interface to read and change these + settings, but more is underway + - Several WirePlumber-specific node properties that used to be + called target.* have been renamed to node.* to match the + PipeWire convention of node.dont-reconnect. These are also + now fully documented + * Other changes: + - Many documentation updates + - Added support for SNAP container permissions + - Fixed multiple issues related to restoring the Route + parameter of devices, which includes volume state + - Smart filters can now be targetted by specific streams + directly when the filter.smart.targetable property is set + - Ported the mechanism to override device profile priorities in + the configuration, which is used to re-prioritize Bluetooth + codecs + - WpSettings is no longer a singleton class and there is a + built-in component to preload an instance of it + +------------------------------------------------------------------- +Mon Feb 5 16:11:12 UTC 2024 - Antonio Larrosa + +- Update to version 0.4.81 + * Highlights: + - Lua scripts have been refactored to use the new event + dispatcher API, which allows them to be split into multiple + small fragments that react to events in a specified order. + This allows scripts to be more modular and easier to + maintain, as well as more predictable in terms of execution + order. + - The configuration system has been refactored to use a single + SPA-JSON file, like PipeWire does, with support for fragments + that can override options. This file is also now loaded using + PipeWire's configuration API, which effectively means that + the file is now loaded from the PipeWire configuration + directories, such as /etc/pipewire and + $XDG_CONFIG_HOME/pipewire. + - The configuration system now has the concept of profiles, + which are groups of components that can be loaded together, + with the ability to mark certain components as optional. This + allows having multiple configurations that can be loaded + using the same configuration file. Optional components also + allow loading the same profile gracefully on different + setups, where some components may not be available (ex, + loading of the session D-Bus plugin on a system-wide PipeWire + setup now does not fail). + - Many configuration options are now exposed in the sm-settings + metadata, which allows changing them at runtime. This can be + leveraged in the future to implement configuration tools that + can modify WirePlumber's behaviour dynamically, without + restarting. + - A new "filters" system has been implemented, which allows + specifying chains of "filter" nodes to be dynamically linked + in-between streams and devices. This is achieved with certain + properties and metadata that can be set on the filter nodes + themselves. + - The default linking policy now reads some more target.* + properties from nodes, which allows fine-tuning some aspects + of their linking behaviour, such as whether they are allowed + to be re-linked or whether an error should be sent to the + client if they cannot be linked. + - Some state files have been renamed and some have changed + format to use JSON for storing complex values, such as + arrays. This may cause some of the old state to be lost on + upgrade, as there is no transition path implemented. + - The libcamera and V4L2 monitors have a "device deduplication" + logic built-in, which means that for each physical camera + device, only one node will be created, either from libcamera + or V4L2, depending on which one is considered better for the + device. This is mainly to avoid having multiple nodes for the + same camera device, which can cause confusion when looking at + the list of available cameras in applications. +- Bump apiver to 0.5 +- Rewrite split-config-file.py to work with the new config + subsystem +- Remove patch which isn't applying anymore and whose fix is + now handled by the split-config-file.py script: + * fix-bsc1219411.patch + +------------------------------------------------------------------- +Mon Feb 5 06:46:58 UTC 2024 - Antonio Larrosa + +- Add patch to only enable bluetooth when audio support is enabled + by installing wireplumber-audio (bsc#1219411): + * fix-bsc1219411.patch + +------------------------------------------------------------------- +Tue Dec 5 19:28:42 UTC 2023 - Alexei Sorokin + +- Update to version 0.4.17: + * Fixes: + - Fix a reference counting issue in the object managers that + could cause crashes due to memory corruption. + - Fix an issue with filters linking to wrong targets, often + with two sets of links. + - Fix a crash in the endpoints policy that would show up when + log messages were enabled at level 3 or higher. + +------------------------------------------------------------------- +Sun Nov 26 11:02:03 UTC 2023 - Antonio Larrosa + +- Update to version 0.4.16: + * Additions: + - Added a new "sm-objects" script that allows loading objects + on demand via metadata entries that describe the object to + load; this can be used to load pipewire modules, such as + filters or network sources/sinks, on demand + - Added a mechanism to override device profile priorities in + the configuration, mainly as a way to re-prioritize Bluetooth + codecs, but this also can be used for other devices + - Added a mechanism in the endpoints policy to allow connecting + filters between a certain endpoint's virtual sink and the + device sink; this is specifically intended to allow plugging + a filter-chain to act as equalizer on the Multimedia endpoint + - Added wp_core_get_own_bound_id() method in WpCore + * Changes: + - PipeWire 0.3.68 is now required + - policy-dsp now has the ability to hide hardware nodes behind + the DSP sink to prevent hardware misuse or damage + - JSON parsing in Lua now allows keys inside objects to be + without quotes + - Added optional argument in the Lua JSON parse() method to + limit recursions, making it possible to partially parse a + JSON object + - It is now possible to pass nil in Lua object constructors + that expect an optional properties object; previously, + omitting the argument was the only way to skip the properties + - The endpoints policy now marks the endpoint nodes as + "passive" instead of marking their links, adjusting for the + behavior change in PipeWire 0.3.68 + - Removed the "passive" property from si-standard-link, since + only nodes are marked as passive now + * Fixes: + - Fixed the wpctl clear-default command to completely clear all + the default nodes state instead of only the last set default + - Reduced the amount of globals that initially match the + interest in the object manager + - Used an idle callback instead of pw_core_sync() in the object + manager to expose tmp globals +- Remove patches included upstream: + * 0001-object-manager-reduce-the-amount-of-globals-that-initially.patch + * 0002-object-manager-use-an-idle-callback-to-expose-tmp-globals.patch + * 0001-policy-dsp-add-ability-to-hide-parent-nodes.patch +- Update split-config-file.py + +------------------------------------------------------------------- +Tue Oct 31 08:30:21 UTC 2023 - Antonio Larrosa + +- Add patch from upstream that fixes too many matches for property + interest: + * 0001-object-manager-reduce-the-amount-of-globals-that-initially.patch +- Add patch from upstream that fixes an odd failure of a test after + applying the previous patch: + * 0002-object-manager-use-an-idle-callback-to-expose-tmp-globals.patch +- Add patch from upstream that adds ability to hide parent nodes, + which is useful to prevent hardware misuse or damage by poorly + behaved/configured clients: + * 0001-policy-dsp-add-ability-to-hide-parent-nodes.patch + +------------------------------------------------------------------- +Fri Oct 13 07:17:56 UTC 2023 - Antonio Larrosa + +- Update to version 0.4.15: + * Additions: + - A new "DSP policy" module has been added; its purpose is to + automatically load a filter-chain when a certain hardware + device is present, so that audio always goes through this + software DSP before reaching the device. This is mainly to + support Apple M1/M2 devices, which require a software DSP + to be always present + - WpImplModule now supports loading module arguments directly + from a SPA-JSON config file; this is mainly to support DSP + configuration for Apple M1/M2 and will likely be reworked + for 0.5 + - Added support for automatically combining Bluetooth LE Audio + device sets (e.g. pairs of earbuds) (!500) + - Added command line options in wpctl to display device/node + names and nicknames instead of descriptions + - Added zsh completions file for wpctl + - The device profile selection policy now respects the + device.profile property if it is set on the device; this is + useful to hand-pick a profile based on static configuration + rules (alsa_monitor.rules) + * Changes/Fixes: + - Linking policy now sends an error to the client before + destroying the node, if it determines that the node cannot be + linked to any target; this fixes error reporting on the + client side + - Fixed a crash in suspend-node that could happen when + destroying virtual sinks that were loaded from another + process such as pw-loopback + - Virtual machine default period size has been bumped to 1024 + - Updated bluez5 default configuration, using bluez5.roles + instead of bluez5.headset-roles now (!498) + - Disabled Bluetooth autoconnect by default (!514) + - Removed RestrictNamespaces option from the systemd services + in order to allow libcamera to load sandboxed IPA modules + - Fixed a JSON encoding bug with empty strings + - Lua code can now parse strings without quotes from SPA-JSON + - Added some missing \since annotations and made them show up + in the generated gobject-introspection file, to help bindings + generators +- Add zsh-completion subpackage + +------------------------------------------------------------------- +Fri May 19 17:26:12 UTC 2023 - Alexei Sorokin + +- Require wireplumber-audio if pipewire-jack is installed. +- Recommend pipewire-jack in wireplumber-audio. + +------------------------------------------------------------------- +Fri Mar 10 23:20:12 UTC 2023 - Alexei Sorokin + +- Update to version 0.4.14: + * Additions + - Add support for managing Bluetooth-MIDI, complementing the + parts that were merged in PipeWire recently. + - Add a default volume configuration option for streams whose + volume has never been saved before; that allows starting new + streams at a lower volume than 100% by default, if desired. + - Add support for managing link errors and propagating them to + the client(s) involved. This allows better error handling on + the application side in case a format cannot be negotiated - + useful in video streams. + - snd_aloop devices are now described as being "Loopback" + devices. + - ALSA nodes in the pro audio profile now get increased graph + priority, so that they are more likely to become the driver + in the graph. + - Add support for disabling libcamera nodes & devices with + node.disabled and device.disabled, like it works for ALSA + and V4L2. +- Drop reduce-meson-required-version.patch: openSUSE Leap 15.3 is + no longer supported. +- Drop patches already included upstream: + * 0001-alsa-monitor-handle-snd_aloop-devices-better.patch + * 0001-spa-json-make-sure-we-only-add-encoded-string-data.patch + * 0001-m-lua-scripting-ignore-string-integer-table-keys-when-constructing-a-JSON-Array-Object.patch + +------------------------------------------------------------------- +Fri Jan 13 10:51:07 UTC 2023 - Antonio Larrosa + +- Backport the workaround from SLE/Leap for the bug in systemd + scripts that didn't set the default enable state for the + wireplumber user service when installing wireplumber. The bug + (boo#1200485) was fixed but that's only for new installations + while this workaround will fix old installations (boo#1202008). + This is used to automatically fix installations of + SLE 15 SP4/Leap 15.4 that were not updated during it's lifetime + and upgrade directly to SP5/15.5 . + +------------------------------------------------------------------- +Wed Jan 11 12:41:28 UTC 2023 - Antonio Larrosa + +- Add upstream patches to fix glfo#pipewire/pipewire#2214 and to + handle better non-null terminated strings: + * 0001-alsa-monitor-handle-snd_aloop-devices-better.patch + * 0001-spa-json-make-sure-we-only-add-encoded-string-data.patch + * 0001-m-lua-scripting-ignore-string-integer-table-keys-when-constructing-a-JSON-Array-Object.patch + +------------------------------------------------------------------- +Tue Dec 13 14:43:46 UTC 2022 - Alexei Sorokin + +- Update to version 0.4.13: + * Additions + - Add bluetooth SCO (HSP/HFP) hardware offload support, + together with an example script that enables this + functionality on the PinePhone. + - Encoded audio (mp3, aac, etc...) can now be passed through, + if this mode is supported by both the application and the + device. + - The v4l2 monitor now also respects the ``node.disabled`` and + ``device.disabled`` properties inside rules. + - Add "Firefox Developer Edition" to the list of applications + that are allowed to trigger a bluetooth profile auto-switch. + - Add support in the portal access script to allow newly + plugged cameras to be immediately visible to the portal + applications. + * Fixes + - Work around an issue that would prevent streams from properly + linking when using effects software like EasyEffects and + JamesDSP. + - Fix destroying pavucontrol-qt monitor streams after the node + that was being monitored is destroyed. + - Fix a crash in the alsa.lua monitor that could happen when a + disabled device was removed and re-added. + - Fix a rare crash in the metadata object. + - Fix a bug where a restored node target would override the + node target set by the application on the node's properties. + * Packaging + - Add build options to compile wireplumber's library, daemon + and tools independently. + - Add a build option to disable unit tests that require the + dbus daemon. + - Stop using fakesink/fakesrc in the unit tests to be able to + run them on default pipewire installations. Compiling the spa + ``test`` plugin is no longer necessary. + - Add pkg-config and header information in the gir file. +- Rebase reduce-meson-required-version.patch +- Drop patches already upstream: + * 0001-alsa.lua-remove-the-disabled-entities-from-the-names-table.patch + * 0001-policy-node-wait-for-unactivated-links-instead-of-removing.patch + +------------------------------------------------------------------- +Tue Nov 15 08:21:15 UTC 2022 - Antonio Larrosa + +- Add patch from upstream to work around a problem when a link is + not activated: + * 0001-policy-node-wait-for-unactivated-links-instead-of-removing.patch + +- Add patch from upstream to fix handling null devices which result + in lua exceptions: + * 0001-alsa.lua-remove-the-disabled-entities-from-the-names-table.patch + +------------------------------------------------------------------- +Tue Oct 4 13:01:17 UTC 2022 - Alexei Sorokin + +- Update to version 0.4.12: + * Changes + - WirePlumber now maintains a stack of previously configured + default nodes and prioritises to one of those when the + actively configured default node becomes unavailable, before + calculating the next default using priorities. + - Updated bluetooth scripts to support the name changes that + happened in PipeWire 0.3.59 and also support the experimental + Bluetooth LE functionality. + - Changed the naming of bluetooth nodes to not include the + profile in it; this allows maintaining existing links when + switching between a2dp and hfp. + - The default volume for new outputs has changed to be 40% in + cubic scale (= -24 dB) instead of linear + (= 74% cubic / -8 dB) that it was before. + - The default volume for new inputs has changed to be 100% + rather than following the default for outputs. + - Added ``--version`` flag on the wireplumber executable. + - Added ``--limit`` flag on ``wpctl set-volume`` to limit the + higher volume that can be set (useful when incrementing + volume with a keyboard shortcut that calls into wpctl). + - The properties of the alsa midi node can now be set in the + config files. + * Fixes + - Fixed a crash in lua code that would happen when running in a + VM. + - Fixed a crash that would happen when re-connecting to D-Bus. + - Fixed a mistake in the code that would cause device + reservation not to work properly. + - Fixed ``wpctl clear-default`` to accept 0 as a valid setting ID. + - Fixed the logic of choosing the best profile after the active + profile of a device becomes unavailable + - Fixed a regression that would cause PulseAudio "corked" + streams to not properly link and cause busy loops. + - Fixed an issue parsing spa-json objects that have a nested + object as the value of their last property. +- Rebase reduce-meson-required-version.patch +- Drop patches already upstream: + * fix-alsa.patch + * 0001-dbus-fix-crash-when-trying-to-reconnect.patch + * 398.patch + +------------------------------------------------------------------- +Fri Aug 5 21:07:13 UTC 2022 - Atri Bhattacharya + +- Add 398.patch -- policy-node: fix potential rescan loop to + prevent high cpu usage (glfo#pipewire/wireplumber#152); patch + taken from upstream merge request. + +------------------------------------------------------------------- +Thu Jul 14 08:35:10 UTC 2022 - Fabian Vogt + +- Add patch to fix crash on session end: + * 0001-dbus-fix-crash-when-trying-to-reconnect.patch + +------------------------------------------------------------------- +Fri Jul 8 11:02:44 UTC 2022 - Fabian Vogt + +- Add patch to fix alsa device creation: + * fix-alsa.patch + +------------------------------------------------------------------- +Tue Jul 5 15:13:07 UTC 2022 - Alexei Sorokin + +- Update to version 0.4.11: + * Changes + - The libcamera monitor is now enabled by default, so if the + libcamera source is enabled in PipeWire, cameras discovered + with the libcamera API will be available out of the box. + This is safe to use alongside V4L2, as long as the user does + not try to use the same camera over different APIs at the + same time. + - Libcamera and V4L2 nodes now get assigned a + `priority.session` number; V4L2 nodes get a higher priority + by default, so the default camera is going to be /dev/video0 + over V4L2, unless changed with `wpctl`. + - Libcamera nodes now get a user-friendly description based on + their location (e.g. built-in front camera). Additionally, + V4L2 nodes now have a "(V4L2)" string appended to their + description in order to be distinguished from the libcamera + ones. + - 50-alsa-config.lua now has a section where you can set + properties that will only be applied if WirePlumber is + running in a virtual machine. By default it now sets + `api.alsa.period-size = 256` and `api.alsa.headroom = 8192`. + * Fixes + - The "enabled" properties in the config files are now "true" + by default when they are not defined. This fixes backwards + compatibility with older configuration files. + - Fixed device name deduplication in the alsa monitor, when + device reservation is enabled. + - Reverted a previous fix that makes it possible again to get + a glitch when changing default nodes while also changing the + profile (GNOME Settings). + The fix was causing other problems and the issue will be + addressed differently in the future. + - Fixed an issue that would prevent applications from being + moved to a recently plugged USB headset. + - Fixed an issue where wireplumber would automatically link + control ports, if they are enabled, to audio ports, + effectively breaking audio. + - The policy now always considers the profile of a device that + was previously selected by the user, if it is available, when + deciding which profile to activate. + - A few documentation fixes. + * Tools + - wpctl now has a `get-volume` command for easier scripting of + volume controls. + - wpctl now supports relative steps and percentage-based steps + in `set-volume`. + - wpctl now also prints link states. + - wpctl can now `inspect` metadata objects without showing + critical warnings. + * Library + - A new WpDBus API was added to maintain a single D-Bus + connection among modules that need one. + - WpCore now has a method to get the virtual machine type, if + WirePlumber is running in a virtual machine. + - WpSpaDevice now has a + `wp_spa_device_new_managed_object_iterator()` method. + - WpSpaJson now has a `wp_spa_json_to_string()` method that + returns a newly allocated string with the correct size of the string token. + - WpLink now has a `WP_LINK_FEATURE_ESTABLISHED` that allows + the caller to wait until the link is in the PAUSED or ACTIVE + state. This transparently now enables watching links for + negotiation or allocation errors and failing gracefully + instead of keeping dead link objects around. + * Misc + - The Lua subproject was bumped to version 5.4.4. +- Rebase reduce-meson-required-version.patch + +------------------------------------------------------------------- +Tue May 10 14:39:24 UTC 2022 - Alexei Sorokin + +- Update to version 0.4.10: + * Changes + - Add i18n support to be able to translate some user-visible + strings. + - wpctl now supports using + @DEFAULT_{AUDIO_,VIDEO_,}{SINK,SOURCE}@ as ID, almost like + pactl. Additionally, it supports a --pid flag for changing + volume and mute state by specifying a process ID, applying + the state to all nodes of a specific client process. + - The Lua engine now supports loading Lua libraries. These can + be placed either in the standard Lua libraries path or in + the "lib" subdirectory of WirePlumber's "scripts" directory + and can be loaded with ``require()`` + - The Lua engine's sandbox has been relaxed to allow more + functionality in scripts (the debug & coroutine libraries + and some other previously disabled functions) + - Lua scripts are now wrapped in special WpPlugin objects, + allowing them to load asynchronously and declare when they + have finished their loading + - Add a new script that provides the same functionality as + module-fallback-sink from PipeWire, but also takes endpoints + into account and can be customised more easily. Disabled by + default for now to avoid conflicts. + * Policy + - Add an optional experimental feature that allows filter-like + streams (like echo-cancel or filter-node) to match the + channel layout of the device they connect to, on both sides + of the filter; that means that if, for instance, a sink has + 6 channels and the echo-cancel's source stream is linked to + that sink, then the virtual sink presented by echo-cancel + will also be configured to the same 6 channels layout. This + feature needs to be explicitly enabled in the configuration + ("filter.forward-format") + - filter-like streams (filter-chain and such) no longer follow + the default sink when it changes, like in PulseAudio. + * Fixes + - The suspend-node script now also suspends nodes that go into + the "error" state, allowing them to recover from errors + without having to restart WirePlumber. + - Fix a crash in mixer-api when setting volume with + channelVolumes. + - logind module now watches only for user state changes, + avoiding errors when machined is not running. + * Misc + - The configuration files now have comments mentioning which + options need to be disabled in order to run WirePlumber + without D-Bus. + - The configuration files now have properties to + enable/disable the monitors and other sections, so that it + is possible to disable them by dropping in a file that just + sets the relevant property to false. + - setlocale() is now called directly instead of relying on + pw_init(). + - WpSpaJson received some fixes and is now used internally to + parse configuration files. + - More applications were added to the bluetooth auto-switch + applications whitelist. +- Add a new wireplumber-lang package. +- Drop patches already upstream: + * 0001-scripts-policy-device-profile-clear-tables-when-devices-removed.patch + * 0001-src-setlocale-in-main-for-tools-and-the-daemon.patch +- Rebase reduce-meson-required-version.patch + +------------------------------------------------------------------- +Wed Mar 30 16:12:03 UTC 2022 - Antonio Larrosa + +- Add patch from upstream to fix no sound on reconnection of + bluetooth device (glfo#pipewire/wireplumber#234): + * 0001-scripts-policy-device-profile-clear-tables-when-devices-removed.patch + +------------------------------------------------------------------- +Tue Mar 29 12:04:24 UTC 2022 - Antonio Larrosa + +- Add patch from upstream to set locale in apps now that pw_init + doesn't call it by itself anymore in pipewire 0.3.49: + * 0001-src-setlocale-in-main-for-tools-and-the-daemon.patch + +------------------------------------------------------------------- +Fri Mar 25 07:47:09 UTC 2022 - Antonio Larrosa + +- Make the wireplumber-audio noarch as it just contains a lua + config file. + +------------------------------------------------------------------- +Tue Mar 22 18:36:13 UTC 2022 - alarrosa@suse.com + +- Update to version 0.4.9: + * Fixes: + - restore-stream no longer crashes if properties for it are not + present in the config (#190) + - spa-json no longer crashes on non-x86 architectures + - Fixed a potential crash in the bluetooth auto-switch module + (#193) + - Fixed a race condition that would cause Zoom desktop audio + sharing to fail (#197) + - Surround sound in some games is now exposed properly + (pipewire#876) + - Fixed a race condition that would cause the default source & + sink to not be set at startup + - policy-node now supports the 'target.object' key on streams + and metadata + - Multiple fixes in policy-node that make the logic in some + cases behave more like PulseAudio (regarding nodes with the + dont-reconnect property and regarding following the default + source/sink) + - Fixed a bug with parsing unquoted strings in spa-json + * Misc: + - The policy now supports configuring "persistent" device + profiles. If a device is manually set to one of these + profiles, then it will not be auto-switched to another + profile automatically under any circumstances (#138, #204) + - The device-activation module was re-written in lua + - Brave, Edge, Vivaldi and Telegram were added in the bluetooth + auto-switch applications list + - ALSA nodes now use the PCM name to populate node.nick, which + is useful at least on HDA cards using UCM, where all outputs + (analog, hdmi, etc) are exposesd as nodes on a single profile + - An icon name is now set on the properties of bluetooth devices +- Drop patches already upstream: + * 0001-spa-json-fix-va_list-APIs-for-different-architectures.patch + * 0001-restore-stream-do-not-crash-if-config_properties-is-nil.patch + * 0002-policy-bluetooth-fix-string.find-crash-with-nil-string.patch + * 0003-si-audio-adapter-relax-format-parsing.patch +- Update split-config-file.py script + +------------------------------------------------------------------- +Thu Mar 10 12:14:13 UTC 2022 - Alexei Sorokin + +- Add patch from upstream to fix a crash on tty switch + (glfo#pipewire/wireplumber#193): + * 0002-policy-bluetooth-fix-string.find-crash-with-nil-string.patch +- Add patch from upstream to fix issues with PulseAudio support with + PipeWire 0.3.48+ (glfo#pipewire/pipewire#2189): + * 0003-si-audio-adapter-relax-format-parsing.patch +- Some spec clean-up. + +------------------------------------------------------------------- +Fri Feb 11 08:09:05 UTC 2022 - Antonio Larrosa + +- Add patch from upstream to fix va_list APIs for ppc64le and + aarch64, where va_list is not a pointer (boo#1195818): + * 0001-spa-json-fix-va_list-APIs-for-different-architectures.patch +- Add patch from upstream to fix a crash if config.properties is + nil: + * 0001-restore-stream-do-not-crash-if-config_properties-is-nil.patch + +------------------------------------------------------------------- +Mon Feb 7 17:31:11 UTC 2022 - Antonio Larrosa + +- Update to version 0.4.8: + * Highlights: + - Added bluetooth profile auto-switching support. Bluetooth + headsets will now automatically switch to the HSP/HFP profile + when making a call and go back to the A2DP profile after the + call ends (#90) + - Added an option (enabled by default) to auto-switch to + echo-cancel virtual device nodes when the echo-cancel module + is loaded in pipewire-pulse, if there is no other configured + default node + * Fixes: + - Fixed a regression that prevented nodes from being selected + as default when using the pro-audio profile (#163) + - Fixed a regression that caused encoded audio streams to stall + (#178) + - Fixed restoring bluetooth device profiles + * Library: + - A new WpSpaJson API was added as a front-end to spa-json. + This is also exposed to Lua, so that Lua scripts can natively + parse and write data in the spa-json format + * Misc: + - wpctl can now list the configured default sources and sinks + and has a new command that allows clearing those configured + defaults, so that wireplumber goes back to choosing the + default nodes based on node priorities + - The restore-stream script now has its own configuration file + in main.lua.d/40-stream-defaults.lua and has independent + options for restoring properties and target nodes + - The restore-stream script now supports rule-based + configuration to disable restoring volume properties and/or + target nodes for specific streams, useful for applications + that misbehave when we restore those (see #169) + - policy-endpoint now assigns the "Default" role to any stream + that does not have a role, so that it can be linked to a + pre-configured endpoint + - The route-settings-api module was dropped in favor of dealing + with json natively in Lua, now that the API exists +- Drop patch which is already upstream: + * 0001-default-nodes-handle-nodes-without-Routes.patch +- Update split-config-file.py script + +------------------------------------------------------------------- +Mon Jan 31 17:45:11 UTC 2022 - Callum Farmer + +- Use the default lua instead of hardcoding 5.3 + +------------------------------------------------------------------- +Tue Jan 25 15:08:59 UTC 2022 - Antonio Larrosa + +- Update to version 0.4.7: + * Fixed a regression in 0.4.6 that caused the selection of the + default audio sources and sinks to be delayed until some event, + which effectively caused losing audio output in many + circumstances (glfo#pipewire/wireplumber#148, + glfo#pipewire/wireplumber#150, glfo#pipewire/wireplumber#151, + glfo#pipewire/wireplumber#153) + * Fixed a regression in 0.4.6 that caused the echo-cancellation + pipewire module (and possibly others) to not work + * A default sink or source is now not selected if there is no + available route for it (glfo#pipewire/wireplumber#145) + * Fixed an issue where some clients would wait for a bit while + seeking (glfo#pipewire/wireplumber#146) + * Fixed audio capture in the endpoints-based policy + * Fixed an issue that would cause certain lua scripts to error + out with older configuration files + (glfo#pipewire/wireplumber#158) +- Drop patches already included upstream: + * 0001-policy-node-schedule-rescan-without-timeout-if-defined-target-is-not-found.patch + * 0002-policy-node-find-best-linkable-if-default-one-cannot-be-linked.patch +- Add patch from upstream to fix selection of Pro Audio nodes + as default nodes: + * 0001-default-nodes-handle-nodes-without-Routes.patch + +------------------------------------------------------------------- +Mon Jan 10 09:50:15 UTC 2022 - Antonio Larrosa + +- Reformat .changes file to limit lines to 67 chars when possible. + +------------------------------------------------------------------- +Sat Jan 8 16:12:57 UTC 2022 - Alexei Sorokin + +- Update to version 0.4.6: + * Fix a lot of race condition bugs that would cause strange + crashes or many log messages being printed when streaming + clients would connect and disconnect very fast. + * Improve the logic for selecting a default target device. + * Fix switching to headphones when the wired headphones are + plugged in. + * Fix an issue where "udevadm trigger" would break wireplumber. + * Fix an issue where switching profiles of a device could kill + client nodes. + * Fix briefly switching output to a secondary device when + switching device profiles (#85) + * Fix "wpctl status" showing default device selections when + dealing with module-loopback virtual sinks and sources. + * WirePlumber now ignores hidden files from the config directory. + * Fix an interoperability issue with jackdbus. + * Fix an issue where pulseaudio tcp clients would not have + permissions to connect to PipeWire. + * Fix a crash in the journald logger with NULL debug messages. + * Enable real-time priority for the bluetooth nodes to run in RT. + * Make the default stream volume configurable. + * Scripts are now also looked up in + $XDG_CONFIG_HOME/wireplumber/scripts + * Update documentation on configuring WirePlumber and fixed some + more documentation issues. + * Add support for using strings as log level selectors in + WIREPLUMBER_DEBUG. +- Drop patches merged upstream: + * 0001-m-reserve-device-replace-the-hash-table-key-on-new-insert.patch + * 0002-policy-node-wait-for-nodes-when-we-become-unlinked.patch +- Add patch from upstream to fix a pulse client hanging issue: + * 0001-policy-node-schedule-rescan-without-timeout-if-defined-target-is-not-found.patch +- Add patch from upstream to fix an issue with + libpipewire-module-echo-cancel: + * 0002-policy-node-find-best-linkable-if-default-one-cannot-be-linked.patch + +------------------------------------------------------------------- +Wed Dec 15 13:48:27 UTC 2021 - Antonio Larrosa + +- Remove many build dependencies which aren't really needed + +------------------------------------------------------------------- +Sat Dec 11 16:54:56 UTC 2021 - Fabian Vogt + +- Use %autosetup, apply patches unconditionally +- Hard depend on wireplumber-audio if pipewire-pulseaudio is installed + +------------------------------------------------------------------- +Thu Dec 9 12:08:45 UTC 2021 - Antonio Larrosa + +- Supplements: (pipewire-pulseaudio and wireplumber) so everyone + having those two packages already installed automatically get + wireplumber-audio pulled in. + +------------------------------------------------------------------- +Thu Dec 9 10:08:43 UTC 2021 - Bjørn Lie + +- Quiet setup of sources, no need to see the package untared. +- Disable tests for ppc64 for now like we do for i586. + +------------------------------------------------------------------- +Fri Dec 3 18:12:42 UTC 2021 - Antonio Larrosa + +- Split the configuration to separate the audio initialization + to a new wireplumber-audio subpackage. This way, if that package + is not installed, pipewire doesn't open the audio devices, thus + not entering a race-condition with pulseaudio but still allowing + to manage v4l2 devices and sharing the screen in wayland, for + example (boo#1188516). + +------------------------------------------------------------------- +Wed Nov 24 16:09:52 UTC 2021 - Antonio Larrosa + +- Add patches from upstream to fix wireplumber breaking when + udevadm trigger is run: + * 0001-m-reserve-device-replace-the-hash-table-key-on-new-insert.patch +- And another patch to fix an issue where there is only 1 sink + available and the card profile is toggeled between pro and + stereo: + * 0002-policy-node-wait-for-nodes-when-we-become-unlinked.patch + +------------------------------------------------------------------- +Thu Nov 11 13:25:33 UTC 2021 - alarrosa@suse.com + +- Update to version 0.4.5: + * Fixes: + - Fixed a crash that could happen after a node linking error + (glfo#pipewire/wireplumber#76) + - Fixed a bug that would cause capture streams to link to + monitor ports of loopback nodes instead of linking to their + capture ports + - Fixed a needless wait that would happen on applications using + the pipewire ALSA plugin (glfo#pipewire/wireplumber#92) + - Fixed an issue that would cause endless rescan loops in + policy-node and could potentially also cause other strange + behaviors in case pavucontrol or another monitoring utility + was open while the policy was rescanning + (glfo#pipewire/wireplumber#77) + - Fixed the endpoints-based policy that broke in recent + versions and improved its codebase to share more code and be + more in-line with policy-node + - The semicolon character is now escaped properly in state + files (glfo#pipewire/wireplumber#82) + - When a player requests encoded audio passthrough, the policy + now prefers linking to a device that supports that instead of + trying to link to the default device and potentially failing + (glfo#pipewire/wireplumber#75) + - Miscellaneous robustness fixes in policy-node + * API: + - Added WpFactory, a binding for pw_factory proxies. This + allows object managers to query factories that are loaded in + the pipewire daemon + - The file-monitor-api plugin can now watch files for changes + in addition to directories + +- Remove patches already included by upstream: + * 0001-si-standard-link-fix-crash-after-returning-a-link-error.patch + * 0002-policy-node-enforce-the-direction-of-the-target-when-linking-by-node-name.patch + * 0001-add-missing-break-in-best-route-selection-logic.patch + +------------------------------------------------------------------- +Wed Nov 3 08:34:01 UTC 2021 - Antonio Larrosa + +- Add patch from upstream to fix a problem saving the default + route: + * 0001-add-missing-break-in-best-route-selection-logic.patch + +- Add patch to let wireplumber build in Leap 15.3/SLE-15-SP3 + which only have meson 0.54: + * reduce-meson-required-version.patch + +------------------------------------------------------------------- +Thu Oct 21 10:15:34 UTC 2021 - Antonio Larrosa + +- Add %post/%pre/... sections to enable the user service + automatically + +------------------------------------------------------------------- +Tue Oct 19 10:59:25 UTC 2021 - Antonio Larrosa + +- Add patch from upstream to fix selection of capture ports instead + of monitor ports: + * 0002-policy-node-enforce-the-direction-of-the-target-when-linking-by-node-name.patch + +------------------------------------------------------------------- +Tue Oct 19 07:25:22 UTC 2021 - Antonio Larrosa + +- Add patch from upstream to fix a crash when there's a link error + (glfo#pipewire/wireplumber#76): + * 0001-si-standard-link-fix-crash-after-returning-a-link-error.patch + +------------------------------------------------------------------- +Fri Oct 15 15:55:46 UTC 2021 - alarrosa@suse.com + +- Update to version 0.4.4: + * Highlights: + - Implemented linking nodes in passthrough mode, which enables + encoded iec958 / dsd audio passthrough + - Streams are now sent an error if it was not possible to link + them to a target (#63) + - When linking nodes where at least one of them has an + unpositioned channel layout, the other one is not + reconfigured to match the channel layout; it is instead + linked with a best effort port matching logic + - Output route switches automatically to the latest one that + has become available (#69) + - Policy now respects the 'node.exclusive' and 'node.passive' + properties + - Many other minor policy fixes for a smoother desktop usage + experience + * API: + - Fixed an issue with the LocalModule() constructor not + accepting nil as well as the properties table properly + - Added WpClient.send_error(), WpSpaPod.fixate() and + - WpSpaPod.filter() (both in C and Lua) + * Misc: + - Bumped meson version requirement to 0.56 to be able to use + meson.project_{source,build}_root() and ease integration with + pipewire's build system as a subproject + - wireplumber.service is now an alias to + pipewire-session-manager.service + - Loading the logind module no longer fails if it was not found + on the system; there is only a message printed in the output + - The logind module can now be compiled with elogind (#71) + - Improvements in wp-uninstalled.sh, mostly to ease its + integration with pipewire's build system when wireplumber is + build as a subproject + - The format of audio nodes is now selected using the same + algorithm as in media-session + - Fixed a nasty segfault that appeared in 0.4.3 due to a typo + (#72) + - Fixed a re-entrancy issue in the wplua runtime (#73) + +- Update to version 0.4.3: + * Fixes: + - Implemented logind integration to start the bluez monitor + only on the WirePlumber instance that is running on the + active seat; this fixes a bunch of startup warnings and the + disappearance of HSP/HFP nodes after login (#54) + - WirePlumber is now launched with GIO_USE_VFS=local to avoid + strange D-Bus interference when the user session is + restarted, which previously resulted in WirePlumber being + terminated with SIGTERM and never recovering (#48) + - WirePlumber now survives a restart of the D-Bus service, + reconnecting to the bus and reclaiming the bus services that + it needs (#55) + - Implemented route-settings metadata, which fixes storing + volume for the "System Sounds" in GNOME (#51) + - Monitor sources can now be selected as the default source + (#60) + - Refactored some policy logic to allow linking to monitors; + the policy now also respects "stream.capture.sink" property + of streams which declares that the stream wants to be linked + to a monitor (#66) + - Policy now cleans up 'target.node' metadata so that streams + get to follow the default source/sink again after the default + was changed to match the stream's currently configured target + (#65) + - Fixed configuring virtual sources (#57) + - Device monitors now do not crash if a SPA plugin is missing; + instead, they print a warning to help users identify what + they need to install (!214) + - Fixed certain "proxy activation failed" warnings (#44) + - iec958 codec configuration is now saved and restored properly + (!228) + - Fixed some logging issues with the latest version of pipewire + (!227, !232) + - Policy now respects the "node.link-group" property, which + fixes issues with filter-chain and other virtual sources & + sinks (#47) + - Access policy now grants full permissions to flatpak + "Manager" apps (#59) + * Policy: + - Added support for 'no-dsp' mode, which allows streaming audio + using the format of the device instead of the standard float + 32-bit planar format (!225) + * Library: + - WpImplMetadata is now implemented using pw_impl_metadata + instead of using its own implementation (#52) + - Added support for custom object property IDs in WpSpaPod + (#53) + * Misc: + - Added a script to load the libcamera monitor (!231) + - Added option to disable building unit tests (!209) + - WirePlumber will now fail to start with a warning if + pipewire-media-session is also running in the system (#56) + - The bluez monitor configuration was updated to match the + latest one in pipewire-media-session (!224) + +- Update to version 0.4.2: + * Highlights: + - Requires PipeWire 0.3.32 or later at runtime + - Configuration files are now installed in + $PREFIX/share/wireplumber, along with scripts, following the + paradigm of PipeWire + - State files are now stored in $XDG_STATE_HOME instead of + $XDG_CONFIG_HOME + - Added new file-monitor-api module, which allows Lua scripts + to watch the filesystem for changes, using inotify + - Added monitor for MIDI devices + - Added a system-lua-version meson option that allows + distributors to choose which Lua version to build against + (auto, 5.3 or 5.4) + - wpipc has been removed and split out to a separate project, + https://git.automotivelinux.org/src/pipewire-ic-ipc/ + * Library: + - A new WpImplModule class has been added; this allows loading + a PipeWire module in the WirePlumber process space, keeping a + handle that can be used to unload that module later. This is + useful for loading filters, network sources/sinks, etc... + - State files can now store keys that contain certain + GKeyFile-reserved characters, such as [, ], = and space; this + fixes storing stream volume state for streams using + PipeWire's ALSA compatibility PCM plugin + - WpProperties now uses a boxed WpPropertiesItem type in its + iterators so that these iterators can be used with g-i + bindings + - Added API to lookup configuration and script files from + multiple places in the filesystem + * Lua: + - A LocalModule API has been added to reflect the functionality + offered by WpImplModule in C + - The Node API now has a complete set of methods to reflect the + methods of WpNode + - Added Port.get_direction() + - Added not-equals to the possible constraint verbs + - Debug.dump_table now sorts keys before printing the table + * Misc: + - Tests no longer accidentally create files in $HOME; all + transient files that are used for testing are now created + in the build directory, except for sockets which are created + in /tmp due to the 108-character limitation in socket paths + - Tests that require optional SPA plugins are now skipped if + those SPA plugins are not installed + - Added a nice summary output at the end of meson configuration + - Documented the Lua ObjectManager / Interest / Constraint APIs + - Fixed some memory leaks + +------------------------------------------------------------------- +Wed Jul 14 14:57:37 UTC 2021 - Antonio Larrosa + +- Remove the Conflicts: pipewire-session-manager. There's no + problem in having both installed at the same time, they just + can't run at the same time. + +------------------------------------------------------------------- +Wed Jul 14 06:25:10 UTC 2021 - Antonio Larrosa + +- Add `Provides: pipewire-session-manager` so wireplumber is + recognized as a pipewire session manager implementation. +- Add `Conflicts: pipewire-session-manager` so no other session + manager is installed at the same time. + +------------------------------------------------------------------- +Tue Jul 13 06:23:39 UTC 2021 - Antonio Larrosa + +- Update to version 0.4.1: + * Highlights: + + WirePlumber now supports Lua 5.4. You may compile it either + with Lua 5.3 or 5.4, without any changes in behavior. The + internal Lua subproject has also been upgraded to Lua 5.4, so + any builds with -Dsystem-lua=false will use Lua 5.4 by + default + * Fixes: + + Fixed filtering of pw_metadata objects, which broke with + PipeWire 0.3.31 + + Fixed a potential livelock condition in + si-audio-adapter/endpoint where the code would wait forever + for a node's ports to appear in the graph + + Fixed granting access to camera device nodes in flatpak + clients connecting through the camera portal + + Fixed a lot of issues found by the coverity static analyzer + + Fixed certain race conditions in the wpipc library + + Fixed compilation with GCC older than v8.1 + * Scripts: + + Added a policy script that matches nodes to specific devices + based on the "media.role" of the nodes and the + "device.intended-roles" of the devices + * Build system: + + Bumped GLib requirement to 2.62, as the code was already + using 2.62 API + + Added support for building WirePlumber as a PipeWire + subproject + + Doxygen version requirement has been relaxed to accept v1.8 + + The CI now also verifies that the build works on + Ubuntu 20.04 LTS and tries multiple builds with different + build options + +------------------------------------------------------------------- +Thu Jun 24 10:46:58 UTC 2021 - alarrosa@suse.com + +- Update to version 0.4.0: + * release 0.4.0 + * create-item: handle all kinds of Audio/Video & Stream nodes + * si-standard-link: treat endpoints as devices when linking + stream<->endpoint + * config: document the duck.level policy property + * scripts: change debug level for some messages + * lua: improve the object:activate() callback to report errors + * wplua: add a wplua_checkclosure() helper function + * Revert "tests: enable G_SLICE=debug-blocks in all tests" + * meson: add '--keep-debuginfo=yes' to the valgrind command line + * pipewire-object: change params-changed signal to take a string + param name + * tests: enable G_SLICE=debug-blocks in all tests + * meson: use environment() objects to define env for tests + * meson: add a test setup to run tests under valgrind + * daemon/wpexec: standardize exit codes based on sysexits.h + * daemon: replace the exit_message with direct message printouts + * wpexec: force the log level to be at least 1 and use fprintf() + for local errors + * daemon: exit with 0 both in case of a signal and in case of + disconnection + * tests: si-standard-link: remove unneeded core syncs + * tests: common: make sure no events are pending before + destroying core + * lib: add struct paddings to be able to maintain ABI + compatibility + * docs: set breathe_default_members to get struct members to show + up in the docs + * docs: remove :project: annotations for breathe + * pw-object-mixin: ignore set param on already destroyed objects + * proxy: destroy pw_proxy if bind_error is called + * restore-stream: implement storing/restoring of target.node + metadata + * lua: implement metadata:set() + * lua: fix refcounting of metadata iterator + * wplua: fix memleak when converting GVariant to Lua + * m-default-nodes-api: free default nodes when disabling plugin + * m-default-nodes: free default nodes when disabling plugin + * global-proxy: fix leak when getting global properties + * spa-pod: check if pod is valid before _parser_can_collect + * lua: remove hack around WpObjectInterest since we can _ref() + it now + * object-interest: remove unused _copy() method + * default-routes: use a constraint to check if device.name is + present + * default-routes: fix storing dev_info + * scripts: initial restore-stream implementation + * object-manager: small doc fix + * object-manager: support declaring interest on all properties of + globals + * object-interest: enrich _matches_full() to be able to check all + constraints + * si-adapter: handle autoconnect property + * si-adapter: handle dont-remix streams + * tests: store temporary WpState files in the build directory + * state: remove support for groups and propagate save errors + * state: don't stat() before creating the dir or removing the + state file + * policy: don't crash if some node properties are not set + * pipewire-object: fix memory leaks when getting properties + * m-default-profiles: finalize parent when plugin is destroyed + * si-adapter: take ownership of format argument + * endpoint: free media_class when disposing WpImplEndpoint + * pipewire-object: take ownership of param argument + * monitors: sanitize device names like media-session does + * object: advance pending transitions if activation fails + * modules: remove the old m-default-routes + * m-device-activation: don't set device routes + * default-routes: re-implement the default-routes module in lua + * docs: Write gtk-doc comments for constant variables + * docs: include wp.h in gir sources + * docs: Add brief descriptions to all functions + * policy: destroy node if defined target was not found and + reconnect is false + * global-proxy: make sure registry is valid before requesting + destroy + * lua: don't crash if an iterator is NULL + * lua: allow the Log api to debug boxed objects (useful for pods) + * lua: fix PipewireObject api: s/set_params/set_param/ and + cleanup + * lua: add WpState bindings + * object: use weakref when advancing current transition + * object: use destroy notify to keep self alive while advancing + transitions + * docs: make progress on lua api documentation + * policy-{node,endpoint-client}: do not crash if media.class is + nil + * meson: add reference to bugfix + * config: disable role-based endpoints in the default + configuration + * tests: si-audio-adapter: test is.device property + * m-si-standard-link: fix number of links check + * tests: si-standard-link: fix racy test + * meson: force the gir target to depend on wp-gtkdoc.h + * docs: tidy up most documents and try to update the information + in them + * docs: use the default sidebar color to make the version easier + to read + * docs: show version number on the sidebar + * release 0.3.96 + * Makefile: use wp-uninstalled.sh to implement the run target + * gitignore: remove obsolete entry + * editorconfig: remove obsolete entry and add python script rules + * LICENSE: update copyright years + * docs: convert NEWS to rst and add it in the generated docs + * docs: update installing-wireplumber page + * ci: bump distribution tag date to the actual branch merge day + * gir: fix generate_gir() + * docs: convert lua api docs to pure rst + * docs: fix gobject-introspection data generation + * ci: update fdo template, fedora image and dependencies for docs + * docs: improve the home page and toc; use README.rst as a base; + add badges + * docs: fix C API documentation to work nicely with doxygen & + sphinx + * docs: meson: rebuild docs when Doxyfile.in changes + * docs: setup sphinx to use the graphviz extension + * docs: improve the visual appearence of the generated html and + cleanup + * docs: reorganize .rst files and add tables of contents for the + APIs + * meson: refactor docs + gi build system + * docs: build gobject introspection from xml files generated by Doxygen + * ci: replace hotdoc with Doxygen, Sphinx and Breathe tools + * docs: Add Lua API documentation + * docs: api: Replace hotdoc specific commands with Doxygen + specific commands + * docs: Replace hotdoc with Doxygen & Sphinx to generate + documentation + * pipewire-object-mixin: fix memleak in GList + * policy-endpoint-device: wait until previous links are activated + * m-si-standard-link: remove unused manage.lifetime configuration + property + * tests: enable si-standard-link test and port it to new API + * wplua: ref closure before invalidating it + * wpctl: fix iterator cleanup + * endpoint: remove wp_endpoint_create_link() + * scripts: remove static-sessions + * wp: remove WpSession and WpEndpointLink + * policy: don't link endpoints on startup + * m-default-nodes: check if node is valid before returning bound + id + * policy: reevaluate all linkables if one linkable was removed + * m-default-routes: log error message when failed to get current + routes + * m-default-profile: log error message when failed to get current + profile + * m-mixer-api: make sure the enum param iterator is valid + * pipewire-object-mixin: make sure enum params task is only + triggered once + * modules: steal the format_task before returning it + * systemd: Add conflicts with pipewire-media-session + * proxy: don't accept NULL pw_proxy in set_pw_proxy API + * m-device-activation: use sync API to enum available profiles + * m-default-routes: use sync API to enum available routes + * m-default-profile: use sync API to enum available profiles + * global-proxy: delay object creation until bound feature is + requested + * alsa-monitor: activate BOUND feature in JACK device + * tests: proxy: add a test for enum_params errors + * proxy: relax proxy error warning messages + * pw-object-mixin: watch for proxy errors during enum_params + * proxy: add a "bind" watch, to watch for proxy errors while + binding/exporting + * proxy: add error signal + * policy: fix removing of item links when linkable is removed + * tests: spa-pod: fix int64 constant to work on all architectures + * global-proxy: destroy the global when proxy is destroyed + * global-proxy: inherit from WpProxy when declaring class + * spa-pod: respect the SPA size for long and int APIs + * si-standard-link: configure the format in WpSiAdapters before + linking + * modules: implement WpSiAdapter in si-audio-adapter and + si-audio-endpoint + * si-interfaces: add WpSiAdapter interface to set and get session + item fortmat + * session-item: add _get_property API + * si-audio-adapter: remove unneeded 'preferred.n.channels' + property + * si-standard-link: make sure create_links creates at least 1 + link + * modules: remove role and priority properties from + si-audio-adapter and si-node + * si-interfaces: rename WpSiPortInfo to WpSiLinkable + * scripts: cleaned and improved policy scripts + * create-item.lua: always enable monitor ports by default + * modules: remove 'monitor' port context from si-audio-adapter + and si-node + * release 0.3.95 + * meson: depend on pipewire 0.3.26 + * config: bluez: update to match media-session's + bluez-monitor.conf + * lua: rename Plugin() to Plugin.find() + * session-item: remove undefined API + * wp: remove WpSessionBin + * wp: rename debug.{h,c} to log.{h,c} + * config: disable ipc module by default and move it to the main + instance + * wpipc: place sockets in the same runtime directory as pipewire + * m-ipc: cleanup server using g_clear_pointer() for consistency + and safety + * wpipc: remove socket files after shutdown of the server + * meson: generate and install pkg-config file for wpipc + * meson: find threads_dep early and also use it in the + wpipc-client + * wpipc: use proper api & so versions + * meson: replace join_paths() with operator / + * meson: remove audiofade pipewire branch check + * meson: make wpipc optional and disabled by default + * policy-node: accept node names or paths in a stream's + node.target property + * policy-endpoint-client-links.lua: consider 'suspend.playback' + metadata + * modules: add ipc module + * lib: add wpipc library + * config: unify config and config-split + * systemd: add templated systemd unit files + * policy-endpoint: implement volume ducking + * m-mixer-api: track monitorVolumes and allow modifying them + * access: add a more generic "default" access policy script + * config: add an example of split-instance configuration + * Add a wp-uninstalled.sh script for easily running programs + uninstalled + * lua: remove the ability to specify spa_libs in the lua config + * daemon: init export core in the daemon and share it with + modules + * lua: change the "wireplumber.interactive" property to + "wireplumber.daemon" + * daemon: Use a pipewire-style config file to load initial + configuration + * core: use log.level from the pw_context + * log: factor out the log level configuration into + wp_log_level_set() + * audio-endpoint: configure adapter for null sink with + monitor.channel-volumes + * impl-node: implement WpPipewireObject + * device: debug and enhance spa device event handling + * config: policy: improve the endpoints & roles example config + * policy-endpoint-client: remove handling of move & follow and + endpoint priorities + * meson: bump version to 0.3.70 + * m-mixer-api: allow calling the action signals even when the + plugin is not enabled + * m-default-nodes-api: remove reduntant call to g_clear_object + * wplua: store closures only with a weak reference + * examples: add example script to get the default sink's volume + * scripts: add policy for links between clients and endpoints + * lua: add WpObject get_active/supported_features() bindings + * lua: add g_get_real/monotonic_time() bindings + * si-audio-endpoint: give better descriptions to endpoints and + their null sinks + * static-endpoints: avoid capturing session item reference in + the activate closure + * policy: export endpoints, do not export endpoint links + * wpctl: handle endpoints nicely and enable volume controls on + them + * tools: split wireplumber script execution mode to a separate + wpexec tool + * tools: move under the 'src' directory + * src: scripts: rename policy-endpoint.lua to + policy-endpoint-client.lua + * m-audio-endpoint: remove target property + * static-endpoints.lua: don't export endpoints, only activate + them + * m-mixer-api: add configurable support for the cubic volume + scale + * wpctl: use mixer & default-nodes API modules + * m-mixer-api: also add channel-independent volume for ease of + use + * wpctl: remove obsolete default node/endpoint key macros + * m-mixer-api: fix getting volume info from nodes that don't + have volumeBase & step + * lua: add a Debug.dump_table() utility function + * m-default-nodes-api: load all information before declaring the + plugin as "enabled" + * lua: add a Core.require_api() utility function + * modules: add module-mixer-api + * src: config: do not create endpoints by default + * src: scripts: add policy-endpoint.lua script + * policy-node.lua: do not handle items with media role if + endpoints exist + * policy-node.lua: clean up findTarget function + * src: scripts: add static-endpoints.lua script + * modules: remove unneeded si-audio-convert module + * src: config: rename session-item support to default-policy + * create-item.lua: only create items for client and device + nodes + * policy-item.lua: only handle si-audio-adapter and si-nodes + links + * src: scripts: remove unneeded policy-endpoint.lua + * m-lua-scripting: add object manager get_n_objects API + * si-audio-endpoint: deactivate node when disabling active + feature + * m-si-audio-endpoint: fix port configuration and target + linking + * m-si-audio-endpoint: make target property optional + * tests: si-standard-link: sync core before finishing + * si-standard-link: call parent class finalize once finalized + * m-si-standard-link: properly set in item port context when + configuring + * policy-node.lua: fix param name typo when finding target + * policy-node: properly remove links between apps and capture + devices + * endpoint: remove useless pw_proxy_destroyed handlers + * registry: fix issues with dangling WpGlobal objects causing + assertion failures + * modules: use dots instead of dashes for session item properties + * wpctl: status: print nodes, ports, links grouped more nicely + * registry: fix odd assertion failures that occured from time to + time + * policy-node.lua: support config.move and config.follow + * m-si-audio-adapter: abort activation if node feature ports is + no longer enabled + * m-si-standard-link: make sure in/out items are valid before + activating + * wpctl: fix setting default nodes + * m-default-nodes: restore configured values on the metadata at + startup + * policy-node: use default-nodes-api plugin + * modules: add new module-default-nodes-api + * m-default-nodes: move common code to a new header + * m-default-nodes: add properties to control storage method and + interval + * modules: rename default-metadata to default-nodes and enable it + always in the config + * m-default-metadata: remove default endpoints, follow upstream + logic + * policy-node.lua: fix type mismatch when comparing session item + Ids + * lua: s/Feature.Object.ALL/Features.ALL/ + * bluez config: update based on the latest media-session config + * m-default-metadata: add support for default audio nodes + * wpctl: list nodes and allow setting default nodes + * modules: remove endpoint impl on si-node, si-audio-convert and + si-audio-adapter + * tests: si-standard-link: use new si-audio-endpoint + * modules: add si-audio-endpoint session item + * src: scripts: add policy-node.lua to link port info session + items + * src: config: rename endpoint-support to session-item-support + * modules: remove si-monitor module + * src: scripts: add create-item.lua and remove + create-endpoint.lua + * m-si-standard-link: set out-item-id and in-item-id properties + * session-item: add id property + * m-si-audio-adapter: ensure ports are available before enabling + active + * m-lua-scripting: add get_associated_proxy session item Lua API + * si-interfaces: make WpSiLink work with WpSiPortInfo instead of + WpSiEndpoint + * si-interfaces: rename WpSiEndpointAcquisition to + WpSiAcquisition + * m-si-standard-link: use a weak reference for in and out + endpoints + * m-si-standard-link: fix in-endpoint check when configuring + * wplua: sort properties after transfering them from lua + * properties: add wp_properties_sort() + * monitor-alsa: add api.alsa.card.* properties on nodes + * bluez5: autoconnect bluetooth stream nodes + * object: deactivate only the features that were previously + active + * bluez5: use api.bluez5.connection-info + * m-si-convert: rename to si-audio-convert + * m-si-adapter: rename to si-audio-adapter + * tests: session-item: add registration test + * object-interest: add support for session item properties + * session-item: add _register and _remove API + * session-item: refactor and inherit from WpObject + * session-bin: remove unused wp_session_bin_new API + * lib: make WpImplEndpoint and WpImplEndpointLink public + * m-si-adapter: rename algorithms to audio-utils + * m-si-monitor-endpoint: rename to si-monitor + * m-si-simple-node-endpoint: rename to si-node + * lib: remove WpEndpointStream API + * wp_init: set PIPEWIRE_DEBUG + * spa-device: do not assert if the activation transition fails + * m-default-routes: return if default routes for a device are + not found + * m-default-routes: relax some warning logs to debug + * m-lua-script: add object_deactivate API + * m-lua-script: add closure for object_activate API + * object: add wp_object_activate_closure API + * ci: use 'disabled' instead of 'false' when configuring pipewire + * m-lua-scripting: add WpSessionBin add API + * lib: remove WpConfiguration + * lib: documentation fixes + * lua/api: add Link() constructor + * module-default-routes: store/restore route properties + * module-device-activation: apply default route on each new + device + * modules: add module-default-routes for storing/restoring routes + * lua/api: default Constraint type always to pw-global + * object-interest: remove type checks + * lua/api: simplify & improve session_item_configure + * lua/api: make the type optional when declaring Interest as a + function argument + * lua/api: improve getting optional Interest arguments + +------------------------------------------------------------------- +Tue Mar 02 12:34:35 UTC 2021 - alarrosa@suse.com + +- Update to version 0.3.60+git.20210301.6c2bfea: + * scripts: policy-endpoints: add move and follow options + * m-lua-scripting: add get_n_streams endpoint API + * m-lua-scripting: add lookup session API + * examples: add bt-profile-switch example + * lua/pod: don't crash on parsing objects with unknown keys, + just ignore them + +------------------------------------------------------------------- +Fri Feb 26 16:12:01 UTC 2021 - alarrosa@suse.com + +- Update to version 0.3.60+git.20210225.9f50117: + * lib: remove module.{c,h} + * meson: fix glib version requirement checks + * systemd: use the older version of the systemd pkgconfig + variables + * systemd: remove RuntimeDirectory from the system service + * daemon: add systemd unit files + * m-lua-scripting/pod: retrieve Ids in Array & Choice as + strings, if possible + * m-lua-scripting/pod: s/id_type/object_id/ as commented on !125 + * m-lua-scripting: add support for choices when creating object + pods + * m-lua-scripting: refactor array and choice pod constructors to + accept Id names + * m-lua-scripting: allow constructing pod Ids with the Id name + * m-lua-scripting: set id_type field when parsing pod objects + * m-lua-scripting: set pod_type and value_type fieds when parsing + non-primitive pods + * m-lua-scripting: start indices from 1 when parsing pods + * test-endpoint: fix failure with pipewire master + * config: split flatpak access configuration + * scripts/access: update access scripts to call + update_permissions() cleanly + * lua/api: fix client update_permissions() + * examples: interactive.lua: add a shebang and update running + instructions + * lua: enable loading scripts with a shebang + * lua/api: log using a debug category unique for the calling + script file + * lua/api: ensure the function name in the debug output is + non-null + * monitor-alsa: fix node description on strange embedded devices + * suspend-node: honor "session.suspend-timeout-seconds" + * monitors: sanitize node descriptions too + * wplua: table_to_properties: use luaL_tolstring to do string + conversions + * config: bluez-monitor: add hfp_hf in the supported roles + comment + * m-lua-scripting: add WpPipewireObject api + * config: move loading of all audio support modules in + 90-enable-audio-all + * config: split configuration for endpoints support in + config.lua.d + * monitors: drop the monitor- prefix from the filenames and + s/bluez5/bluez/ + * config: make the monitor properties & rules available in global + tables + * config: load reserve-device only if alsa.reserve is true + * monitor-bluez: fix source priority assignment + * monitors: sanitize node names to match media-session's behavior + * wplua: gvariant_to_lua: convert dictionary keys to integers if + possible + * monitor-alsa: sync logic, properties and configuration with + media-session + * wplua: improve GVariant array conversion + * wplua: improve gvariant <-> lua conversion functions + * wplua: remove VARDICT handling in gvariant->lua conversion + * config: mimick media-session's v4l2-monitor.conf + * monitor-v4l2: copy properties and rules logic from + media-session + * config: immitate media-session's bluez-monitor.conf + * monitor-bluez: copy all properties and the rules functionality + from media-session + * lua/config: load split config files in alphanumeric order + * tests/lua: test monitor configuration rules code + * lua/api: add wp_object_interest_matches() binding + * object-interest: allow matching against WpProperties objects + * scripts: add portal access script + * scripts: add flatpak access lua script + * wplua: handle more GVariant cases + * m-lua-scripting: add WpClient LUA api + * Revert "meson: relax meson version dependency when building + with system lua" + * meson: relax meson version dependency when building with system + lua + * lua/pod: optimize push_primitive_values() + * tests/wplua: set WIREPLUMBER_CONFIG_DIR to an invalid directory + * lua/pod: simplify spa_pod_object_new() + * lua/pod: optimize lookups in primitive_lua_type and fix some + mistakes + * lua/pod: lookup the object type and values table only once when + constructing objects + * lua/pod: convert Id object fields to strings, if possible + * rename all foo_iterate APIs to foo_new_iterator + * m-lua-scripting/pod: push pod constructors using luaL_newlib + instead of manually + * modules: remove m-node-suspension + * m-lua-scripting/api: fix om:lookup() to return nil when no + object was found + * scripts: add suspend-node.lua to replace m-node-suspension + * wplua: fix enum <-> lua conversion + * create-endpoint.lua: fix some issues + * create-endpoint.lua: fix indentation + * node: change send_command() to take a string + * tests: wplua: add pod.lua script to validate pod API + * tests: wplua: add a script tester to validate lua scripts + * m-lua-scripting: add WpSpaPod api + * wplua: fix vtables lookup in boxed __index function + * examples: add an example interactive lua script + * m-lua-scripting/api: add wp_object_manager_iterate_filtered() + * proxy: add a method to query the interface type + * daemon: add a mode to execute lua scripts from the command line + * m-lua-scripting/api: add WpCore bindings + * m-lua-scripting/api: fix access to core in session_item_new() + * meson: bump version + * meson: remove C++ support, there's no C++ code anymore + * monitor-alsa: simplify reserve-device connection logic + * monitor-alsa: receive script configuration from config.lua + * scripts: add static-sessions.lua + * m-lua-scripting/api: add WpImplSession bindings + * m-lua-scripting: pass component arguments to scripts + * wplua: pass SANDBOX_CONFIG as a script argument + * wplua: allow exchanging arguments and results with scripts + * m-lua-scripting: use wplua_table_to_asv() instead of custom + function + * wplua: add GVariant dictionary conversion functions + * wptoml: remove, it's not used anymore + * daemon: refactor + * m-lua-scripting: fixes + * wp: add wp_get_data_dir() + * src: move scripts to their own directory, install in + $prefix/share/ + * object-interest: add a NOT_EQUALS verb + * m-lua-scripting: allow queuing-in scripts without the plugin + being activated + * m-lua-scripting: refactor as a WpComponentLoader + * wplua: allow loading relative paths from wplua_load_path() + * wplua: add g_autoptr support to lua_State + * wplua: add flags to modify the sandbox behavior + * wp: export functions to get the module & config dirs + * lib: introduce WpComponentLoader and remove WpModule + * plugin: inherit from WpObject + * modules: remove modules that are obsoleted by the lua scripts + * modules: actually delete module-dbus-reservation.c + * monitor-alsa: add device reservation logic + * spa-device: add an "object-removed" signal + * lua: add wp_plugin_find binding + * modules: delete the old dbus-reservation module + * modules: implement a new reserve-device module + * plugin: add a method to find plugins easily + * conf: create-endpoint.lua: make sure endpoints always have a + valid name + * conf: create-endpoint.lua: use node id as key in session_items + table + * meson: add 'system-lua' project option to toggle the bundled + lua + * conf: disable legacy endpoint creation module and replace it + with lua script + * m-lua-scripting: add session item lua API + * session-item: add export API with closure + * session-item: add activate API with closure + * docs: update daemon/running.md + * m-lua-scripting: fix reference count in object manager's lookup + API + * object-interest: add _ref and _unref APIs + * config: enable lua scripts, disable legacy modules + * lua: fix some nasty memory leaks + * meson: require pipewire 0.3.20 + * spa-device: handle DeviceEvent and configure node props + * m-lua-scripting: do stop the lua engine on deactivate() + * main: drop WpConfiguration reference early + * plugin: debug activation & deactivation + * wplua: object: unset GValues used when calling action signals + * config: add lua-based device monitors + * m-lua-scripting: add bindings required for device monitors + * impl-node: derive from WpProxy + * spa-device: derive from WpProxy and manage child objects + internally + * m-default-metadata: handle default nodes + * config: rename desktop profile to desktop-ep + * spa-pod: add the ability to specify Id properties as strings + * spa-type: refactor + * m-lua-scripting: handle default endpoints from the metadata + * m-config-policy: handle default endpoints from the metadata + * modules: replace session-settings with default-metadata + * wpctl: implement set-default using the metadata API + * meson: fix lua dependency on Arch Linux + * metadata: refactor API to quickly find a specific value + * state: use GKeyFile API to keep state in disk + * wp: remove initialization of wireplumber types + * session: remove default-endpoint-changed signal + * spa-type: fix param profile's last Id + * config: implement the functionality of config-policy in Lua + * m-lua-scripting: expose session, endpoint, endpoint-link APIs + * wplua: expose table to/from properties conversion functions + * object, pw-obj-mixin: fix warnings + * config: disable audio sink "streams"; they fail on latest + pipewire + * Fix compiler warnings that appear with the warning flags + enabled + * meson: enable compiler flags for warnings, if supported + * modules: implement module-lua-scripting + * wplua: use only the basename of the files for debug/error + messages + * wplua: use the error handler also when loading chunks + * wplua: implement __tostring for GObject + * wplua: use the registry to store vtables & closures + * wplua: remove TypeClass, push constructors as ClassName_new + * wplua: allow checking for a specific GType with + isobject/isboxed + * configuration: convert file paths from relative to absolute if + necessary + * configuration: implement grouping files in subdirectories + * wplua: add proper GError domain & error codes + * wplua: implement sandboxing of scripts + * wplua: convert WpProperties to table and vice versa + * wplua: new simple engine to integrate GObject with Lua + * meson: add dependency on lua 5.3 + * tools: port wpctl to the new APIs + * tests: endpoint: re-enable the params unit test + * lib: delete WpProps + * pw-object-mixin: refactor, implement param caching and features + for impl objects + * iterator: add version field in the methods struct + * meson: bump project & API versions + * spa-pod: make the wrap functions public, remove private.h and + sort out the rest + * private: further cleanup of private.h, sort out header includes + * session-item: move wp_session_item_set_parent() to the public + header + * defs: add a new WP_PRIVATE_API function annotation + * iterator: make private stuff public, cleanup private.h further + * lib: move WpImplEndpoint* header parts to + private/impl-endpoint.h + * m-metadata: add callback for wp_object_activate() + * src: port daemon to the new APIs + * modules: port modules and their tests to the new proxy APIs + * object-manager: recursively store requested features on + children + * impl-endpoint{,-stream}: disable FEATURE_PROPS temporarily + * tests: fix library unit tests + * lib: refactor WpProxy + * lib: add new proxy-interfaces: interfaces for the refactored + WpProxy class + * lib/private: move the registry & global APIs to a separate + header + * lib: add new WpObject base class + +------------------------------------------------------------------- +Wed Dec 30 13:19:27 UTC 2020 - Bjørn Lie + +- Disable testrun for 32bit arches, upstream do not care for them, + so we can not expect fixed tests any time soon. + +------------------------------------------------------------------- +Fri Dec 18 20:22:35 UTC 2020 - bjorn.lie@gmail.com + +- Update to version 0.3.0+37: + * m-endpoint-creation: remove undefined API + * m-endpoint-creation: remove unnused variable in Bluez5 endpoint + creation + * m-device-activation: use profile from default-profile module if + loaded + * modules: add module to store device profiles each time they + change + * lib: add new WpState API to save and load data from files + * m-monitor: add use-acp flag + * modules: refactor dbus reservation + * plugin: add name property + * wpctl: add set-profile option + * transition: stop and return error if cancelled by the + GCancellable + +------------------------------------------------------------------- +Tue Oct 20 11:48:52 UTC 2020 - dimstar@opensuse.org + +- Update to version 0.3.0+27: + * device: set parent type to GObject in WpSpaDevice structure + +------------------------------------------------------------------- +Mon Oct 12 13:24:01 UTC 2020 - dimstar@opensuse.org + +- Update to version 0.3.0+26: + * m-endpoint-creation: add bluez5 endpoint creation for bluetooth + devices + * m-config-endpoint: refactor and rename to endpoint-creation + * modules: add bluez5 endpoint session item + * modules: add fake stream session item + * m-si-adapter: use the adapter's name as stream name + * m-si-adapter: set the configured flag when configuration was + successful + * m-config-policy: set the stream name to the media role propery + by default + +------------------------------------------------------------------- +Fri Sep 11 10:45:33 UTC 2020 - dimstar@opensuse.org + +- Update to version 0.3.0+19: + * Implement PW_TYPE_INTERFACE_Metadata + * metadata: fix more coding style issues + * metadata: improve implementation + * metadata: remove WP_METADATA_FEATURES_STANDARD and fix + copyright years + * module-metadata: s/settings/plugin/ + * modules: rename metadata module to just 'module-metadata' + * tests: fix permissions check failure with latest pipewire + * tests: implement a WpMetadata unit test +- Drop use-system-cpptoml.patch: fixed upstream. + +------------------------------------------------------------------- +Mon Jul 20 12:27:44 UTC 2020 - Antonio Larrosa + +- Initial version of wireplumber 0.3.0 diff --git a/wireplumber.obsinfo b/wireplumber.obsinfo new file mode 100644 index 0000000..d62f31f --- /dev/null +++ b/wireplumber.obsinfo @@ -0,0 +1,4 @@ +name: wireplumber +version: 0.5.7 +mtime: 1733148617 +commit: 3e7c87a84c30125717eaf8adb1aca3d4dedbb70e diff --git a/wireplumber.spec b/wireplumber.spec new file mode 100644 index 0000000..dd864e0 --- /dev/null +++ b/wireplumber.spec @@ -0,0 +1,281 @@ +# +# spec file for package wireplumber +# +# Copyright (c) 2024 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%define pipewire_minimum_version 1.0.2 +%define apiver 0.5 +%define apiver_str 0_5 +%define sover 0 +%define libwireplumber libwireplumber-%{apiver_str}-%{sover} +Name: wireplumber +Version: 0.5.7 +Release: 0 +Summary: Session / policy manager implementation for PipeWire +License: MIT +Group: Development/Libraries/C and C++ +URL: https://gitlab.freedesktop.org/pipewire/wireplumber +Source0: wireplumber-%{version}.tar.xz +Source1: split-config-file.py +# docs +BuildRequires: doxygen +BuildRequires: graphviz +# /docs +BuildRequires: cmake +BuildRequires: fdupes +BuildRequires: meson >= 0.59.0 +BuildRequires: pipewire >= %{pipewire_minimum_version} +BuildRequires: pipewire-spa-plugins-0_2 >= %{pipewire_minimum_version} +BuildRequires: pkgconfig +BuildRequires: python3-base +BuildRequires: python3-lxml +BuildRequires: xmltoman +BuildRequires: pkgconfig(dbus-1) +BuildRequires: pkgconfig(gio-unix-2.0) +BuildRequires: pkgconfig(glib-2.0) >= 2.62.0 +BuildRequires: pkgconfig(gmodule-2.0) +BuildRequires: pkgconfig(gobject-2.0) >= 2.62 +BuildRequires: pkgconfig(gobject-introspection-1.0) +BuildRequires: pkgconfig(libpipewire-0.3) >= %{pipewire_minimum_version} +BuildRequires: pkgconfig(libsystemd) +BuildRequires: pkgconfig(lua) +BuildRequires: pkgconfig(systemd) +BuildRequires: python3-Sphinx +BuildRequires: python3-sphinx_rtd_theme +BuildRequires: python3-breathe +#!BuildIgnore: pipewire-session-manager +# Setup ALSA devices if PipeWire handles PulseAudio or JACK connections. +Requires: (%{name}-audio if (pipewire-pulseaudio or pipewire-jack)) +Requires: pipewire >= %{pipewire_minimum_version} +Provides: pipewire-session-manager +%if 0%{?suse_version} <= 1500 +BuildRequires: gcc9 +BuildRequires: gcc9-c++ +%else +BuildRequires: c++_compiler +%endif +%{?systemd_ordering} + + +%description +WirePlumber is a modular session / policy manager for PipeWire and +a GObject-based high-level library that wraps PipeWire's API, +providing convenience for writing the daemon's modules as well as +external tools for managing PipeWire. + +%lang_package + +%package doc +Summary: Wireplumber Session / policy manager documentation +Group: Development/Libraries/C and C++ +BuildArch: noarch + +%description doc +This package contains documentation for the WirePlumber +session/policy manager for PipeWire. + +%package audio +Summary: Enable audio support in PipeWire / WirePlumber +Group: Development/Libraries/C and C++ +Requires: %{libwireplumber} = %{version} +Requires: %{name} = %{version} +Recommends: pipewire-jack +Recommends: pipewire-pulseaudio +Conflicts: pulseaudio +BuildArch: noarch + +%description audio +WirePlumber is a modular session / policy manager for PipeWire and +a GObject-based high-level library that wraps PipeWire's API, +providing convenience for writing the daemon's modules as well as +external tools for managing PipeWire. + +This package enables the use of alsa devices in PipeWire. + +%package devel +Summary: Session / policy manager implementation for PipeWire +Group: Development/Libraries/C and C++ +Requires: %{libwireplumber} = %{version} +Requires: %{name} = %{version} + +%description devel +WirePlumber is a modular session / policy manager for PipeWire and +a GObject-based high-level library that wraps PipeWire's API, +providing convenience for writing the daemon's modules as well as +external tools for managing PipeWire. + +This package provides all the necessary files for development with WirePlumber + +%package -n %{libwireplumber} +Summary: Session / policy manager implementation for PipeWire +Group: System/Libraries + +%description -n %{libwireplumber} +WirePlumber is a modular session / policy manager for PipeWire and +a GObject-based high-level library that wraps PipeWire's API, +providing convenience for writing the daemon's modules as well as +external tools for managing PipeWire. + +This package provides the wireplumber shared library. + +%package -n typelib-1_0-Wp-%{apiver_str} +Summary: Introspection bindings for libwireplumber +Group: System/Libraries + +%description -n typelib-1_0-Wp-%{apiver_str} +WirePlumber is a modular session / policy manager for PipeWire and +a GObject-based high-level library that wraps PipeWire's API, +providing convenience for writing the daemon's modules as well as +external tools for managing PipeWire. + +This package provides the GObject Introspection bindings for +the wireplumber shared library. + +%package zsh-completion +Summary: Wireplumber zsh completion +Group: System/Shells +Requires: %{name} = %{version} +Requires: zsh +Supplements: (wireplumber and zsh) +BuildArch: noarch + +%description zsh-completion +Optional dependency offering zsh completion for various wpctl parameters. + +%prep +%autosetup -p1 + +pushd src/config +python3 %{SOURCE1} +popd + +%build +%if 0%{?suse_version} <= 1500 +export CC=gcc-9 +export CXX=g++-9 +%endif +%meson -Ddoc=enabled \ + -Dsystem-lua=true \ + -Delogind=disabled +%meson_build + +%install +%meson_install +%fdupes -s %{buildroot}/%{_datadir}/doc/pipewire/html +%find_lang %{name} %{?no_lang_C} + +%ifnarch %ix86 ppc64 +%check +export XDG_RUNTIME_DIR=/tmp +%meson_test +%endif + +%pre +%systemd_user_pre wireplumber.service + +%post +%systemd_user_post wireplumber.service + +%if 0%{?suse_version} <= 1500 +# If the pipewire.socket user unit is not enabled and the workaround +# for boo#1186561 has never been executed, we need to execute it now +if [ ! -L %{_sysconfdir}/systemd/user/pipewire.service.wants/wireplumber.service \ + -a ! -f %{_localstatedir}/lib/pipewire/wireplumber_post_workaround \ + -a -x %{_bindir}/systemctl ]; then + for service in wireplumber.service ; do + %{_bindir}/systemctl --global preset "$service" || : + done + + mkdir -p %{_localstatedir}/lib/pipewire + cat << EOF > %{_localstatedir}/lib/pipewire/wireplumber_post_workaround +# The existence of this file means that the wireplumber user services were +# enabled at least once. Please don't remove this file as that would +# make the services to be enabled again in the next package update. +# +# Check the following bugs for more information: +# https://bugzilla.opensuse.org/show_bug.cgi?id=1200485 +EOF +fi +%endif + + +%preun +%systemd_user_preun wireplumber.service + +%postun +%systemd_user_postun wireplumber.service + +%post -n %{libwireplumber} -p /sbin/ldconfig +%postun -n %{libwireplumber} -p /sbin/ldconfig + +%files +%{_bindir}/wireplumber +%{_bindir}/wpctl +%{_bindir}/wpexec +%dir %{_libdir}/wireplumber-%{apiver} +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-dbus-connection.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-default-nodes-api.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-file-monitor-api.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-log-settings.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-logind.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-lua-scripting.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-mixer-api.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-portal-permissionstore.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-reserve-device.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-settings.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-si-audio-adapter.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-si-node.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-si-standard-link.so +%{_libdir}/wireplumber-%{apiver}/libwireplumber-module-standard-event-source.so + +%{_userunitdir}/wireplumber.service +%{_userunitdir}/wireplumber@.service +%dir %{_datadir}/doc/wireplumber +%dir %{_datadir}/doc/wireplumber/examples +%{_datadir}/doc/wireplumber/examples/wireplumber.conf.d +%{_datadir}/wireplumber +%exclude %{_datadir}/wireplumber/wireplumber.conf.d/00-device-monitors.conf +%exclude %{_datadir}/wireplumber/wireplumber.conf.d/01-require-audio-in-main-profile.conf + +%files lang -f %{name}.lang + +%files audio +%{_datadir}/wireplumber/wireplumber.conf.d/00-device-monitors.conf +%{_datadir}/wireplumber/wireplumber.conf.d/01-require-audio-in-main-profile.conf + +%files devel +%{_includedir}/wireplumber-%{apiver} +%{_libdir}/libwireplumber-%{apiver}.so +%{_libdir}/pkgconfig/wireplumber-%{apiver}.pc +%{_datadir}/gir-1.0/Wp-%{apiver}.gir + +%files doc +%{_datadir}/doc/wireplumber/html/ +%exclude %{_datadir}/doc/wireplumber/examples + +%files -n typelib-1_0-Wp-%{apiver_str} +%{_libdir}/girepository-1.0/Wp-%{apiver}.typelib + +%files -n %{libwireplumber} +%{_libdir}/libwireplumber-%{apiver}.so.%{sover} +%{_libdir}/libwireplumber-%{apiver}.so.%{sover}.* + +%files zsh-completion +%dir %{_datarootdir}/zsh +%dir %{_datarootdir}/zsh/site-functions/ +%{_datarootdir}/zsh/site-functions/_wpctl + +%changelog