From 46d759f23e8298b7a7f8558a997abaf960fbddd2 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 23 Jul 2022 12:29:44 +0000 Subject: [PATCH 01/39] Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- wireplumber.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wireplumber.spec b/wireplumber.spec index 5fb639c..2e4b650 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.4.11 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -117,6 +117,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Sat Jul 23 2022 Fedora Release Engineering - 0.4.11-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + * Wed Jul 13 2022 Wim Taymans - 0.4.11-2 - Add patch to avoid crashes in VM - Add patch to avoid dbus crash From 9ae7e1ebef75ed7ccb7aba9f45824ac8660ae6be Mon Sep 17 00:00:00 2001 From: Ville-Pekka Vainio Date: Fri, 5 Aug 2022 22:13:47 +0300 Subject: [PATCH 02/39] Add two patches to fix a rescan loop with Bluetooth --- ...olicy-node-fix-potential-rescan-loop.patch | 54 +++++++++ ...wait-for-establish-before-activation.patch | 106 ++++++++++++++++++ wireplumber.spec | 7 +- 3 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 0003-policy-node-fix-potential-rescan-loop.patch create mode 100644 0004-m-si-link-don-t-wait-for-establish-before-activation.patch diff --git a/0003-policy-node-fix-potential-rescan-loop.patch b/0003-policy-node-fix-potential-rescan-loop.patch new file mode 100644 index 0000000..070ad70 --- /dev/null +++ b/0003-policy-node-fix-potential-rescan-loop.patch @@ -0,0 +1,54 @@ +From ba10c7d8c68db7b79cfa9f0e42432b63a76c415a Mon Sep 17 00:00:00 2001 +From: Pauli Virtanen +Date: Tue, 19 Jul 2022 20:39:06 +0300 +Subject: [PATCH 1/2] policy-node: fix potential rescan loop + +SiLink activation might be delayed indefinitely under some error +conditions. Currently, policy-node schedules a rescan when it sees a +non-activated link on a stream to be moved, which produces busy loop if +the si-link doesn't activate. + +Instead of rescheduling on non-active si-links, just remove and emit a +warning. The si-link then gets removed once it gets activated. + +Reproducer: + +1. Play audio from Rhythmbox and pause. +2. Switch default output with pactl between two different outputs +3. Links from the paused stream stay at "init" +--- + src/scripts/policy-node.lua | 17 ++++++++--------- + 1 file changed, 8 insertions(+), 9 deletions(-) + +diff --git a/src/scripts/policy-node.lua b/src/scripts/policy-node.lua +index e681672..43df701 100644 +--- a/src/scripts/policy-node.lua ++++ b/src/scripts/policy-node.lua +@@ -694,16 +694,15 @@ function handleLinkable (si) + local link = lookupLink (si_id, si_flags[si_id].peer_id) + if reconnect then + if link ~= nil then +- -- remove old link if active, otherwise schedule rescan +- if ((link:get_active_features() & Feature.SessionItem.ACTIVE) ~= 0) then +- si_flags[si_id].peer_id = nil +- link:remove () +- Log.info (si, "... moving to new target") +- else +- scheduleRescan() +- Log.info (si, "... scheduled rescan") +- return ++ -- remove old link ++ if ((link:get_active_features() & Feature.SessionItem.ACTIVE) == 0) then ++ -- remove also not yet activated links: they might never become active, ++ -- and we should not loop waiting for them ++ Log.warning (link, "Link was not activated before removing") + end ++ si_flags[si_id].peer_id = nil ++ link:remove () ++ Log.info (si, "... moving to new target") + end + else + if link ~= nil then +-- +2.37.1 + diff --git a/0004-m-si-link-don-t-wait-for-establish-before-activation.patch b/0004-m-si-link-don-t-wait-for-establish-before-activation.patch new file mode 100644 index 0000000..e260793 --- /dev/null +++ b/0004-m-si-link-don-t-wait-for-establish-before-activation.patch @@ -0,0 +1,106 @@ +From dd017b43fa1077200ae5e00f697334908ef1b9b2 Mon Sep 17 00:00:00 2001 +From: Pauli Virtanen +Date: Tue, 19 Jul 2022 20:01:10 +0300 +Subject: [PATCH 2/2] m-si-link: don't wait for establish before activation + + cleanup links + +SiLink should not wait for WpLinks becoming ESTABLISHED, before +activation. That flag shows whether a link has moved away from the +"init" state, however, links to e.g. Pulseaudio corked streams can stay +in "init" state until uncorking. This causes trouble for policies, +which needlessly wait for such links to establish. + +The WpLink objects may also be kept alive by other referents, and +just unrefing them does not necessarily destroy the PW objects. + +Activate SiLink even if the WpLink is still in "init" state. It's enough +that the link otherwise successfully establishes. + +At dispose time, explicitly request destroying the WpLinks that were +created by the SiLink, to ensure they are removed even if there's +something else referring to them. +--- + modules/module-si-standard-link.c | 32 ++++++++++++++++++++++++++----- + 1 file changed, 27 insertions(+), 5 deletions(-) + +diff --git a/modules/module-si-standard-link.c b/modules/module-si-standard-link.c +index dbebf39..9af7134 100644 +--- a/modules/module-si-standard-link.c ++++ b/modules/module-si-standard-link.c +@@ -132,6 +132,27 @@ si_standard_link_get_associated_proxy (WpSessionItem * item, GType proxy_type) + return NULL; + } + ++static void ++request_destroy_link (gpointer data, gpointer user_data) ++{ ++ WpLink *link = WP_LINK (data); ++ ++ wp_global_proxy_request_destroy (WP_GLOBAL_PROXY (link)); ++} ++ ++static void ++clear_node_links (GPtrArray **node_links_p) ++{ ++ /* ++ * Something else (eg. object managers) may be keeping the WpLink ++ * objects alive. Deactive the links now, to destroy the PW objects. ++ */ ++ if (*node_links_p) ++ g_ptr_array_foreach (*node_links_p, request_destroy_link, NULL); ++ ++ g_clear_pointer (node_links_p, g_ptr_array_unref); ++} ++ + static void + si_standard_link_disable_active (WpSessionItem *si) + { +@@ -154,7 +175,8 @@ si_standard_link_disable_active (WpSessionItem *si) + WP_SI_LINKABLE (si_in)); + } + +- g_clear_pointer (&self->node_links, g_ptr_array_unref); ++ clear_node_links (&self->node_links); ++ + self->n_active_links = 0; + self->n_failed_links = 0; + self->n_async_ops_wait = 0; +@@ -168,7 +190,7 @@ on_link_activated (WpObject * proxy, GAsyncResult * res, + WpTransition * transition) + { + WpSiStandardLink *self = wp_transition_get_source_object (transition); +- guint len = self->node_links->len; ++ guint len = self->node_links ? self->node_links->len : 0; + + /* Count the number of failed and active links */ + if (wp_object_activate_finish (proxy, res, NULL)) +@@ -182,7 +204,7 @@ on_link_activated (WpObject * proxy, GAsyncResult * res, + + /* We only active feature if all links activated successfully */ + if (self->n_failed_links > 0) { +- g_clear_pointer (&self->node_links, g_ptr_array_unref); ++ clear_node_links (&self->node_links); + wp_transition_return_error (transition, g_error_new ( + WP_DOMAIN_LIBRARY, WP_LIBRARY_ERROR_OPERATION_FAILED, + "%d of %d PipeWire links failed to activate", +@@ -251,7 +273,7 @@ create_links (WpSiStandardLink * self, WpTransition * transition, + /* Clear old links if any */ + self->n_active_links = 0; + self->n_failed_links = 0; +- g_clear_pointer (&self->node_links, g_ptr_array_unref); ++ clear_node_links (&self->node_links); + + /* tuple format: + uint32 node_id; +@@ -327,7 +349,7 @@ create_links (WpSiStandardLink * self, WpTransition * transition, + + /* activate to ensure it is created without errors */ + wp_object_activate_closure (WP_OBJECT (link), +- WP_OBJECT_FEATURES_ALL, NULL, ++ WP_OBJECT_FEATURES_ALL & ~WP_LINK_FEATURE_ESTABLISHED, NULL, + g_cclosure_new_object ( + (GCallback) on_link_activated, G_OBJECT (transition))); + } +-- +2.37.1 + diff --git a/wireplumber.spec b/wireplumber.spec index 2e4b650..e344215 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.4.11 -Release: 3%{?dist} +Release: 4%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -10,6 +10,8 @@ Source0: https://gitlab.freedesktop.org/pipewire/%{name}/-/archive/%{version} ## upstream patches Patch0001: 0001-alsa-use-obj_type-as-a-variable-name-to-avoid-shadow.patch Patch0002: 0002-dbus-fix-crash-when-trying-to-reconnect.patch +Patch0003: 0003-policy-node-fix-potential-rescan-loop.patch +Patch0004: 0004-m-si-link-don-t-wait-for-establish-before-activation.patch ## upstreamable patches @@ -117,6 +119,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Thu Aug 04 2022 Ville-Pekka Vainio - 0.4.11-4 +- Add two patches to fix a rescan loop with Bluetooth + * Sat Jul 23 2022 Fedora Release Engineering - 0.4.11-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild From ee0be42313f2427b56247575a30a33eecb02182b Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 7 Oct 2022 09:35:35 +0200 Subject: [PATCH 03/39] wireplumber 0.4.12 --- ...e-as-a-variable-name-to-avoid-shadow.patch | 39 ------- ...s-fix-crash-when-trying-to-reconnect.patch | 51 --------- ...olicy-node-fix-potential-rescan-loop.patch | 54 --------- ...wait-for-establish-before-activation.patch | 106 ------------------ sources | 2 +- wireplumber.spec | 11 +- 6 files changed, 6 insertions(+), 257 deletions(-) delete mode 100644 0001-alsa-use-obj_type-as-a-variable-name-to-avoid-shadow.patch delete mode 100644 0002-dbus-fix-crash-when-trying-to-reconnect.patch delete mode 100644 0003-policy-node-fix-potential-rescan-loop.patch delete mode 100644 0004-m-si-link-don-t-wait-for-establish-before-activation.patch diff --git a/0001-alsa-use-obj_type-as-a-variable-name-to-avoid-shadow.patch b/0001-alsa-use-obj_type-as-a-variable-name-to-avoid-shadow.patch deleted file mode 100644 index b095f79..0000000 --- a/0001-alsa-use-obj_type-as-a-variable-name-to-avoid-shadow.patch +++ /dev/null @@ -1,39 +0,0 @@ -From bc6b54229200537863426977c8d121bf9168fb94 Mon Sep 17 00:00:00 2001 -From: George Kiagiadakis -Date: Thu, 7 Jul 2022 20:58:36 +0300 -Subject: [PATCH 1/2] alsa: use "obj_type" as a variable name to avoid - shadowing lua's "type" function - -This causes a crash when running in a VM because the code tries to -execute lua's "type()" and ends up executing the local string variable... - -Fixes: #303 ---- - src/scripts/monitors/alsa.lua | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/scripts/monitors/alsa.lua b/src/scripts/monitors/alsa.lua -index 43fab94..38f847f 100644 ---- a/src/scripts/monitors/alsa.lua -+++ b/src/scripts/monitors/alsa.lua -@@ -49,7 +49,7 @@ function nonempty(str) - return str ~= "" and str or nil - end - --function createNode(parent, id, type, factory, properties) -+function createNode(parent, id, obj_type, factory, properties) - local dev_props = parent.properties - - -- set the device id and spa factory name; REQUIRED, do not change -@@ -199,7 +199,7 @@ function createDevice(parent, id, factory, properties) - end - end - --function prepareDevice(parent, id, type, factory, properties) -+function prepareDevice(parent, id, obj_type, factory, properties) - -- ensure the device has an appropriate name - local name = "alsa_card." .. - (properties["device.name"] or --- -2.36.1 - diff --git a/0002-dbus-fix-crash-when-trying-to-reconnect.patch b/0002-dbus-fix-crash-when-trying-to-reconnect.patch deleted file mode 100644 index 7734d84..0000000 --- a/0002-dbus-fix-crash-when-trying-to-reconnect.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 842e267af2925c5c0e8ea44b0f3d4e2823f787ce Mon Sep 17 00:00:00 2001 -From: George Kiagiadakis -Date: Wed, 13 Jul 2022 13:38:14 +0300 -Subject: [PATCH 2/2] dbus: fix crash when trying to reconnect - -When coming from on_sync_reconnect, data points to the WpDBus object -instead of the activation transition. - -Fixes: #305 ---- - lib/wp/dbus.c | 20 ++++++++++++++++---- - 1 file changed, 16 insertions(+), 4 deletions(-) - -diff --git a/lib/wp/dbus.c b/lib/wp/dbus.c -index 01a3b21..7c2d023 100644 ---- a/lib/wp/dbus.c -+++ b/lib/wp/dbus.c -@@ -58,14 +58,26 @@ wp_dbus_set_state (WpDbus *self, WpDBusState new_state) - static void - on_got_bus (GObject * obj, GAsyncResult * res, gpointer data) - { -- WpTransition *transition = WP_TRANSITION (data); -- WpDbus *self = wp_transition_get_source_object (transition); -+ WpTransition *transition; -+ WpDbus *self; - g_autoptr (GError) error = NULL; - -+ if (WP_IS_TRANSITION (data)) { -+ // coming from wp_dbus_enable -+ transition = WP_TRANSITION (data); -+ self = wp_transition_get_source_object (transition); -+ } else { -+ // coming from on_sync_reconnect -+ transition = NULL; -+ self = WP_DBUS (data); -+ } -+ - self->connection = g_dbus_connection_new_for_address_finish (res, &error); - if (!self->connection) { -- g_prefix_error (&error, "Failed to connect to bus: "); -- wp_transition_return_error (transition, g_steal_pointer (&error)); -+ if (transition) { -+ g_prefix_error (&error, "Failed to connect to bus: "); -+ wp_transition_return_error (transition, g_steal_pointer (&error)); -+ } - return; - } - --- -2.36.1 - diff --git a/0003-policy-node-fix-potential-rescan-loop.patch b/0003-policy-node-fix-potential-rescan-loop.patch deleted file mode 100644 index 070ad70..0000000 --- a/0003-policy-node-fix-potential-rescan-loop.patch +++ /dev/null @@ -1,54 +0,0 @@ -From ba10c7d8c68db7b79cfa9f0e42432b63a76c415a Mon Sep 17 00:00:00 2001 -From: Pauli Virtanen -Date: Tue, 19 Jul 2022 20:39:06 +0300 -Subject: [PATCH 1/2] policy-node: fix potential rescan loop - -SiLink activation might be delayed indefinitely under some error -conditions. Currently, policy-node schedules a rescan when it sees a -non-activated link on a stream to be moved, which produces busy loop if -the si-link doesn't activate. - -Instead of rescheduling on non-active si-links, just remove and emit a -warning. The si-link then gets removed once it gets activated. - -Reproducer: - -1. Play audio from Rhythmbox and pause. -2. Switch default output with pactl between two different outputs -3. Links from the paused stream stay at "init" ---- - src/scripts/policy-node.lua | 17 ++++++++--------- - 1 file changed, 8 insertions(+), 9 deletions(-) - -diff --git a/src/scripts/policy-node.lua b/src/scripts/policy-node.lua -index e681672..43df701 100644 ---- a/src/scripts/policy-node.lua -+++ b/src/scripts/policy-node.lua -@@ -694,16 +694,15 @@ function handleLinkable (si) - local link = lookupLink (si_id, si_flags[si_id].peer_id) - if reconnect then - if link ~= nil then -- -- remove old link if active, otherwise schedule rescan -- if ((link:get_active_features() & Feature.SessionItem.ACTIVE) ~= 0) then -- si_flags[si_id].peer_id = nil -- link:remove () -- Log.info (si, "... moving to new target") -- else -- scheduleRescan() -- Log.info (si, "... scheduled rescan") -- return -+ -- remove old link -+ if ((link:get_active_features() & Feature.SessionItem.ACTIVE) == 0) then -+ -- remove also not yet activated links: they might never become active, -+ -- and we should not loop waiting for them -+ Log.warning (link, "Link was not activated before removing") - end -+ si_flags[si_id].peer_id = nil -+ link:remove () -+ Log.info (si, "... moving to new target") - end - else - if link ~= nil then --- -2.37.1 - diff --git a/0004-m-si-link-don-t-wait-for-establish-before-activation.patch b/0004-m-si-link-don-t-wait-for-establish-before-activation.patch deleted file mode 100644 index e260793..0000000 --- a/0004-m-si-link-don-t-wait-for-establish-before-activation.patch +++ /dev/null @@ -1,106 +0,0 @@ -From dd017b43fa1077200ae5e00f697334908ef1b9b2 Mon Sep 17 00:00:00 2001 -From: Pauli Virtanen -Date: Tue, 19 Jul 2022 20:01:10 +0300 -Subject: [PATCH 2/2] m-si-link: don't wait for establish before activation + - cleanup links - -SiLink should not wait for WpLinks becoming ESTABLISHED, before -activation. That flag shows whether a link has moved away from the -"init" state, however, links to e.g. Pulseaudio corked streams can stay -in "init" state until uncorking. This causes trouble for policies, -which needlessly wait for such links to establish. - -The WpLink objects may also be kept alive by other referents, and -just unrefing them does not necessarily destroy the PW objects. - -Activate SiLink even if the WpLink is still in "init" state. It's enough -that the link otherwise successfully establishes. - -At dispose time, explicitly request destroying the WpLinks that were -created by the SiLink, to ensure they are removed even if there's -something else referring to them. ---- - modules/module-si-standard-link.c | 32 ++++++++++++++++++++++++++----- - 1 file changed, 27 insertions(+), 5 deletions(-) - -diff --git a/modules/module-si-standard-link.c b/modules/module-si-standard-link.c -index dbebf39..9af7134 100644 ---- a/modules/module-si-standard-link.c -+++ b/modules/module-si-standard-link.c -@@ -132,6 +132,27 @@ si_standard_link_get_associated_proxy (WpSessionItem * item, GType proxy_type) - return NULL; - } - -+static void -+request_destroy_link (gpointer data, gpointer user_data) -+{ -+ WpLink *link = WP_LINK (data); -+ -+ wp_global_proxy_request_destroy (WP_GLOBAL_PROXY (link)); -+} -+ -+static void -+clear_node_links (GPtrArray **node_links_p) -+{ -+ /* -+ * Something else (eg. object managers) may be keeping the WpLink -+ * objects alive. Deactive the links now, to destroy the PW objects. -+ */ -+ if (*node_links_p) -+ g_ptr_array_foreach (*node_links_p, request_destroy_link, NULL); -+ -+ g_clear_pointer (node_links_p, g_ptr_array_unref); -+} -+ - static void - si_standard_link_disable_active (WpSessionItem *si) - { -@@ -154,7 +175,8 @@ si_standard_link_disable_active (WpSessionItem *si) - WP_SI_LINKABLE (si_in)); - } - -- g_clear_pointer (&self->node_links, g_ptr_array_unref); -+ clear_node_links (&self->node_links); -+ - self->n_active_links = 0; - self->n_failed_links = 0; - self->n_async_ops_wait = 0; -@@ -168,7 +190,7 @@ on_link_activated (WpObject * proxy, GAsyncResult * res, - WpTransition * transition) - { - WpSiStandardLink *self = wp_transition_get_source_object (transition); -- guint len = self->node_links->len; -+ guint len = self->node_links ? self->node_links->len : 0; - - /* Count the number of failed and active links */ - if (wp_object_activate_finish (proxy, res, NULL)) -@@ -182,7 +204,7 @@ on_link_activated (WpObject * proxy, GAsyncResult * res, - - /* We only active feature if all links activated successfully */ - if (self->n_failed_links > 0) { -- g_clear_pointer (&self->node_links, g_ptr_array_unref); -+ clear_node_links (&self->node_links); - wp_transition_return_error (transition, g_error_new ( - WP_DOMAIN_LIBRARY, WP_LIBRARY_ERROR_OPERATION_FAILED, - "%d of %d PipeWire links failed to activate", -@@ -251,7 +273,7 @@ create_links (WpSiStandardLink * self, WpTransition * transition, - /* Clear old links if any */ - self->n_active_links = 0; - self->n_failed_links = 0; -- g_clear_pointer (&self->node_links, g_ptr_array_unref); -+ clear_node_links (&self->node_links); - - /* tuple format: - uint32 node_id; -@@ -327,7 +349,7 @@ create_links (WpSiStandardLink * self, WpTransition * transition, - - /* activate to ensure it is created without errors */ - wp_object_activate_closure (WP_OBJECT (link), -- WP_OBJECT_FEATURES_ALL, NULL, -+ WP_OBJECT_FEATURES_ALL & ~WP_LINK_FEATURE_ESTABLISHED, NULL, - g_cclosure_new_object ( - (GCallback) on_link_activated, G_OBJECT (transition))); - } --- -2.37.1 - diff --git a/sources b/sources index 59c9298..0600d75 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.4.11.tar.bz2) = 8a2bf0701f61604d7f85a30d7ac0d51aca4b95c21a335b662a8162bb7531d93f8c327da34ae13263920c863b695a5e0e372b4d17ae8323bf2634065ce93dd3af +SHA512 (wireplumber-0.4.12.tar.bz2) = 79827ea9f61bacf8df80f9cd0ca4c80192cf85a1b181a51256b3c845d1d04a690ea5c1270d6d5d05d56f799f16980a593e61d003ef78ad7dc8d5e9ea332aa5d4 diff --git a/wireplumber.spec b/wireplumber.spec index e344215..ac33b19 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber -Version: 0.4.11 -Release: 4%{?dist} +Version: 0.4.12 +Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -8,10 +8,6 @@ URL: https://pipewire.pages.freedesktop.org/wireplumber/ Source0: https://gitlab.freedesktop.org/pipewire/%{name}/-/archive/%{version}/%{name}-%{version}.tar.bz2 ## upstream patches -Patch0001: 0001-alsa-use-obj_type-as-a-variable-name-to-avoid-shadow.patch -Patch0002: 0002-dbus-fix-crash-when-trying-to-reconnect.patch -Patch0003: 0003-policy-node-fix-potential-rescan-loop.patch -Patch0004: 0004-m-si-link-don-t-wait-for-establish-before-activation.patch ## upstreamable patches @@ -119,6 +115,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Fri Oct 07 2022 Wim Taymans - 0.4.12-1 +- wireplumber 0.4.12 + * Thu Aug 04 2022 Ville-Pekka Vainio - 0.4.11-4 - Add two patches to fix a rescan loop with Bluetooth From 2a8e67b69305303108918a1e428f3128892d0157 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 13 Dec 2022 16:28:45 +0100 Subject: [PATCH 04/39] wireplumber 0.4.13 --- sources | 2 +- wireplumber.spec | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/sources b/sources index 0600d75..52614aa 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.4.12.tar.bz2) = 79827ea9f61bacf8df80f9cd0ca4c80192cf85a1b181a51256b3c845d1d04a690ea5c1270d6d5d05d56f799f16980a593e61d003ef78ad7dc8d5e9ea332aa5d4 +SHA512 (wireplumber-0.4.13.tar.bz2) = b8a43a0ec56037b51a1ddc8ae7f369e0494eab9baf3acded965e2923c5cf8263860d5f1973c83d25a33388243db3ac6e1321ed3b42a01e8cac813d9b47554dbf diff --git a/wireplumber.spec b/wireplumber.spec index ac33b19..5a1c0d3 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,5 +1,5 @@ Name: wireplumber -Version: 0.4.12 +Version: 0.4.13 Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire @@ -13,6 +13,7 @@ Source0: https://gitlab.freedesktop.org/pipewire/%{name}/-/archive/%{version} ## fedora patches +BuildRequires: gettext BuildRequires: meson gcc pkgconfig BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gobject-2.0) @@ -75,6 +76,8 @@ managing PipeWire. # Create local config skeleton mkdir -p %{buildroot}%{_sysconfdir}/wireplumber/{bluetooth.lua.d,common,main.lua.d,policy.lua.d} +%find_lang %{name} + %posttrans %systemd_user_post %{name}.service @@ -101,7 +104,7 @@ fi %{_userunitdir}/wireplumber.service %{_userunitdir}/wireplumber@.service -%files libs +%files libs -f %{name}.lang %license LICENSE %dir %{_libdir}/wireplumber-0.4/ %{_libdir}/wireplumber-0.4/libwireplumber-*.so @@ -115,6 +118,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Tue Dec 13 2022 Wim Taymans - 0.4.13-1 +- wireplumber 0.4.13 + * Fri Oct 07 2022 Wim Taymans - 0.4.12-1 - wireplumber 0.4.12 From 429220caecada6fb42c3181e1bcf214c2c018297 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 21 Jan 2023 06:52:24 +0000 Subject: [PATCH 05/39] Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- wireplumber.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wireplumber.spec b/wireplumber.spec index 5a1c0d3..7e4f75e 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.4.13 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -118,6 +118,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Sat Jan 21 2023 Fedora Release Engineering - 0.4.13-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + * Tue Dec 13 2022 Wim Taymans - 0.4.13-1 - wireplumber 0.4.13 From 430f1e13d9a989ca8ad75cf72273aadf842cd438 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 9 Mar 2023 16:58:17 +0100 Subject: [PATCH 06/39] wireplumber 0.4.14 --- sources | 2 +- wireplumber.spec | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sources b/sources index 52614aa..2e2d398 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.4.13.tar.bz2) = b8a43a0ec56037b51a1ddc8ae7f369e0494eab9baf3acded965e2923c5cf8263860d5f1973c83d25a33388243db3ac6e1321ed3b42a01e8cac813d9b47554dbf +SHA512 (wireplumber-0.4.14.tar.bz2) = 51dc830d4dfe000cf6091d728d9ce6248585f5fae729536d611f85a0981722b9ab7f13322b516dc9988cdc15e0859f946aa0b78a35ad13a67e2de8082e6d5549 diff --git a/wireplumber.spec b/wireplumber.spec index 7e4f75e..dfe9e31 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber -Version: 0.4.13 -Release: 2%{?dist} +Version: 0.4.14 +Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -118,6 +118,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Thu Mar 9 2023 Wim Taymans - 0.4.14-1 +- wireplumber 0.4.14 + * Sat Jan 21 2023 Fedora Release Engineering - 0.4.13-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild From 575d148b81999d2a18618b74608d9e5be969b4b7 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 22 Jul 2023 18:15:27 +0000 Subject: [PATCH 07/39] Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- wireplumber.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wireplumber.spec b/wireplumber.spec index dfe9e31..f9cd1d1 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.4.14 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -118,6 +118,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Sat Jul 22 2023 Fedora Release Engineering - 0.4.14-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + * Thu Mar 9 2023 Wim Taymans - 0.4.14-1 - wireplumber 0.4.14 From a9a4a8681bbe6dc49391c34cf6adcf33eb6ffa86 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 28 Sep 2023 11:41:16 +1000 Subject: [PATCH 08/39] SPDX migration: mark as done --- wireplumber.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/wireplumber.spec b/wireplumber.spec index f9cd1d1..27db43b 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -118,6 +118,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Fri Sep 08 2023 Peter Hutterer +- SPDX migration: mark as done + * Sat Jul 22 2023 Fedora Release Engineering - 0.4.14-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild From 69daa7cfd9ef55e9376080b8740e04182961482c Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 12 Oct 2023 19:02:40 +0200 Subject: [PATCH 09/39] wireplumber 0.4.15 --- sources | 2 +- wireplumber.spec | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/sources b/sources index 2e2d398..cf51705 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.4.14.tar.bz2) = 51dc830d4dfe000cf6091d728d9ce6248585f5fae729536d611f85a0981722b9ab7f13322b516dc9988cdc15e0859f946aa0b78a35ad13a67e2de8082e6d5549 +SHA512 (wireplumber-0.4.15.tar.bz2) = 53cf2027c69e8f44fc2c0c8910c1371ef8b5020aa1c47ca77f448998e810133821d9aa8de855482308b861f67b3d1cbd039c510460d59c6f9f2a44049577605b diff --git a/wireplumber.spec b/wireplumber.spec index 27db43b..5304dad 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber -Version: 0.4.14 -Release: 2%{?dist} +Version: 0.4.15 +Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -101,6 +101,7 @@ fi %dir %{_sysconfdir}/wireplumber/main.lua.d %dir %{_sysconfdir}/wireplumber/policy.lua.d %{_datadir}/wireplumber/ +%{_datadir}/zsh/site-functions/_wpctl %{_userunitdir}/wireplumber.service %{_userunitdir}/wireplumber@.service @@ -118,6 +119,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Thu Oct 12 2023 Wim Taymans - 0.4.15-1 +- wireplumber 0.4.15 + * Fri Sep 08 2023 Peter Hutterer - SPDX migration: mark as done From f3af28bd7dd114ef9414096cc6496f9f38260a5b Mon Sep 17 00:00:00 2001 From: Hector Martin Date: Tue, 7 Nov 2023 16:57:11 +0900 Subject: [PATCH 10/39] Add upstream patch to enable node hiding --- ...dsp-add-ability-to-hide-parent-nodes.patch | 69 +++++++++++++++++++ wireplumber.spec | 6 +- 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 0001-policy-dsp-add-ability-to-hide-parent-nodes.patch diff --git a/0001-policy-dsp-add-ability-to-hide-parent-nodes.patch b/0001-policy-dsp-add-ability-to-hide-parent-nodes.patch new file mode 100644 index 0000000..1582625 --- /dev/null +++ b/0001-policy-dsp-add-ability-to-hide-parent-nodes.patch @@ -0,0 +1,69 @@ +From 7a65d76a57a5a656a5d9385b0144d15b376ddc7d Mon Sep 17 00:00:00 2001 +From: James Calligeros +Date: Sun, 29 Oct 2023 11:03:36 +1000 +Subject: [PATCH] policy-dsp: add ability to hide parent nodes + +some hardware devices are never supposed to be accessed directly by +clients, and are designed under the assumption that they will be +front-loaded by some sort of DSP. add a hide_parent property +to policy-dsp and revoke all permissions to the bound node of a DSP +graph where this is set to prevent hardware misuse or damage by poorly +behaved/configured clients. + +Signed-off-by: James Calligeros +--- + src/scripts/policy-dsp.lua | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +diff --git a/src/scripts/policy-dsp.lua b/src/scripts/policy-dsp.lua +index 55f86c68d018..ce23a67afded 100644 +--- a/src/scripts/policy-dsp.lua ++++ b/src/scripts/policy-dsp.lua +@@ -28,7 +28,12 @@ nodes_om = ObjectManager { + Interest { type = "node" }, + } + ++clients_om = ObjectManager { ++ Interest { type = "client" } ++} ++ + filter_chains = {} ++hidden_nodes = {} + + nodes_om:connect("object-added", function (om, node) + for _, r in ipairs(config.rules or {}) do +@@ -43,6 +48,17 @@ nodes_om:connect("object-added", function (om, node) + filter_chains[id] = LocalModule("libpipewire-module-filter-chain", r.filter_chain, {}, true) + end + end ++ ++ if r.hide_parent then ++ Log.debug("Hiding node " .. node["bound-id"] .. " from clients") ++ for client in clients_om:iterate { type = "client" } do ++ if not client["properties"]["wireplumber.daemon"] then ++ client:update_permissions { [node["bound-id"]] = "-" } ++ end ++ end ++ hidden_nodes[node["bound-id"]] = id ++ end ++ + end + end + end +@@ -58,4 +74,13 @@ nodes_om:connect("object-removed", function (om, node) + end + end) + ++clients_om:connect("object-added", function (om, client) ++ for id, _ in pairs(hidden_nodes) do ++ if not client["properties"]["wireplumber.daemon"] then ++ client:update_permissions { [id] = "-" } ++ end ++ end ++end) ++ + nodes_om:activate() ++clients_om:activate() +-- +2.41.0 + diff --git a/wireplumber.spec b/wireplumber.spec index 5304dad..55687c3 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.4.15 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -8,6 +8,7 @@ URL: https://pipewire.pages.freedesktop.org/wireplumber/ Source0: https://gitlab.freedesktop.org/pipewire/%{name}/-/archive/%{version}/%{name}-%{version}.tar.bz2 ## upstream patches +Patch0001: 0001-policy-dsp-add-ability-to-hide-parent-nodes.patch ## upstreamable patches @@ -119,6 +120,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Tue Nov 7 2023 Hector Martin - 0.4.15-2 +- Add upstream patch to enable node hiding + * Thu Oct 12 2023 Wim Taymans - 0.4.15-1 - wireplumber 0.4.15 From 970fce2acee788371d8e129b6b973e25a437e649 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 23 Nov 2023 09:36:56 +0100 Subject: [PATCH 11/39] wireplumber 0.4.16 --- ...dsp-add-ability-to-hide-parent-nodes.patch | 69 ------------------- sources | 2 +- wireplumber.spec | 8 ++- 3 files changed, 6 insertions(+), 73 deletions(-) delete mode 100644 0001-policy-dsp-add-ability-to-hide-parent-nodes.patch diff --git a/0001-policy-dsp-add-ability-to-hide-parent-nodes.patch b/0001-policy-dsp-add-ability-to-hide-parent-nodes.patch deleted file mode 100644 index 1582625..0000000 --- a/0001-policy-dsp-add-ability-to-hide-parent-nodes.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 7a65d76a57a5a656a5d9385b0144d15b376ddc7d Mon Sep 17 00:00:00 2001 -From: James Calligeros -Date: Sun, 29 Oct 2023 11:03:36 +1000 -Subject: [PATCH] policy-dsp: add ability to hide parent nodes - -some hardware devices are never supposed to be accessed directly by -clients, and are designed under the assumption that they will be -front-loaded by some sort of DSP. add a hide_parent property -to policy-dsp and revoke all permissions to the bound node of a DSP -graph where this is set to prevent hardware misuse or damage by poorly -behaved/configured clients. - -Signed-off-by: James Calligeros ---- - src/scripts/policy-dsp.lua | 25 +++++++++++++++++++++++++ - 1 file changed, 25 insertions(+) - -diff --git a/src/scripts/policy-dsp.lua b/src/scripts/policy-dsp.lua -index 55f86c68d018..ce23a67afded 100644 ---- a/src/scripts/policy-dsp.lua -+++ b/src/scripts/policy-dsp.lua -@@ -28,7 +28,12 @@ nodes_om = ObjectManager { - Interest { type = "node" }, - } - -+clients_om = ObjectManager { -+ Interest { type = "client" } -+} -+ - filter_chains = {} -+hidden_nodes = {} - - nodes_om:connect("object-added", function (om, node) - for _, r in ipairs(config.rules or {}) do -@@ -43,6 +48,17 @@ nodes_om:connect("object-added", function (om, node) - filter_chains[id] = LocalModule("libpipewire-module-filter-chain", r.filter_chain, {}, true) - end - end -+ -+ if r.hide_parent then -+ Log.debug("Hiding node " .. node["bound-id"] .. " from clients") -+ for client in clients_om:iterate { type = "client" } do -+ if not client["properties"]["wireplumber.daemon"] then -+ client:update_permissions { [node["bound-id"]] = "-" } -+ end -+ end -+ hidden_nodes[node["bound-id"]] = id -+ end -+ - end - end - end -@@ -58,4 +74,13 @@ nodes_om:connect("object-removed", function (om, node) - end - end) - -+clients_om:connect("object-added", function (om, client) -+ for id, _ in pairs(hidden_nodes) do -+ if not client["properties"]["wireplumber.daemon"] then -+ client:update_permissions { [id] = "-" } -+ end -+ end -+end) -+ - nodes_om:activate() -+clients_om:activate() --- -2.41.0 - diff --git a/sources b/sources index cf51705..94877db 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.4.15.tar.bz2) = 53cf2027c69e8f44fc2c0c8910c1371ef8b5020aa1c47ca77f448998e810133821d9aa8de855482308b861f67b3d1cbd039c510460d59c6f9f2a44049577605b +SHA512 (wireplumber-0.4.16.tar.bz2) = 10bff323403f727b8653c8d287827e2c1e47913f2e3978d5f6e11fd29f30311fc1a11b4893073fa668a70d7dc115002822fa402f98e5b2d0e2eaa81145b727d8 diff --git a/wireplumber.spec b/wireplumber.spec index 55687c3..3912059 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber -Version: 0.4.15 -Release: 2%{?dist} +Version: 0.4.16 +Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -8,7 +8,6 @@ URL: https://pipewire.pages.freedesktop.org/wireplumber/ Source0: https://gitlab.freedesktop.org/pipewire/%{name}/-/archive/%{version}/%{name}-%{version}.tar.bz2 ## upstream patches -Patch0001: 0001-policy-dsp-add-ability-to-hide-parent-nodes.patch ## upstreamable patches @@ -120,6 +119,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Thu Oct 12 2023 Wim Taymans - 0.4.16-1 +- wireplumber 0.4.16 + * Tue Nov 7 2023 Hector Martin - 0.4.15-2 - Add upstream patch to enable node hiding From 4bb0095bc1df137829fee703c12618122703b247 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 23 Nov 2023 09:47:04 +0100 Subject: [PATCH 12/39] fix date --- wireplumber.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wireplumber.spec b/wireplumber.spec index 3912059..77f2e33 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -119,7 +119,7 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog -* Thu Oct 12 2023 Wim Taymans - 0.4.16-1 +* Thu Nov 23 2023 Wim Taymans - 0.4.16-1 - wireplumber 0.4.16 * Tue Nov 7 2023 Hector Martin - 0.4.15-2 From 09be2ae0b9c15f4fad840eef974d3b0a03ebe083 Mon Sep 17 00:00:00 2001 From: Hector Martin Date: Mon, 4 Dec 2023 19:59:04 +0900 Subject: [PATCH 13/39] Create and own /usr/share/wireplumber/wireplumber.conf.d Another dir for extra packages to drop files in. --- wireplumber.spec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/wireplumber.spec b/wireplumber.spec index 77f2e33..adbc361 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.4.16 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -76,6 +76,9 @@ managing PipeWire. # Create local config skeleton mkdir -p %{buildroot}%{_sysconfdir}/wireplumber/{bluetooth.lua.d,common,main.lua.d,policy.lua.d} +# Create missing empty system config dirs for other packages to drop files in +mkdir -p %{buildroot}%{_datadir}/wireplumber/wireplumber.conf.d + %find_lang %{name} %posttrans @@ -119,6 +122,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Mon Dec 4 2023 Hector Martin - 0.4.16-2 +- Create and own /usr/share/wireplumber/wireplumber.conf.d + * Thu Nov 23 2023 Wim Taymans - 0.4.16-1 - wireplumber 0.4.16 From f44cbf0fb343a4d49e93661215b74ff620522baf Mon Sep 17 00:00:00 2001 From: Neal Gompa Date: Mon, 4 Dec 2023 06:03:22 -0500 Subject: [PATCH 14/39] Add new configuration drop-in directory to the file list Fixes: 09be2ae0b9c15f4fad840eef974d3b0a03ebe083 --- wireplumber.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/wireplumber.spec b/wireplumber.spec index adbc361..b1e4e3c 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -104,6 +104,7 @@ fi %dir %{_sysconfdir}/wireplumber/main.lua.d %dir %{_sysconfdir}/wireplumber/policy.lua.d %{_datadir}/wireplumber/ +%dir %{_datadir}/wireplumber/wireplumber.conf.d %{_datadir}/zsh/site-functions/_wpctl %{_userunitdir}/wireplumber.service %{_userunitdir}/wireplumber@.service From a08e66d4e19c9d4543f320512ca9c8c33575c599 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 4 Dec 2023 10:59:22 +0100 Subject: [PATCH 15/39] wireplumber 0.4.17 --- sources | 2 +- wireplumber.spec | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sources b/sources index 94877db..63d2fbb 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.4.16.tar.bz2) = 10bff323403f727b8653c8d287827e2c1e47913f2e3978d5f6e11fd29f30311fc1a11b4893073fa668a70d7dc115002822fa402f98e5b2d0e2eaa81145b727d8 +SHA512 (wireplumber-0.4.17.tar.bz2) = 5efb71091f262458bc912f4670249fac3ef858021785fbee9be749564a3fa452b1c4ff75634132f7d44fd06d7fc5ea2debb022b1f4a8d5c9c3afa992fab7ecf8 diff --git a/wireplumber.spec b/wireplumber.spec index b1e4e3c..0429c57 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber -Version: 0.4.16 -Release: 2%{?dist} +Version: 0.4.17 +Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -123,6 +123,9 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Mon Dec 4 2023 Wim Taymans - 0.4.17-1 +- wireplumber 0.4.17 + * Mon Dec 4 2023 Hector Martin - 0.4.16-2 - Create and own /usr/share/wireplumber/wireplumber.conf.d From f036e886916753fca72d2a7642164ac806a3bac6 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 25 Jan 2024 11:48:38 +0100 Subject: [PATCH 16/39] wireplumber 0.4.81 --- sources | 2 +- wireplumber.spec | 35 +++++++++++++++++++++++++---------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/sources b/sources index 63d2fbb..eb39a5d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.4.17.tar.bz2) = 5efb71091f262458bc912f4670249fac3ef858021785fbee9be749564a3fa452b1c4ff75634132f7d44fd06d7fc5ea2debb022b1f4a8d5c9c3afa992fab7ecf8 +SHA512 (wireplumber-0.4.81.tar.bz2) = b88495c4b74f2502263e4f87d4e5bb15403351acdfd20e9430c59d61f7e5a4db4ab8d5fd104a4c75b137bb33fbea5c910e849047808765cb68eb8c81ccb08847 diff --git a/wireplumber.spec b/wireplumber.spec index 0429c57..1b0cfca 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,5 +1,5 @@ Name: wireplumber -Version: 0.4.17 +Version: 0.4.81 Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire @@ -52,6 +52,13 @@ Requires: %{name}-libs%{?_isa} = %{version}-%{release} The %{name}-devel package contains libraries and header files for developing applications that use %{name}. +%package doc +Summary: Documentation for %{name} +Recommends: %{name}%{?_isa} = %{version}-%{release} + +%description doc +This package contains the documentation for WirePlumber. + %description WirePlumber is a modular session/policy manager for PipeWire and a GObject-based high-level library that wraps PipeWire's API, providing @@ -104,25 +111,33 @@ fi %dir %{_sysconfdir}/wireplumber/main.lua.d %dir %{_sysconfdir}/wireplumber/policy.lua.d %{_datadir}/wireplumber/ -%dir %{_datadir}/wireplumber/wireplumber.conf.d +%{_datadir}/pipewire/wireplumber.conf +%dir %{_datadir}/pipewire/wireplumber.conf.d +%{_datadir}/pipewire/wireplumber.conf.d %{_datadir}/zsh/site-functions/_wpctl %{_userunitdir}/wireplumber.service %{_userunitdir}/wireplumber@.service %files libs -f %{name}.lang %license LICENSE -%dir %{_libdir}/wireplumber-0.4/ -%{_libdir}/wireplumber-0.4/libwireplumber-*.so -%{_libdir}/libwireplumber-0.4.so.* -%{_libdir}/girepository-1.0/Wp-0.4.typelib +%dir %{_libdir}/wireplumber-0.5/ +%{_libdir}/wireplumber-0.5/libwireplumber-*.so +%{_libdir}/libwireplumber-0.5.so.* +%{_libdir}/girepository-1.0/Wp-0.5.typelib %files devel -%{_includedir}/wireplumber-0.4/ -%{_libdir}/libwireplumber-0.4.so -%{_libdir}/pkgconfig/wireplumber-0.4.pc -%{_datadir}/gir-1.0/Wp-0.4.gir +%{_includedir}/wireplumber-0.5/ +%{_libdir}/libwireplumber-0.5.so +%{_libdir}/pkgconfig/wireplumber-0.5.pc +%{_datadir}/gir-1.0/Wp-0.5.gir + +%files doc +%{_datadir}/doc/wireplumber/ %changelog +* Thu Jan 25 2024 Wim Taymans - 0.4.81-1 +- wireplumber 0.4.81 + * Mon Dec 4 2023 Wim Taymans - 0.4.17-1 - wireplumber 0.4.17 From 29da608bf6c23f285eac858ac29404df52c9bcbd Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 11 Mar 2024 14:52:42 +0100 Subject: [PATCH 17/39] wireplumber 0.4.90 --- sources | 2 +- wireplumber.spec | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sources b/sources index eb39a5d..d88dfb2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.4.81.tar.bz2) = b88495c4b74f2502263e4f87d4e5bb15403351acdfd20e9430c59d61f7e5a4db4ab8d5fd104a4c75b137bb33fbea5c910e849047808765cb68eb8c81ccb08847 +SHA512 (wireplumber-0.4.90.tar.bz2) = 631f2cef69ef2904d5f460e5944d087ee252da0626d516426106d0bea71d846d38a8cffc39e6902957b618dee3b5fa575b4deb71289a27b26d8a97eee6f73007 diff --git a/wireplumber.spec b/wireplumber.spec index 1b0cfca..0dc9b4a 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,5 +1,5 @@ Name: wireplumber -Version: 0.4.81 +Version: 0.4.90 Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire @@ -111,9 +111,6 @@ fi %dir %{_sysconfdir}/wireplumber/main.lua.d %dir %{_sysconfdir}/wireplumber/policy.lua.d %{_datadir}/wireplumber/ -%{_datadir}/pipewire/wireplumber.conf -%dir %{_datadir}/pipewire/wireplumber.conf.d -%{_datadir}/pipewire/wireplumber.conf.d %{_datadir}/zsh/site-functions/_wpctl %{_userunitdir}/wireplumber.service %{_userunitdir}/wireplumber@.service @@ -135,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Mon Mar 11 2024 Wim Taymans - 0.4.90-1 +- wireplumber 0.4.90 + * Thu Jan 25 2024 Wim Taymans - 0.4.81-1 - wireplumber 0.4.81 From e284ce71db6deea84459b4daac31c7bb1d91d09d Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 18 Mar 2024 17:23:44 +0100 Subject: [PATCH 18/39] wireplumber 0.5.0 --- sources | 2 +- wireplumber.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sources b/sources index d88dfb2..45f01eb 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.4.90.tar.bz2) = 631f2cef69ef2904d5f460e5944d087ee252da0626d516426106d0bea71d846d38a8cffc39e6902957b618dee3b5fa575b4deb71289a27b26d8a97eee6f73007 +SHA512 (wireplumber-0.5.0.tar.bz2) = 06083ccb8f091f1404475fb315b70141a81bbb59571428f1d9997d05c34141c4be4d4bfcd8ba73cdbc28ce13e0cd7ab82d0c0b76fa625288bde77aac5071dbf2 diff --git a/wireplumber.spec b/wireplumber.spec index 0dc9b4a..4283578 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,5 +1,5 @@ Name: wireplumber -Version: 0.4.90 +Version: 0.5.0 Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Mon Mar 18 2024 Wim Taymans - 0.5.0-1 +- wireplumber 0.5.0 + * Mon Mar 11 2024 Wim Taymans - 0.4.90-1 - wireplumber 0.4.90 From 947f45b07615a8ad02958891efa79d2cb6c4c083 Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: Mon, 25 Mar 2024 22:59:58 -0700 Subject: [PATCH 19/39] Backport MR #620 to fix issues with bluetooth headsets etc. --- 620.patch | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ wireplumber.spec | 11 ++++++++- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 620.patch diff --git a/620.patch b/620.patch new file mode 100644 index 0000000..897671f --- /dev/null +++ b/620.patch @@ -0,0 +1,61 @@ +From 428462ddf3f812a1da63d0b499e105c6391abbf4 Mon Sep 17 00:00:00 2001 +From: Pauli Virtanen +Date: Thu, 21 Mar 2024 20:02:02 +0200 +Subject: [PATCH] filter-utils: fix handling of targetless smart filters + +A smart filter should be considered "targetless" (i.e. interpose on +streams going to default target) only if filter.smart.target is not set. + +Currently any smart filter with specified target not found is considered +such, which is wrong. This causes misbehavior, such as all recording +streams going to the bluetooth dummy source. + +Fix this by doing it correctly. +--- + src/scripts/lib/filter-utils.lua | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +diff --git a/src/scripts/lib/filter-utils.lua b/src/scripts/lib/filter-utils.lua +index c3671242..804c3ea1 100644 +--- a/src/scripts/lib/filter-utils.lua ++++ b/src/scripts/lib/filter-utils.lua +@@ -157,6 +157,19 @@ local function getFilterSmartTarget (metadata, node, om) + return target + end + ++local function getFilterSmartTargetless (metadata, node) ++ local id = node["bound-id"] ++ local value_str = nil ++ if metadata ~= nil then ++ value_str = metadata:find (id, "filter.smart.target") ++ end ++ if value_str == nil then ++ value_str = node.properties ["filter.smart.target"] ++ end ++ ++ return value_str == nil ++end ++ + local function getFilterSmartBefore (metadata, node) + -- Check metadata and fallback to properties + local id = node["bound-id"] +@@ -312,6 +325,7 @@ local function rescanFilters (om, metadata_om) + filter.disabled = getFilterSmartDisabled (metadata, n) + filter.targetable = getFilterSmartTargetable (metadata, n) + filter.target = getFilterSmartTarget (metadata, n, om) ++ filter.targetless = getFilterSmartTargetless (metadata, n) + filter.before = getFilterSmartBefore (metadata, n) + filter.after = getFilterSmartAfter (metadata, n) + +@@ -471,7 +485,7 @@ function module.get_filter_from_target (direction, si_target) + not v.disabled and + v.smart and + ((v.target ~= nil and target ~= nil and v.target.id == target.id) or +- (target == nil and v.target == nil)) then ++ (target == nil and v.targetless)) then + return v.main_si + end + end +-- +GitLab + diff --git a/wireplumber.spec b/wireplumber.spec index 4283578..51502d1 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.5.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -8,6 +8,11 @@ URL: https://pipewire.pages.freedesktop.org/wireplumber/ Source0: https://gitlab.freedesktop.org/pipewire/%{name}/-/archive/%{version}/%{name}-%{version}.tar.bz2 ## upstream patches +# https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/620 +# Fix smart filter issue affecting bluetooth headsets and other cases +# https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/598 +# https://bugzilla.redhat.com/show_bug.cgi?id=2269343 +Patch: 620.patch ## upstreamable patches @@ -132,6 +137,10 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Mon Mar 25 2024 Adam Williamson - 0.5.0-2 +- Backport MR #620 to fix issues with bluetooth headsets etc. +- Resolves: rhbz#2269343 + * Mon Mar 18 2024 Wim Taymans - 0.5.0-1 - wireplumber 0.5.0 From 0d00e50a0bd568d5e28d71609d1e8a94bc71c2d1 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 2 Apr 2024 09:59:02 +0200 Subject: [PATCH 20/39] wireplumber 0.5.1 --- 620.patch | 61 ------------------------------------------------ sources | 2 +- wireplumber.spec | 12 ++++------ 3 files changed, 6 insertions(+), 69 deletions(-) delete mode 100644 620.patch diff --git a/620.patch b/620.patch deleted file mode 100644 index 897671f..0000000 --- a/620.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 428462ddf3f812a1da63d0b499e105c6391abbf4 Mon Sep 17 00:00:00 2001 -From: Pauli Virtanen -Date: Thu, 21 Mar 2024 20:02:02 +0200 -Subject: [PATCH] filter-utils: fix handling of targetless smart filters - -A smart filter should be considered "targetless" (i.e. interpose on -streams going to default target) only if filter.smart.target is not set. - -Currently any smart filter with specified target not found is considered -such, which is wrong. This causes misbehavior, such as all recording -streams going to the bluetooth dummy source. - -Fix this by doing it correctly. ---- - src/scripts/lib/filter-utils.lua | 16 +++++++++++++++- - 1 file changed, 15 insertions(+), 1 deletion(-) - -diff --git a/src/scripts/lib/filter-utils.lua b/src/scripts/lib/filter-utils.lua -index c3671242..804c3ea1 100644 ---- a/src/scripts/lib/filter-utils.lua -+++ b/src/scripts/lib/filter-utils.lua -@@ -157,6 +157,19 @@ local function getFilterSmartTarget (metadata, node, om) - return target - end - -+local function getFilterSmartTargetless (metadata, node) -+ local id = node["bound-id"] -+ local value_str = nil -+ if metadata ~= nil then -+ value_str = metadata:find (id, "filter.smart.target") -+ end -+ if value_str == nil then -+ value_str = node.properties ["filter.smart.target"] -+ end -+ -+ return value_str == nil -+end -+ - local function getFilterSmartBefore (metadata, node) - -- Check metadata and fallback to properties - local id = node["bound-id"] -@@ -312,6 +325,7 @@ local function rescanFilters (om, metadata_om) - filter.disabled = getFilterSmartDisabled (metadata, n) - filter.targetable = getFilterSmartTargetable (metadata, n) - filter.target = getFilterSmartTarget (metadata, n, om) -+ filter.targetless = getFilterSmartTargetless (metadata, n) - filter.before = getFilterSmartBefore (metadata, n) - filter.after = getFilterSmartAfter (metadata, n) - -@@ -471,7 +485,7 @@ function module.get_filter_from_target (direction, si_target) - not v.disabled and - v.smart and - ((v.target ~= nil and target ~= nil and v.target.id == target.id) or -- (target == nil and v.target == nil)) then -+ (target == nil and v.targetless)) then - return v.main_si - end - end --- -GitLab - diff --git a/sources b/sources index 45f01eb..1b326ee 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.0.tar.bz2) = 06083ccb8f091f1404475fb315b70141a81bbb59571428f1d9997d05c34141c4be4d4bfcd8ba73cdbc28ce13e0cd7ab82d0c0b76fa625288bde77aac5071dbf2 +SHA512 (wireplumber-0.5.1.tar.bz2) = 147f7ab9c1d253fa0284a2c17a5b1395b6f9c505e7e6ec3449f8281b8a5f4f4911fb70f552e6dc4cc8b5a5847a959aea42009da08e0475ba66ff0450658c4b2d diff --git a/wireplumber.spec b/wireplumber.spec index 51502d1..82dc856 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber -Version: 0.5.0 -Release: 2%{?dist} +Version: 0.5.1 +Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -8,11 +8,6 @@ URL: https://pipewire.pages.freedesktop.org/wireplumber/ Source0: https://gitlab.freedesktop.org/pipewire/%{name}/-/archive/%{version}/%{name}-%{version}.tar.bz2 ## upstream patches -# https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/620 -# Fix smart filter issue affecting bluetooth headsets and other cases -# https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/598 -# https://bugzilla.redhat.com/show_bug.cgi?id=2269343 -Patch: 620.patch ## upstreamable patches @@ -137,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Tue Apr 02 2024 Wim Taymans - 0.5.1-1 +- wireplumber 0.5.1 + * Mon Mar 25 2024 Adam Williamson - 0.5.0-2 - Backport MR #620 to fix issues with bluetooth headsets etc. - Resolves: rhbz#2269343 From 9e9bc6259459b8596f76221eabd67ff4b60dfa40 Mon Sep 17 00:00:00 2001 From: Neal Gompa Date: Thu, 18 Apr 2024 16:39:18 -0400 Subject: [PATCH 21/39] Backport support for loading external WpConf from disk This is required to support Asahi DSP with WirePlumber 0.5.x. --- ...pport-mixing-static-methods-and-cons.patch | 45 ++++++ ...-behaviour-of-wp_base_dirs_find_file.patch | 38 +++++ ...d-WpProperties-as-a-member-of-WpConf.patch | 94 +++++++++++ ...pConf-to-be-loaded-without-fragments.patch | 91 +++++++++++ ...-JSON-container-to-be-loaded-as-a-na.patch | 75 +++++++++ ...-constructor-and-file-ops-for-WpConf.patch | 102 ++++++++++++ ...Conf-methods-to-be-indexed-or-called.patch | 151 ++++++++++++++++++ ...p-implement-loading-filter-graphs-fr.patch | 43 +++++ ...lter-path-property-of-software-DSP-p.patch | 44 +++++ ...ware-dsp-do-not-hide-target-node-whe.patch | 40 +++++ wireplumber.spec | 15 +- 11 files changed, 737 insertions(+), 1 deletion(-) create mode 100644 0001-wplua-sandbox-support-mixing-static-methods-and-cons.patch create mode 100644 0002-conf-explain-behaviour-of-wp_base_dirs_find_file.patch create mode 100644 0003-conf-Add-WpProperties-as-a-member-of-WpConf.patch create mode 100644 0004-conf-allow-a-WpConf-to-be-loaded-without-fragments.patch create mode 100644 0005-conf-allow-a-SPA-JSON-container-to-be-loaded-as-a-na.patch create mode 100644 0006-lua-add-constructor-and-file-ops-for-WpConf.patch create mode 100644 0007-lua-allow-Conf-methods-to-be-indexed-or-called.patch create mode 100644 0008-node-software-dsp-implement-loading-filter-graphs-fr.patch create mode 100644 0009-docs-document-filter-path-property-of-software-DSP-p.patch create mode 100644 0010-Revert-node-software-dsp-do-not-hide-target-node-whe.patch diff --git a/0001-wplua-sandbox-support-mixing-static-methods-and-cons.patch b/0001-wplua-sandbox-support-mixing-static-methods-and-cons.patch new file mode 100644 index 0000000..0f4c227 --- /dev/null +++ b/0001-wplua-sandbox-support-mixing-static-methods-and-cons.patch @@ -0,0 +1,45 @@ +From 8892204f24878c3c5084fd106b6e7397712a4ee6 Mon Sep 17 00:00:00 2001 +From: George Kiagiadakis +Date: Fri, 5 Apr 2024 21:16:11 +0300 +Subject: [PATCH 01/10] wplua/sandbox: support mixing static methods and + constructors in class identifiers + +Global class identifiers, such as "Node", "SessionItem", "Conf", etc +are so far defined either as methods, which are constructors for +the GObject class, or as tables, which contain "static" methods, i.e. +methods that can be called without an instance. + +In some cases, we may want to mix a class being both instantiatable +with a constructor and also have static methods. To support this, +allow the class identifier be declared as a table with the constructor +being defined as the "__new" method. This change allows calling the +table as a method and execute "__new" underneath. + +For instance: +``` +json = Conf.get_section_as_json("foobar") -- static method +conf = Conf("/foo/bar") -- constructor, equivalent to Conf.__new("/foo/bar") +``` + +See also !629 +--- + modules/module-lua-scripting/wplua/sandbox.lua | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/modules/module-lua-scripting/wplua/sandbox.lua b/modules/module-lua-scripting/wplua/sandbox.lua +index 9ffe8d40..9c2c17dd 100644 +--- a/modules/module-lua-scripting/wplua/sandbox.lua ++++ b/modules/module-lua-scripting/wplua/sandbox.lua +@@ -43,6 +43,9 @@ function create_sandbox_env() + if type(v) == "table" then + SANDBOX_ENV[k] = setmetatable({}, { + __index = v, ++ __call = function(t, ...) ++ return t["__new"](...) ++ end, + __newindex = function(_, attr_name, _) + error('Can not modify ' .. k .. '.' .. attr_name .. '. Protected by the sandbox.') + end +-- +2.44.0 + diff --git a/0002-conf-explain-behaviour-of-wp_base_dirs_find_file.patch b/0002-conf-explain-behaviour-of-wp_base_dirs_find_file.patch new file mode 100644 index 0000000..9c7b3eb --- /dev/null +++ b/0002-conf-explain-behaviour-of-wp_base_dirs_find_file.patch @@ -0,0 +1,38 @@ +From 105d53025e1d877ed046a062f823c35ea934af2a Mon Sep 17 00:00:00 2001 +From: James Calligeros +Date: Sat, 30 Mar 2024 14:18:49 +1000 +Subject: [PATCH 02/10] conf: explain behaviour of wp_base_dirs_find_file + +The signature of the function is quite misleading. If an absolute +path is passed to it, it will ignore the directory constraint flags +and search outside of the specified directories anyway. Make a note +of this in its caller. + +Signed-off-by: James Calligeros +--- + lib/wp/conf.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/lib/wp/conf.c b/lib/wp/conf.c +index 4638f57e..f10a04cc 100644 +--- a/lib/wp/conf.c ++++ b/lib/wp/conf.c +@@ -269,10 +269,13 @@ wp_conf_open (WpConf * self, GError ** error) + g_autoptr (WpIterator) iterator = NULL; + g_auto (GValue) value = G_VALUE_INIT; + +- /* open the main file */ ++ /* ++ * open the config file - if the path supplied is absolute, ++ * wp_base_dirs_find_file will ignore WP_BASE_DIRS_CONFIGURATION ++ */ + path = wp_base_dirs_find_file (WP_BASE_DIRS_CONFIGURATION, NULL, self->name); + if (path) { +- wp_info_object (self, "opening main file: %s", path); ++ wp_info_object (self, "opening config file: %s", path); + if (!open_and_load_sections (self, path, error)) + return FALSE; + } +-- +2.44.0 + diff --git a/0003-conf-Add-WpProperties-as-a-member-of-WpConf.patch b/0003-conf-Add-WpProperties-as-a-member-of-WpConf.patch new file mode 100644 index 0000000..3c4cda6 --- /dev/null +++ b/0003-conf-Add-WpProperties-as-a-member-of-WpConf.patch @@ -0,0 +1,94 @@ +From 42666e20548216f11721567d0df0ed396bbb8495 Mon Sep 17 00:00:00 2001 +From: James Calligeros +Date: Sat, 30 Mar 2024 16:05:05 +1000 +Subject: [PATCH 03/10] conf: Add WpProperties as a member of WpConf + +WpProperties may be used to control the behaviour of a WpConf +object. This allows those properties to be referenced at any time +during the lifetime of a WpConf. + +Signed-off-by: James Calligeros +--- + lib/wp/conf.c | 23 +++++++++++++++++++---- + 1 file changed, 19 insertions(+), 4 deletions(-) + +diff --git a/lib/wp/conf.c b/lib/wp/conf.c +index f10a04cc..ed96200b 100644 +--- a/lib/wp/conf.c ++++ b/lib/wp/conf.c +@@ -50,6 +50,7 @@ struct _WpConf + + /* Props */ + gchar *name; ++ WpProperties *properties; + + /* Private */ + GArray *conf_sections; /* element-type: WpConfSection */ +@@ -59,6 +60,7 @@ struct _WpConf + enum { + PROP_0, + PROP_NAME, ++ PROP_PROPERTIES, + }; + + G_DEFINE_TYPE (WpConf, wp_conf, G_TYPE_OBJECT) +@@ -81,6 +83,9 @@ wp_conf_set_property (GObject * object, guint property_id, + case PROP_NAME: + self->name = g_value_dup_string (value); + break; ++ case PROP_PROPERTIES: ++ self->properties = g_value_dup_boxed (value); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; +@@ -97,6 +102,9 @@ wp_conf_get_property (GObject * object, guint property_id, + case PROP_NAME: + g_value_set_string (value, self->name); + break; ++ case PROP_PROPERTIES: ++ g_value_take_boxed (value, wp_properties_copy (self->properties)); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; +@@ -109,6 +117,7 @@ wp_conf_finalize (GObject * object) + WpConf *self = WP_CONF (object); + + wp_conf_close (self); ++ g_clear_pointer (&self->properties, wp_properties_unref); + g_clear_pointer (&self->conf_sections, g_array_unref); + g_clear_pointer (&self->files, g_ptr_array_unref); + g_clear_pointer (&self->name, g_free); +@@ -125,9 +134,13 @@ wp_conf_class_init (WpConfClass * klass) + object_class->set_property = wp_conf_set_property; + object_class->get_property = wp_conf_get_property; + +- g_object_class_install_property (object_class, PROP_NAME, +- g_param_spec_string ("name", "name", "The name of the configuration file", ++ g_object_class_install_property(object_class, PROP_NAME, ++ g_param_spec_string ("name", "name", "The name of the configuration file", + NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); ++ ++ g_object_class_install_property(object_class, PROP_PROPERTIES, ++ g_param_spec_boxed ("properties", "properties", "WpProperties", ++ WP_TYPE_PROPERTIES, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + } + + /*! +@@ -145,8 +158,10 @@ WpConf * + wp_conf_new (const gchar * name, WpProperties * properties) + { + g_return_val_if_fail (name, NULL); +- g_clear_pointer (&properties, wp_properties_unref); +- return g_object_new (WP_TYPE_CONF, "name", name, NULL); ++ g_autoptr (WpProperties) props = properties; ++ return g_object_new (WP_TYPE_CONF, "name", name, ++ "properties", props, ++ NULL); + } + + /*! +-- +2.44.0 + diff --git a/0004-conf-allow-a-WpConf-to-be-loaded-without-fragments.patch b/0004-conf-allow-a-WpConf-to-be-loaded-without-fragments.patch new file mode 100644 index 0000000..03cd8f5 --- /dev/null +++ b/0004-conf-allow-a-WpConf-to-be-loaded-without-fragments.patch @@ -0,0 +1,91 @@ +From 34040d8e4466871039f6426e38bf16cfb7c1d39a Mon Sep 17 00:00:00 2001 +From: James Calligeros +Date: Sat, 30 Mar 2024 16:25:50 +1000 +Subject: [PATCH 04/10] conf: allow a WpConf to be loaded without fragments + +Use WpProperties to indicate that searching for and loading +conf.d fragments can/should be skipped. + +Signed-off-by: James Calligeros +--- + lib/wp/conf.c | 34 ++++++++++++++++++++++------------ + 1 file changed, 22 insertions(+), 12 deletions(-) + +diff --git a/lib/wp/conf.c b/lib/wp/conf.c +index ed96200b..d0105aaf 100644 +--- a/lib/wp/conf.c ++++ b/lib/wp/conf.c +@@ -151,7 +151,8 @@ wp_conf_class_init (WpConfClass * klass) + * + * \ingroup wpconf + * \param name the name of the configuration file +- * \param properties (transfer full) (nullable): unused, reserved for future use ++ * \param properties (transfer full) (nullable): a WpProperties with keys ++ * specifying how to load the WpConf object + * \returns (transfer full): a new WpConf object + */ + WpConf * +@@ -170,7 +171,8 @@ wp_conf_new (const gchar * name, WpProperties * properties) + * + * \ingroup wpconf + * \param name the name of the configuration file +- * \param properties (transfer full) (nullable): unused, reserved for future use ++ * \param properties (transfer full) (nullable): a WpProperties with keys ++ * specifying how to load the WpConf object + * \param error (out) (nullable): return location for a GError, or NULL + * \returns (transfer full) (nullable): a new WpConf object, or NULL + * if an error occurred +@@ -278,12 +280,18 @@ open_and_load_sections (WpConf * self, const gchar *path, GError ** error) + gboolean + wp_conf_open (WpConf * self, GError ** error) + { ++ const gchar *no_frags = NULL; ++ + g_return_val_if_fail (WP_IS_CONF (self), FALSE); + + g_autofree gchar *path = NULL; + g_autoptr (WpIterator) iterator = NULL; + g_auto (GValue) value = G_VALUE_INIT; + ++ if (self->properties) { ++ no_frags = wp_properties_get (self->properties, "no-fragments"); ++ } ++ + /* + * open the config file - if the path supplied is absolute, + * wp_base_dirs_find_file will ignore WP_BASE_DIRS_CONFIGURATION +@@ -297,19 +305,21 @@ wp_conf_open (WpConf * self, GError ** error) + g_clear_pointer (&path, g_free); + + /* open the .conf.d/ fragments */ +- path = g_strdup_printf ("%s.d", self->name); +- iterator = wp_base_dirs_new_files_iterator (WP_BASE_DIRS_CONFIGURATION, path, +- ".conf"); ++ if (!no_frags) { ++ path = g_strdup_printf ("%s.d", self->name); ++ iterator = wp_base_dirs_new_files_iterator (WP_BASE_DIRS_CONFIGURATION, path, ++ ".conf"); + +- for (; wp_iterator_next (iterator, &value); g_value_unset (&value)) { +- const gchar *filename = g_value_get_string (&value); ++ for (; wp_iterator_next (iterator, &value); g_value_unset (&value)) { ++ const gchar *filename = g_value_get_string (&value); + +- wp_info_object (self, "opening fragment file: %s", filename); ++ wp_info_object (self, "opening fragment file: %s", filename); + +- g_autoptr (GError) e = NULL; +- if (!open_and_load_sections (self, filename, &e)) { +- wp_warning_object (self, "failed to open '%s': %s", filename, e->message); +- continue; ++ g_autoptr (GError) e = NULL; ++ if (!open_and_load_sections (self, filename, &e)) { ++ wp_warning_object (self, "failed to open '%s': %s", filename, e->message); ++ continue; ++ } + } + } + +-- +2.44.0 + diff --git a/0005-conf-allow-a-SPA-JSON-container-to-be-loaded-as-a-na.patch b/0005-conf-allow-a-SPA-JSON-container-to-be-loaded-as-a-na.patch new file mode 100644 index 0000000..2c51abe --- /dev/null +++ b/0005-conf-allow-a-SPA-JSON-container-to-be-loaded-as-a-na.patch @@ -0,0 +1,75 @@ +From 59d29f37ac00c6ae79248831a915e00f037c4364 Mon Sep 17 00:00:00 2001 +From: James Calligeros +Date: Sat, 30 Mar 2024 16:26:29 +1000 +Subject: [PATCH 05/10] conf: allow a SPA-JSON container to be loaded as a + named WpConf section + +A "plain" JSON object may be passed to WpConf constructors. Previously, this +would cause an error as open_and_load_sections expects the first parsed token +to be a string. Use WpProperties to denote that the file being parsed is an +object/container, and specify a section name for it. + +Signed-off-by: James Calligeros +--- + lib/wp/conf.c | 31 +++++++++++++++++++++---------- + 1 file changed, 21 insertions(+), 10 deletions(-) + +diff --git a/lib/wp/conf.c b/lib/wp/conf.c +index d0105aaf..aa81c811 100644 +--- a/lib/wp/conf.c ++++ b/lib/wp/conf.c +@@ -201,6 +201,13 @@ detect_old_conf_format (WpConf * self, GMappedFile *file) + static gboolean + open_and_load_sections (WpConf * self, const gchar *path, GError ** error) + { ++ const gchar *as_section = NULL; ++ ++ if (self->properties) { ++ as_section = wp_properties_get (self->properties, "as-section"); ++ wp_info_object (self, "Opening as section %s", as_section); ++ } ++ + g_autoptr (GMappedFile) file = g_mapped_file_new (path, FALSE, error); + if (!file) + return FALSE; +@@ -229,7 +236,7 @@ open_and_load_sections (WpConf * self, const gchar *path, GError ** error) + if (!tmp) + break; + +- if (wp_spa_json_is_container (tmp) || ++ if ((wp_spa_json_is_container (tmp) && !as_section) || + wp_spa_json_is_int (tmp) || + wp_spa_json_is_float (tmp) || + wp_spa_json_is_boolean (tmp) || +@@ -241,15 +248,19 @@ open_and_load_sections (WpConf * self, const gchar *path, GError ** error) + return FALSE; + } + +- section.name = wp_spa_json_parse_string (tmp); +- g_clear_pointer (&tmp, wp_spa_json_unref); +- +- /* parse the section contents */ +- tmp = wp_spa_json_parser_get_json (parser); +- if (!tmp) { +- g_set_error (error, WP_DOMAIN_LIBRARY, WP_LIBRARY_ERROR_INVALID_ARGUMENT, +- "section '%s' has no value", section.name); +- return FALSE; ++ if (as_section) { ++ wp_info_object (self, "Parsing object file as section %s", as_section); ++ section.name = g_strdup (as_section); ++ } else { ++ section.name = wp_spa_json_parse_string (tmp); ++ g_clear_pointer (&tmp, wp_spa_json_unref); ++ /* parse the section contents */ ++ tmp = wp_spa_json_parser_get_json (parser); ++ if (!tmp) { ++ g_set_error (error, WP_DOMAIN_LIBRARY, WP_LIBRARY_ERROR_INVALID_ARGUMENT, ++ "section '%s' has no value", section.name); ++ return FALSE; ++ } + } + + section.value = g_steal_pointer (&tmp); +-- +2.44.0 + diff --git a/0006-lua-add-constructor-and-file-ops-for-WpConf.patch b/0006-lua-add-constructor-and-file-ops-for-WpConf.patch new file mode 100644 index 0000000..b7341b2 --- /dev/null +++ b/0006-lua-add-constructor-and-file-ops-for-WpConf.patch @@ -0,0 +1,102 @@ +From f769ea8f30c6ea4639c47c4a6dec3f21884ad400 Mon Sep 17 00:00:00 2001 +From: James Calligeros +Date: Wed, 3 Apr 2024 22:19:09 +1000 +Subject: [PATCH 06/10] lua: add constructor and file ops for WpConf + +This exposes the ability to load a SPA-JSON representation of a WpConf +object from an arbitrary file on disk to the Lua API + +Signed-off-by: James Calligeros +--- + modules/module-lua-scripting/api/api.c | 46 ++++++++++++++++++++++++ + modules/module-lua-scripting/api/api.lua | 3 ++ + 2 files changed, 49 insertions(+) + +diff --git a/modules/module-lua-scripting/api/api.c b/modules/module-lua-scripting/api/api.c +index 46df75b5..4eb889b9 100644 +--- a/modules/module-lua-scripting/api/api.c ++++ b/modules/module-lua-scripting/api/api.c +@@ -1618,6 +1618,48 @@ impl_module_new (lua_State *L) + + /* WpConf */ + ++ ++static int ++conf_new (lua_State *L) ++{ ++ const char *path = luaL_checkstring (L, 1); ++ WpProperties *p = NULL; ++ WpConf *conf = NULL; ++ ++ if (lua_istable (L, 2)) { ++ p = wplua_table_to_properties (L, 2); ++ } ++ ++ conf = wp_conf_new (path, p); ++ if (conf) { ++ wplua_pushobject (L, conf); ++ } else ++ lua_pushnil (L); ++ return 1; ++} ++ ++static int ++conf_open (lua_State *L) ++{ ++ WpConf *conf = wplua_checkobject (L, 1, WP_TYPE_CONF); ++ g_autoptr (GError) err = NULL; ++ ++ if (wp_conf_open (conf, &err)) { ++ lua_pushnil (L); ++ } else ++ lua_pushstring (L, err->message); ++ return 1; ++} ++ ++static int ++conf_close (lua_State *L) ++{ ++ WpConf *conf = wplua_checkobject (L, 1, WP_TYPE_CONF); ++ ++ wp_conf_close (conf); ++ return 0; ++} ++ + static int + conf_get_section_as_properties (lua_State *L) + { +@@ -1712,6 +1754,8 @@ conf_get_section_as_json (lua_State *L) + } + + static const luaL_Reg conf_methods[] = { ++ { "open", conf_open }, ++ { "close", conf_close }, + { "get_section_as_properties", conf_get_section_as_properties }, + { "get_section_as_object", conf_get_section_as_object }, + { "get_section_as_array", conf_get_section_as_array }, +@@ -2764,6 +2808,8 @@ wp_lua_scripting_api_init (lua_State *L) + async_event_hook_new, NULL); + wplua_register_type_methods (L, WP_TYPE_TRANSITION, + NULL, transition_methods); ++ wplua_register_type_methods (L, WP_TYPE_CONF, ++ conf_new, conf_methods); + + if (!wplua_load_uri (L, URI_API, &error) || + !wplua_pcall (L, 0, 0, &error)) { +diff --git a/modules/module-lua-scripting/api/api.lua b/modules/module-lua-scripting/api/api.lua +index a000d96c..b53686c2 100644 +--- a/modules/module-lua-scripting/api/api.lua ++++ b/modules/module-lua-scripting/api/api.lua +@@ -184,6 +184,9 @@ local Feature = { + }, + } + ++-- Allow calling Conf() to instantiate a new WpConf ++WpConf["__new"] = WpConf_new ++ + SANDBOX_EXPORT = { + Debug = Debug, + Id = Id, +-- +2.44.0 + diff --git a/0007-lua-allow-Conf-methods-to-be-indexed-or-called.patch b/0007-lua-allow-Conf-methods-to-be-indexed-or-called.patch new file mode 100644 index 0000000..a208572 --- /dev/null +++ b/0007-lua-allow-Conf-methods-to-be-indexed-or-called.patch @@ -0,0 +1,151 @@ +From d77edf70e958c31931b8357280cb764db4b273bf Mon Sep 17 00:00:00 2001 +From: James Calligeros +Date: Sat, 6 Apr 2024 15:44:53 +1000 +Subject: [PATCH 07/10] lua: allow Conf methods to be indexed or called + +Given that we are allowing Conf() to instantiate a new WpConf, +the methods on the class need to be callable in reference to Self while +maintaining API compatibility with being indexable from the table as a +static method. + +Allow this by checking if the first argument passed in is userdata. + +Signed-off-by: James Calligeros +--- + modules/module-lua-scripting/api/api.c | 75 ++++++++++++++++++++------ + 1 file changed, 59 insertions(+), 16 deletions(-) + +diff --git a/modules/module-lua-scripting/api/api.c b/modules/module-lua-scripting/api/api.c +index 4eb889b9..b991e930 100644 +--- a/modules/module-lua-scripting/api/api.c ++++ b/modules/module-lua-scripting/api/api.c +@@ -1663,13 +1663,24 @@ conf_close (lua_State *L) + static int + conf_get_section_as_properties (lua_State *L) + { +- const char *section = luaL_checkstring (L, 1); +- g_autoptr (WpConf) conf = wp_core_get_conf (get_wp_core (L)); ++ const char *section = NULL; ++ g_autoptr (WpConf) conf = NULL; + g_autoptr (WpSpaJson) s = NULL; + g_autoptr (WpProperties) props = NULL; ++ int argi = 1; ++ ++ /* check if called as method on object */ ++ if (lua_isuserdata (L, argi)) { ++ conf = g_object_ref (wplua_checkobject (L, argi, WP_TYPE_CONF)); ++ argi++; ++ } else ++ conf = wp_core_get_conf (get_wp_core (L)); ++ ++ section = luaL_checkstring (L, argi); ++ argi++; + +- if (lua_istable (L, 2)) +- props = wplua_table_to_properties (L, 2); ++ if (lua_istable (L, argi)) ++ props = wplua_table_to_properties (L, argi); + else + props = wp_properties_new_empty (); + +@@ -1685,9 +1696,20 @@ conf_get_section_as_properties (lua_State *L) + static int + conf_get_section_as_object (lua_State *L) + { +- const char *section = luaL_checkstring (L, 1); +- g_autoptr (WpConf) conf = wp_core_get_conf (get_wp_core (L)); ++ const char *section = NULL; ++ g_autoptr (WpConf) conf = NULL; + g_autoptr (WpSpaJson) s = NULL; ++ int argi = 1; ++ ++ /* check if called as method on object */ ++ if (lua_isuserdata (L, argi)) { ++ conf = g_object_ref (wplua_checkobject (L, argi, WP_TYPE_CONF)); ++ argi++; ++ } else ++ conf = wp_core_get_conf (get_wp_core (L)); ++ ++ section = luaL_checkstring (L, argi); ++ argi++; + + if (conf) { + s = wp_conf_get_section (conf, section); +@@ -1697,8 +1719,8 @@ conf_get_section_as_object (lua_State *L) + } + } + +- if (lua_istable (L, 2)) +- lua_pushvalue (L, 2); ++ if (lua_istable (L, argi)) ++ lua_pushvalue (L, argi); + else + lua_newtable (L); + return 1; +@@ -1707,9 +1729,20 @@ conf_get_section_as_object (lua_State *L) + static int + conf_get_section_as_array (lua_State *L) + { +- const char *section = luaL_checkstring (L, 1); +- g_autoptr (WpConf) conf = wp_core_get_conf (get_wp_core (L)); ++ const char *section = NULL; ++ g_autoptr (WpConf) conf = NULL; + g_autoptr (WpSpaJson) s = NULL; ++ int argi = 1; ++ ++ /* check if called as method on object */ ++ if (lua_isuserdata (L, argi)) { ++ conf = g_object_ref (wplua_checkobject (L, argi, WP_TYPE_CONF)); ++ argi++; ++ } else ++ conf = wp_core_get_conf (get_wp_core (L)); ++ ++ section = luaL_checkstring (L, argi); ++ argi++; + + if (conf) { + s = wp_conf_get_section (conf, section); +@@ -1719,8 +1752,8 @@ conf_get_section_as_array (lua_State *L) + } + } + +- if (lua_istable (L, 2)) +- lua_pushvalue (L, 2); ++ if (lua_istable (L, argi)) ++ lua_pushvalue (L, argi); + else + lua_newtable (L); + return 1; +@@ -1729,15 +1762,25 @@ conf_get_section_as_array (lua_State *L) + static int + conf_get_section_as_json (lua_State *L) + { +- const char *section = luaL_checkstring (L, 1); ++ const char *section = NULL; + g_autoptr (WpConf) conf = NULL; + g_autoptr (WpSpaJson) s = NULL; + WpSpaJson *fb = NULL; ++ int argi = 1; ++ ++ /* check if called as method on object */ ++ if (lua_isuserdata (L, argi)) { ++ conf = g_object_ref (wplua_checkobject (L, argi, WP_TYPE_CONF)); ++ argi++; ++ } else ++ conf = wp_core_get_conf (get_wp_core (L)); ++ ++ section = luaL_checkstring (L, argi); ++ argi++; + +- if (lua_isuserdata (L, 2)) +- fb = wplua_checkboxed (L, 2, WP_TYPE_SPA_JSON); ++ if (lua_isuserdata (L, argi)) ++ fb = wplua_checkboxed (L, argi, WP_TYPE_SPA_JSON); + +- conf = wp_core_get_conf (get_wp_core (L)); + if (conf) { + s = wp_conf_get_section (conf, section); + if (!s && fb) +-- +2.44.0 + diff --git a/0008-node-software-dsp-implement-loading-filter-graphs-fr.patch b/0008-node-software-dsp-implement-loading-filter-graphs-fr.patch new file mode 100644 index 0000000..f5923bc --- /dev/null +++ b/0008-node-software-dsp-implement-loading-filter-graphs-fr.patch @@ -0,0 +1,43 @@ +From d89293b606f282c38cfee362b910b8eaf2d19275 Mon Sep 17 00:00:00 2001 +From: James Calligeros +Date: Sat, 6 Apr 2024 16:12:57 +1000 +Subject: [PATCH 08/10] node/software-dsp: implement loading filter graphs from + disk + +Using the new Conf() constructor, we can load and parse a filter graph +from a file on disk. This is useful when, for example, maintaining a +large database of filter graphs. It also keeps wireplumber.conf.d free +from clutter. + +Signed-off-by: James Calligeros +--- + src/scripts/node/software-dsp.lua | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/src/scripts/node/software-dsp.lua b/src/scripts/node/software-dsp.lua +index 1887408c..da410bd7 100644 +--- a/src/scripts/node/software-dsp.lua ++++ b/src/scripts/node/software-dsp.lua +@@ -36,6 +36,19 @@ SimpleEventHook { + if props["filter-graph"] then + log:debug("Loading filter graph for " .. node.properties["node.name"]) + filter_nodes[node.properties["object.id"]] = LocalModule("libpipewire-module-filter-chain", props["filter-graph"], {}) ++ elseif props["filter-path"] then ++ log:debug("Loading filter graph for " .. node.properties["node.name"] .. " from disk") ++ local conf = Conf(props["filter-path"], { ++ ["as-section"] = "node.software-dsp.graph", ++ ["no-fragments"] = true ++ }) ++ local err = conf:open() ++ if not err then ++ local args = conf:get_section_as_json("node.software-dsp.graph"):to_string() ++ filter_nodes[node.properties["object.id"]] = LocalModule("libpipewire-module-filter-chain", args, {}) ++ else ++ log:warning("Unable to load filter graph for " .. node.properties["node.name"]) ++ end + end + + if cutils.parseBool (props["hide-parent"]) then +-- +2.44.0 + diff --git a/0009-docs-document-filter-path-property-of-software-DSP-p.patch b/0009-docs-document-filter-path-property-of-software-DSP-p.patch new file mode 100644 index 0000000..3e1470c --- /dev/null +++ b/0009-docs-document-filter-path-property-of-software-DSP-p.patch @@ -0,0 +1,44 @@ +From 4c57647203cc0b65993a964b73a1acb6d554e36b Mon Sep 17 00:00:00 2001 +From: James Calligeros +Date: Sat, 6 Apr 2024 16:25:11 +1000 +Subject: [PATCH 09/10] docs: document filter-path property of software DSP + policy + +Signed-off-by: James Calligeros +--- + docs/rst/policies/software_dsp.rst | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/docs/rst/policies/software_dsp.rst b/docs/rst/policies/software_dsp.rst +index a49566a1..61567cfd 100644 +--- a/docs/rst/policies/software_dsp.rst ++++ b/docs/rst/policies/software_dsp.rst +@@ -53,6 +53,17 @@ Configurable properties + The ``target.object`` property of the virtual node should be configured + statically to point to the node matched by the rule. + ++.. describe:: filter-path ++ ++ Absolute path to a file on disk storing a SPA-JSON object as plain text. This will be ++ parsed by WirePlumber into a WpConf object with a single section called ++ ``node.software-dsp.graph``, then passed as-is into ``libpipewire-module-filter-chain``. ++ ++ .. note:: ++ ++ ``filter-graph`` and ``filter-path`` are mutually exclusive, with the former taking ++ precedence if both are present in the matched rule. ++ + .. describe:: hide-parent + + Boolean indicating whether or not the matched node should be hidden from +@@ -77,6 +88,7 @@ Examples + actions = { + create-filter = { + filter-graph = {} # Virtual node goes here ++ filter-path = "/path/to/spa.json" + hide-parent = true + } + } +-- +2.44.0 + diff --git a/0010-Revert-node-software-dsp-do-not-hide-target-node-whe.patch b/0010-Revert-node-software-dsp-do-not-hide-target-node-whe.patch new file mode 100644 index 0000000..5c76127 --- /dev/null +++ b/0010-Revert-node-software-dsp-do-not-hide-target-node-whe.patch @@ -0,0 +1,40 @@ +From 1844fd6d615cc12a84f9709dfc4c4f7541fa6502 Mon Sep 17 00:00:00 2001 +From: James Calligeros +Date: Sat, 6 Apr 2024 16:26:32 +1000 +Subject: [PATCH 10/10] Revert "node/software-dsp: do not hide target node when + hide-parent is false" + +Using parseBool is actually more broken if the property is already parsed as a +boolean, and causes the node to remain unhidden even when hide-parent = true. + +Revert 2a4584216917 to fix this behaviour. + +Signed-off-by: James Calligeros +--- + src/scripts/node/software-dsp.lua | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/scripts/node/software-dsp.lua b/src/scripts/node/software-dsp.lua +index da410bd7..0474ee5e 100644 +--- a/src/scripts/node/software-dsp.lua ++++ b/src/scripts/node/software-dsp.lua +@@ -6,7 +6,6 @@ + -- SPDX-License-Identifier: MIT + + log = Log.open_topic("s-node") +-cutils = require ("common-utils") + + config = {} + config.rules = Conf.get_section_as_json("node.software-dsp.rules", Json.Array{}) +@@ -51,7 +50,7 @@ SimpleEventHook { + end + end + +- if cutils.parseBool (props["hide-parent"]) then ++ if props["hide-parent"] then + log:debug("Setting permissions to '-' on " .. node.properties["node.name"] .. " for open clients") + for client in clients_om:iterate{ type = "client" } do + if not client["properties"]["wireplumber.daemon"] then +-- +2.44.0 + diff --git a/wireplumber.spec b/wireplumber.spec index 82dc856..eb99aa9 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.5.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -8,6 +8,16 @@ URL: https://pipewire.pages.freedesktop.org/wireplumber/ Source0: https://gitlab.freedesktop.org/pipewire/%{name}/-/archive/%{version}/%{name}-%{version}.tar.bz2 ## upstream patches +Patch0001: 0001-wplua-sandbox-support-mixing-static-methods-and-cons.patch +Patch0002: 0002-conf-explain-behaviour-of-wp_base_dirs_find_file.patch +Patch0003: 0003-conf-Add-WpProperties-as-a-member-of-WpConf.patch +Patch0004: 0004-conf-allow-a-WpConf-to-be-loaded-without-fragments.patch +Patch0005: 0005-conf-allow-a-SPA-JSON-container-to-be-loaded-as-a-na.patch +Patch0006: 0006-lua-add-constructor-and-file-ops-for-WpConf.patch +Patch0007: 0007-lua-allow-Conf-methods-to-be-indexed-or-called.patch +Patch0008: 0008-node-software-dsp-implement-loading-filter-graphs-fr.patch +Patch0009: 0009-docs-document-filter-path-property-of-software-DSP-p.patch +Patch0010: 0010-Revert-node-software-dsp-do-not-hide-target-node-whe.patch ## upstreamable patches @@ -132,6 +142,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Thu Apr 18 2024 Neal Gompa - 0.5.1-2 +- Backport support for loading external WpConf from disk + * Tue Apr 02 2024 Wim Taymans - 0.5.1-1 - wireplumber 0.5.1 From a6053577dfc8c1a033a7401353fe06cdea836657 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 22 Apr 2024 17:56:17 +0200 Subject: [PATCH 22/39] wireplumber 0.5.2 --- ...pport-mixing-static-methods-and-cons.patch | 45 ------ ...-behaviour-of-wp_base_dirs_find_file.patch | 38 ----- ...d-WpProperties-as-a-member-of-WpConf.patch | 94 ----------- ...pConf-to-be-loaded-without-fragments.patch | 91 ----------- ...-JSON-container-to-be-loaded-as-a-na.patch | 75 --------- ...-constructor-and-file-ops-for-WpConf.patch | 102 ------------ ...Conf-methods-to-be-indexed-or-called.patch | 151 ------------------ ...p-implement-loading-filter-graphs-fr.patch | 43 ----- ...lter-path-property-of-software-DSP-p.patch | 44 ----- ...ware-dsp-do-not-hide-target-node-whe.patch | 40 ----- sources | 2 +- wireplumber.spec | 17 +- 12 files changed, 6 insertions(+), 736 deletions(-) delete mode 100644 0001-wplua-sandbox-support-mixing-static-methods-and-cons.patch delete mode 100644 0002-conf-explain-behaviour-of-wp_base_dirs_find_file.patch delete mode 100644 0003-conf-Add-WpProperties-as-a-member-of-WpConf.patch delete mode 100644 0004-conf-allow-a-WpConf-to-be-loaded-without-fragments.patch delete mode 100644 0005-conf-allow-a-SPA-JSON-container-to-be-loaded-as-a-na.patch delete mode 100644 0006-lua-add-constructor-and-file-ops-for-WpConf.patch delete mode 100644 0007-lua-allow-Conf-methods-to-be-indexed-or-called.patch delete mode 100644 0008-node-software-dsp-implement-loading-filter-graphs-fr.patch delete mode 100644 0009-docs-document-filter-path-property-of-software-DSP-p.patch delete mode 100644 0010-Revert-node-software-dsp-do-not-hide-target-node-whe.patch diff --git a/0001-wplua-sandbox-support-mixing-static-methods-and-cons.patch b/0001-wplua-sandbox-support-mixing-static-methods-and-cons.patch deleted file mode 100644 index 0f4c227..0000000 --- a/0001-wplua-sandbox-support-mixing-static-methods-and-cons.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 8892204f24878c3c5084fd106b6e7397712a4ee6 Mon Sep 17 00:00:00 2001 -From: George Kiagiadakis -Date: Fri, 5 Apr 2024 21:16:11 +0300 -Subject: [PATCH 01/10] wplua/sandbox: support mixing static methods and - constructors in class identifiers - -Global class identifiers, such as "Node", "SessionItem", "Conf", etc -are so far defined either as methods, which are constructors for -the GObject class, or as tables, which contain "static" methods, i.e. -methods that can be called without an instance. - -In some cases, we may want to mix a class being both instantiatable -with a constructor and also have static methods. To support this, -allow the class identifier be declared as a table with the constructor -being defined as the "__new" method. This change allows calling the -table as a method and execute "__new" underneath. - -For instance: -``` -json = Conf.get_section_as_json("foobar") -- static method -conf = Conf("/foo/bar") -- constructor, equivalent to Conf.__new("/foo/bar") -``` - -See also !629 ---- - modules/module-lua-scripting/wplua/sandbox.lua | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/modules/module-lua-scripting/wplua/sandbox.lua b/modules/module-lua-scripting/wplua/sandbox.lua -index 9ffe8d40..9c2c17dd 100644 ---- a/modules/module-lua-scripting/wplua/sandbox.lua -+++ b/modules/module-lua-scripting/wplua/sandbox.lua -@@ -43,6 +43,9 @@ function create_sandbox_env() - if type(v) == "table" then - SANDBOX_ENV[k] = setmetatable({}, { - __index = v, -+ __call = function(t, ...) -+ return t["__new"](...) -+ end, - __newindex = function(_, attr_name, _) - error('Can not modify ' .. k .. '.' .. attr_name .. '. Protected by the sandbox.') - end --- -2.44.0 - diff --git a/0002-conf-explain-behaviour-of-wp_base_dirs_find_file.patch b/0002-conf-explain-behaviour-of-wp_base_dirs_find_file.patch deleted file mode 100644 index 9c7b3eb..0000000 --- a/0002-conf-explain-behaviour-of-wp_base_dirs_find_file.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 105d53025e1d877ed046a062f823c35ea934af2a Mon Sep 17 00:00:00 2001 -From: James Calligeros -Date: Sat, 30 Mar 2024 14:18:49 +1000 -Subject: [PATCH 02/10] conf: explain behaviour of wp_base_dirs_find_file - -The signature of the function is quite misleading. If an absolute -path is passed to it, it will ignore the directory constraint flags -and search outside of the specified directories anyway. Make a note -of this in its caller. - -Signed-off-by: James Calligeros ---- - lib/wp/conf.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/lib/wp/conf.c b/lib/wp/conf.c -index 4638f57e..f10a04cc 100644 ---- a/lib/wp/conf.c -+++ b/lib/wp/conf.c -@@ -269,10 +269,13 @@ wp_conf_open (WpConf * self, GError ** error) - g_autoptr (WpIterator) iterator = NULL; - g_auto (GValue) value = G_VALUE_INIT; - -- /* open the main file */ -+ /* -+ * open the config file - if the path supplied is absolute, -+ * wp_base_dirs_find_file will ignore WP_BASE_DIRS_CONFIGURATION -+ */ - path = wp_base_dirs_find_file (WP_BASE_DIRS_CONFIGURATION, NULL, self->name); - if (path) { -- wp_info_object (self, "opening main file: %s", path); -+ wp_info_object (self, "opening config file: %s", path); - if (!open_and_load_sections (self, path, error)) - return FALSE; - } --- -2.44.0 - diff --git a/0003-conf-Add-WpProperties-as-a-member-of-WpConf.patch b/0003-conf-Add-WpProperties-as-a-member-of-WpConf.patch deleted file mode 100644 index 3c4cda6..0000000 --- a/0003-conf-Add-WpProperties-as-a-member-of-WpConf.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 42666e20548216f11721567d0df0ed396bbb8495 Mon Sep 17 00:00:00 2001 -From: James Calligeros -Date: Sat, 30 Mar 2024 16:05:05 +1000 -Subject: [PATCH 03/10] conf: Add WpProperties as a member of WpConf - -WpProperties may be used to control the behaviour of a WpConf -object. This allows those properties to be referenced at any time -during the lifetime of a WpConf. - -Signed-off-by: James Calligeros ---- - lib/wp/conf.c | 23 +++++++++++++++++++---- - 1 file changed, 19 insertions(+), 4 deletions(-) - -diff --git a/lib/wp/conf.c b/lib/wp/conf.c -index f10a04cc..ed96200b 100644 ---- a/lib/wp/conf.c -+++ b/lib/wp/conf.c -@@ -50,6 +50,7 @@ struct _WpConf - - /* Props */ - gchar *name; -+ WpProperties *properties; - - /* Private */ - GArray *conf_sections; /* element-type: WpConfSection */ -@@ -59,6 +60,7 @@ struct _WpConf - enum { - PROP_0, - PROP_NAME, -+ PROP_PROPERTIES, - }; - - G_DEFINE_TYPE (WpConf, wp_conf, G_TYPE_OBJECT) -@@ -81,6 +83,9 @@ wp_conf_set_property (GObject * object, guint property_id, - case PROP_NAME: - self->name = g_value_dup_string (value); - break; -+ case PROP_PROPERTIES: -+ self->properties = g_value_dup_boxed (value); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - break; -@@ -97,6 +102,9 @@ wp_conf_get_property (GObject * object, guint property_id, - case PROP_NAME: - g_value_set_string (value, self->name); - break; -+ case PROP_PROPERTIES: -+ g_value_take_boxed (value, wp_properties_copy (self->properties)); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - break; -@@ -109,6 +117,7 @@ wp_conf_finalize (GObject * object) - WpConf *self = WP_CONF (object); - - wp_conf_close (self); -+ g_clear_pointer (&self->properties, wp_properties_unref); - g_clear_pointer (&self->conf_sections, g_array_unref); - g_clear_pointer (&self->files, g_ptr_array_unref); - g_clear_pointer (&self->name, g_free); -@@ -125,9 +134,13 @@ wp_conf_class_init (WpConfClass * klass) - object_class->set_property = wp_conf_set_property; - object_class->get_property = wp_conf_get_property; - -- g_object_class_install_property (object_class, PROP_NAME, -- g_param_spec_string ("name", "name", "The name of the configuration file", -+ g_object_class_install_property(object_class, PROP_NAME, -+ g_param_spec_string ("name", "name", "The name of the configuration file", - NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); -+ -+ g_object_class_install_property(object_class, PROP_PROPERTIES, -+ g_param_spec_boxed ("properties", "properties", "WpProperties", -+ WP_TYPE_PROPERTIES, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); - } - - /*! -@@ -145,8 +158,10 @@ WpConf * - wp_conf_new (const gchar * name, WpProperties * properties) - { - g_return_val_if_fail (name, NULL); -- g_clear_pointer (&properties, wp_properties_unref); -- return g_object_new (WP_TYPE_CONF, "name", name, NULL); -+ g_autoptr (WpProperties) props = properties; -+ return g_object_new (WP_TYPE_CONF, "name", name, -+ "properties", props, -+ NULL); - } - - /*! --- -2.44.0 - diff --git a/0004-conf-allow-a-WpConf-to-be-loaded-without-fragments.patch b/0004-conf-allow-a-WpConf-to-be-loaded-without-fragments.patch deleted file mode 100644 index 03cd8f5..0000000 --- a/0004-conf-allow-a-WpConf-to-be-loaded-without-fragments.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 34040d8e4466871039f6426e38bf16cfb7c1d39a Mon Sep 17 00:00:00 2001 -From: James Calligeros -Date: Sat, 30 Mar 2024 16:25:50 +1000 -Subject: [PATCH 04/10] conf: allow a WpConf to be loaded without fragments - -Use WpProperties to indicate that searching for and loading -conf.d fragments can/should be skipped. - -Signed-off-by: James Calligeros ---- - lib/wp/conf.c | 34 ++++++++++++++++++++++------------ - 1 file changed, 22 insertions(+), 12 deletions(-) - -diff --git a/lib/wp/conf.c b/lib/wp/conf.c -index ed96200b..d0105aaf 100644 ---- a/lib/wp/conf.c -+++ b/lib/wp/conf.c -@@ -151,7 +151,8 @@ wp_conf_class_init (WpConfClass * klass) - * - * \ingroup wpconf - * \param name the name of the configuration file -- * \param properties (transfer full) (nullable): unused, reserved for future use -+ * \param properties (transfer full) (nullable): a WpProperties with keys -+ * specifying how to load the WpConf object - * \returns (transfer full): a new WpConf object - */ - WpConf * -@@ -170,7 +171,8 @@ wp_conf_new (const gchar * name, WpProperties * properties) - * - * \ingroup wpconf - * \param name the name of the configuration file -- * \param properties (transfer full) (nullable): unused, reserved for future use -+ * \param properties (transfer full) (nullable): a WpProperties with keys -+ * specifying how to load the WpConf object - * \param error (out) (nullable): return location for a GError, or NULL - * \returns (transfer full) (nullable): a new WpConf object, or NULL - * if an error occurred -@@ -278,12 +280,18 @@ open_and_load_sections (WpConf * self, const gchar *path, GError ** error) - gboolean - wp_conf_open (WpConf * self, GError ** error) - { -+ const gchar *no_frags = NULL; -+ - g_return_val_if_fail (WP_IS_CONF (self), FALSE); - - g_autofree gchar *path = NULL; - g_autoptr (WpIterator) iterator = NULL; - g_auto (GValue) value = G_VALUE_INIT; - -+ if (self->properties) { -+ no_frags = wp_properties_get (self->properties, "no-fragments"); -+ } -+ - /* - * open the config file - if the path supplied is absolute, - * wp_base_dirs_find_file will ignore WP_BASE_DIRS_CONFIGURATION -@@ -297,19 +305,21 @@ wp_conf_open (WpConf * self, GError ** error) - g_clear_pointer (&path, g_free); - - /* open the .conf.d/ fragments */ -- path = g_strdup_printf ("%s.d", self->name); -- iterator = wp_base_dirs_new_files_iterator (WP_BASE_DIRS_CONFIGURATION, path, -- ".conf"); -+ if (!no_frags) { -+ path = g_strdup_printf ("%s.d", self->name); -+ iterator = wp_base_dirs_new_files_iterator (WP_BASE_DIRS_CONFIGURATION, path, -+ ".conf"); - -- for (; wp_iterator_next (iterator, &value); g_value_unset (&value)) { -- const gchar *filename = g_value_get_string (&value); -+ for (; wp_iterator_next (iterator, &value); g_value_unset (&value)) { -+ const gchar *filename = g_value_get_string (&value); - -- wp_info_object (self, "opening fragment file: %s", filename); -+ wp_info_object (self, "opening fragment file: %s", filename); - -- g_autoptr (GError) e = NULL; -- if (!open_and_load_sections (self, filename, &e)) { -- wp_warning_object (self, "failed to open '%s': %s", filename, e->message); -- continue; -+ g_autoptr (GError) e = NULL; -+ if (!open_and_load_sections (self, filename, &e)) { -+ wp_warning_object (self, "failed to open '%s': %s", filename, e->message); -+ continue; -+ } - } - } - --- -2.44.0 - diff --git a/0005-conf-allow-a-SPA-JSON-container-to-be-loaded-as-a-na.patch b/0005-conf-allow-a-SPA-JSON-container-to-be-loaded-as-a-na.patch deleted file mode 100644 index 2c51abe..0000000 --- a/0005-conf-allow-a-SPA-JSON-container-to-be-loaded-as-a-na.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 59d29f37ac00c6ae79248831a915e00f037c4364 Mon Sep 17 00:00:00 2001 -From: James Calligeros -Date: Sat, 30 Mar 2024 16:26:29 +1000 -Subject: [PATCH 05/10] conf: allow a SPA-JSON container to be loaded as a - named WpConf section - -A "plain" JSON object may be passed to WpConf constructors. Previously, this -would cause an error as open_and_load_sections expects the first parsed token -to be a string. Use WpProperties to denote that the file being parsed is an -object/container, and specify a section name for it. - -Signed-off-by: James Calligeros ---- - lib/wp/conf.c | 31 +++++++++++++++++++++---------- - 1 file changed, 21 insertions(+), 10 deletions(-) - -diff --git a/lib/wp/conf.c b/lib/wp/conf.c -index d0105aaf..aa81c811 100644 ---- a/lib/wp/conf.c -+++ b/lib/wp/conf.c -@@ -201,6 +201,13 @@ detect_old_conf_format (WpConf * self, GMappedFile *file) - static gboolean - open_and_load_sections (WpConf * self, const gchar *path, GError ** error) - { -+ const gchar *as_section = NULL; -+ -+ if (self->properties) { -+ as_section = wp_properties_get (self->properties, "as-section"); -+ wp_info_object (self, "Opening as section %s", as_section); -+ } -+ - g_autoptr (GMappedFile) file = g_mapped_file_new (path, FALSE, error); - if (!file) - return FALSE; -@@ -229,7 +236,7 @@ open_and_load_sections (WpConf * self, const gchar *path, GError ** error) - if (!tmp) - break; - -- if (wp_spa_json_is_container (tmp) || -+ if ((wp_spa_json_is_container (tmp) && !as_section) || - wp_spa_json_is_int (tmp) || - wp_spa_json_is_float (tmp) || - wp_spa_json_is_boolean (tmp) || -@@ -241,15 +248,19 @@ open_and_load_sections (WpConf * self, const gchar *path, GError ** error) - return FALSE; - } - -- section.name = wp_spa_json_parse_string (tmp); -- g_clear_pointer (&tmp, wp_spa_json_unref); -- -- /* parse the section contents */ -- tmp = wp_spa_json_parser_get_json (parser); -- if (!tmp) { -- g_set_error (error, WP_DOMAIN_LIBRARY, WP_LIBRARY_ERROR_INVALID_ARGUMENT, -- "section '%s' has no value", section.name); -- return FALSE; -+ if (as_section) { -+ wp_info_object (self, "Parsing object file as section %s", as_section); -+ section.name = g_strdup (as_section); -+ } else { -+ section.name = wp_spa_json_parse_string (tmp); -+ g_clear_pointer (&tmp, wp_spa_json_unref); -+ /* parse the section contents */ -+ tmp = wp_spa_json_parser_get_json (parser); -+ if (!tmp) { -+ g_set_error (error, WP_DOMAIN_LIBRARY, WP_LIBRARY_ERROR_INVALID_ARGUMENT, -+ "section '%s' has no value", section.name); -+ return FALSE; -+ } - } - - section.value = g_steal_pointer (&tmp); --- -2.44.0 - diff --git a/0006-lua-add-constructor-and-file-ops-for-WpConf.patch b/0006-lua-add-constructor-and-file-ops-for-WpConf.patch deleted file mode 100644 index b7341b2..0000000 --- a/0006-lua-add-constructor-and-file-ops-for-WpConf.patch +++ /dev/null @@ -1,102 +0,0 @@ -From f769ea8f30c6ea4639c47c4a6dec3f21884ad400 Mon Sep 17 00:00:00 2001 -From: James Calligeros -Date: Wed, 3 Apr 2024 22:19:09 +1000 -Subject: [PATCH 06/10] lua: add constructor and file ops for WpConf - -This exposes the ability to load a SPA-JSON representation of a WpConf -object from an arbitrary file on disk to the Lua API - -Signed-off-by: James Calligeros ---- - modules/module-lua-scripting/api/api.c | 46 ++++++++++++++++++++++++ - modules/module-lua-scripting/api/api.lua | 3 ++ - 2 files changed, 49 insertions(+) - -diff --git a/modules/module-lua-scripting/api/api.c b/modules/module-lua-scripting/api/api.c -index 46df75b5..4eb889b9 100644 ---- a/modules/module-lua-scripting/api/api.c -+++ b/modules/module-lua-scripting/api/api.c -@@ -1618,6 +1618,48 @@ impl_module_new (lua_State *L) - - /* WpConf */ - -+ -+static int -+conf_new (lua_State *L) -+{ -+ const char *path = luaL_checkstring (L, 1); -+ WpProperties *p = NULL; -+ WpConf *conf = NULL; -+ -+ if (lua_istable (L, 2)) { -+ p = wplua_table_to_properties (L, 2); -+ } -+ -+ conf = wp_conf_new (path, p); -+ if (conf) { -+ wplua_pushobject (L, conf); -+ } else -+ lua_pushnil (L); -+ return 1; -+} -+ -+static int -+conf_open (lua_State *L) -+{ -+ WpConf *conf = wplua_checkobject (L, 1, WP_TYPE_CONF); -+ g_autoptr (GError) err = NULL; -+ -+ if (wp_conf_open (conf, &err)) { -+ lua_pushnil (L); -+ } else -+ lua_pushstring (L, err->message); -+ return 1; -+} -+ -+static int -+conf_close (lua_State *L) -+{ -+ WpConf *conf = wplua_checkobject (L, 1, WP_TYPE_CONF); -+ -+ wp_conf_close (conf); -+ return 0; -+} -+ - static int - conf_get_section_as_properties (lua_State *L) - { -@@ -1712,6 +1754,8 @@ conf_get_section_as_json (lua_State *L) - } - - static const luaL_Reg conf_methods[] = { -+ { "open", conf_open }, -+ { "close", conf_close }, - { "get_section_as_properties", conf_get_section_as_properties }, - { "get_section_as_object", conf_get_section_as_object }, - { "get_section_as_array", conf_get_section_as_array }, -@@ -2764,6 +2808,8 @@ wp_lua_scripting_api_init (lua_State *L) - async_event_hook_new, NULL); - wplua_register_type_methods (L, WP_TYPE_TRANSITION, - NULL, transition_methods); -+ wplua_register_type_methods (L, WP_TYPE_CONF, -+ conf_new, conf_methods); - - if (!wplua_load_uri (L, URI_API, &error) || - !wplua_pcall (L, 0, 0, &error)) { -diff --git a/modules/module-lua-scripting/api/api.lua b/modules/module-lua-scripting/api/api.lua -index a000d96c..b53686c2 100644 ---- a/modules/module-lua-scripting/api/api.lua -+++ b/modules/module-lua-scripting/api/api.lua -@@ -184,6 +184,9 @@ local Feature = { - }, - } - -+-- Allow calling Conf() to instantiate a new WpConf -+WpConf["__new"] = WpConf_new -+ - SANDBOX_EXPORT = { - Debug = Debug, - Id = Id, --- -2.44.0 - diff --git a/0007-lua-allow-Conf-methods-to-be-indexed-or-called.patch b/0007-lua-allow-Conf-methods-to-be-indexed-or-called.patch deleted file mode 100644 index a208572..0000000 --- a/0007-lua-allow-Conf-methods-to-be-indexed-or-called.patch +++ /dev/null @@ -1,151 +0,0 @@ -From d77edf70e958c31931b8357280cb764db4b273bf Mon Sep 17 00:00:00 2001 -From: James Calligeros -Date: Sat, 6 Apr 2024 15:44:53 +1000 -Subject: [PATCH 07/10] lua: allow Conf methods to be indexed or called - -Given that we are allowing Conf() to instantiate a new WpConf, -the methods on the class need to be callable in reference to Self while -maintaining API compatibility with being indexable from the table as a -static method. - -Allow this by checking if the first argument passed in is userdata. - -Signed-off-by: James Calligeros ---- - modules/module-lua-scripting/api/api.c | 75 ++++++++++++++++++++------ - 1 file changed, 59 insertions(+), 16 deletions(-) - -diff --git a/modules/module-lua-scripting/api/api.c b/modules/module-lua-scripting/api/api.c -index 4eb889b9..b991e930 100644 ---- a/modules/module-lua-scripting/api/api.c -+++ b/modules/module-lua-scripting/api/api.c -@@ -1663,13 +1663,24 @@ conf_close (lua_State *L) - static int - conf_get_section_as_properties (lua_State *L) - { -- const char *section = luaL_checkstring (L, 1); -- g_autoptr (WpConf) conf = wp_core_get_conf (get_wp_core (L)); -+ const char *section = NULL; -+ g_autoptr (WpConf) conf = NULL; - g_autoptr (WpSpaJson) s = NULL; - g_autoptr (WpProperties) props = NULL; -+ int argi = 1; -+ -+ /* check if called as method on object */ -+ if (lua_isuserdata (L, argi)) { -+ conf = g_object_ref (wplua_checkobject (L, argi, WP_TYPE_CONF)); -+ argi++; -+ } else -+ conf = wp_core_get_conf (get_wp_core (L)); -+ -+ section = luaL_checkstring (L, argi); -+ argi++; - -- if (lua_istable (L, 2)) -- props = wplua_table_to_properties (L, 2); -+ if (lua_istable (L, argi)) -+ props = wplua_table_to_properties (L, argi); - else - props = wp_properties_new_empty (); - -@@ -1685,9 +1696,20 @@ conf_get_section_as_properties (lua_State *L) - static int - conf_get_section_as_object (lua_State *L) - { -- const char *section = luaL_checkstring (L, 1); -- g_autoptr (WpConf) conf = wp_core_get_conf (get_wp_core (L)); -+ const char *section = NULL; -+ g_autoptr (WpConf) conf = NULL; - g_autoptr (WpSpaJson) s = NULL; -+ int argi = 1; -+ -+ /* check if called as method on object */ -+ if (lua_isuserdata (L, argi)) { -+ conf = g_object_ref (wplua_checkobject (L, argi, WP_TYPE_CONF)); -+ argi++; -+ } else -+ conf = wp_core_get_conf (get_wp_core (L)); -+ -+ section = luaL_checkstring (L, argi); -+ argi++; - - if (conf) { - s = wp_conf_get_section (conf, section); -@@ -1697,8 +1719,8 @@ conf_get_section_as_object (lua_State *L) - } - } - -- if (lua_istable (L, 2)) -- lua_pushvalue (L, 2); -+ if (lua_istable (L, argi)) -+ lua_pushvalue (L, argi); - else - lua_newtable (L); - return 1; -@@ -1707,9 +1729,20 @@ conf_get_section_as_object (lua_State *L) - static int - conf_get_section_as_array (lua_State *L) - { -- const char *section = luaL_checkstring (L, 1); -- g_autoptr (WpConf) conf = wp_core_get_conf (get_wp_core (L)); -+ const char *section = NULL; -+ g_autoptr (WpConf) conf = NULL; - g_autoptr (WpSpaJson) s = NULL; -+ int argi = 1; -+ -+ /* check if called as method on object */ -+ if (lua_isuserdata (L, argi)) { -+ conf = g_object_ref (wplua_checkobject (L, argi, WP_TYPE_CONF)); -+ argi++; -+ } else -+ conf = wp_core_get_conf (get_wp_core (L)); -+ -+ section = luaL_checkstring (L, argi); -+ argi++; - - if (conf) { - s = wp_conf_get_section (conf, section); -@@ -1719,8 +1752,8 @@ conf_get_section_as_array (lua_State *L) - } - } - -- if (lua_istable (L, 2)) -- lua_pushvalue (L, 2); -+ if (lua_istable (L, argi)) -+ lua_pushvalue (L, argi); - else - lua_newtable (L); - return 1; -@@ -1729,15 +1762,25 @@ conf_get_section_as_array (lua_State *L) - static int - conf_get_section_as_json (lua_State *L) - { -- const char *section = luaL_checkstring (L, 1); -+ const char *section = NULL; - g_autoptr (WpConf) conf = NULL; - g_autoptr (WpSpaJson) s = NULL; - WpSpaJson *fb = NULL; -+ int argi = 1; -+ -+ /* check if called as method on object */ -+ if (lua_isuserdata (L, argi)) { -+ conf = g_object_ref (wplua_checkobject (L, argi, WP_TYPE_CONF)); -+ argi++; -+ } else -+ conf = wp_core_get_conf (get_wp_core (L)); -+ -+ section = luaL_checkstring (L, argi); -+ argi++; - -- if (lua_isuserdata (L, 2)) -- fb = wplua_checkboxed (L, 2, WP_TYPE_SPA_JSON); -+ if (lua_isuserdata (L, argi)) -+ fb = wplua_checkboxed (L, argi, WP_TYPE_SPA_JSON); - -- conf = wp_core_get_conf (get_wp_core (L)); - if (conf) { - s = wp_conf_get_section (conf, section); - if (!s && fb) --- -2.44.0 - diff --git a/0008-node-software-dsp-implement-loading-filter-graphs-fr.patch b/0008-node-software-dsp-implement-loading-filter-graphs-fr.patch deleted file mode 100644 index f5923bc..0000000 --- a/0008-node-software-dsp-implement-loading-filter-graphs-fr.patch +++ /dev/null @@ -1,43 +0,0 @@ -From d89293b606f282c38cfee362b910b8eaf2d19275 Mon Sep 17 00:00:00 2001 -From: James Calligeros -Date: Sat, 6 Apr 2024 16:12:57 +1000 -Subject: [PATCH 08/10] node/software-dsp: implement loading filter graphs from - disk - -Using the new Conf() constructor, we can load and parse a filter graph -from a file on disk. This is useful when, for example, maintaining a -large database of filter graphs. It also keeps wireplumber.conf.d free -from clutter. - -Signed-off-by: James Calligeros ---- - src/scripts/node/software-dsp.lua | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -diff --git a/src/scripts/node/software-dsp.lua b/src/scripts/node/software-dsp.lua -index 1887408c..da410bd7 100644 ---- a/src/scripts/node/software-dsp.lua -+++ b/src/scripts/node/software-dsp.lua -@@ -36,6 +36,19 @@ SimpleEventHook { - if props["filter-graph"] then - log:debug("Loading filter graph for " .. node.properties["node.name"]) - filter_nodes[node.properties["object.id"]] = LocalModule("libpipewire-module-filter-chain", props["filter-graph"], {}) -+ elseif props["filter-path"] then -+ log:debug("Loading filter graph for " .. node.properties["node.name"] .. " from disk") -+ local conf = Conf(props["filter-path"], { -+ ["as-section"] = "node.software-dsp.graph", -+ ["no-fragments"] = true -+ }) -+ local err = conf:open() -+ if not err then -+ local args = conf:get_section_as_json("node.software-dsp.graph"):to_string() -+ filter_nodes[node.properties["object.id"]] = LocalModule("libpipewire-module-filter-chain", args, {}) -+ else -+ log:warning("Unable to load filter graph for " .. node.properties["node.name"]) -+ end - end - - if cutils.parseBool (props["hide-parent"]) then --- -2.44.0 - diff --git a/0009-docs-document-filter-path-property-of-software-DSP-p.patch b/0009-docs-document-filter-path-property-of-software-DSP-p.patch deleted file mode 100644 index 3e1470c..0000000 --- a/0009-docs-document-filter-path-property-of-software-DSP-p.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 4c57647203cc0b65993a964b73a1acb6d554e36b Mon Sep 17 00:00:00 2001 -From: James Calligeros -Date: Sat, 6 Apr 2024 16:25:11 +1000 -Subject: [PATCH 09/10] docs: document filter-path property of software DSP - policy - -Signed-off-by: James Calligeros ---- - docs/rst/policies/software_dsp.rst | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/docs/rst/policies/software_dsp.rst b/docs/rst/policies/software_dsp.rst -index a49566a1..61567cfd 100644 ---- a/docs/rst/policies/software_dsp.rst -+++ b/docs/rst/policies/software_dsp.rst -@@ -53,6 +53,17 @@ Configurable properties - The ``target.object`` property of the virtual node should be configured - statically to point to the node matched by the rule. - -+.. describe:: filter-path -+ -+ Absolute path to a file on disk storing a SPA-JSON object as plain text. This will be -+ parsed by WirePlumber into a WpConf object with a single section called -+ ``node.software-dsp.graph``, then passed as-is into ``libpipewire-module-filter-chain``. -+ -+ .. note:: -+ -+ ``filter-graph`` and ``filter-path`` are mutually exclusive, with the former taking -+ precedence if both are present in the matched rule. -+ - .. describe:: hide-parent - - Boolean indicating whether or not the matched node should be hidden from -@@ -77,6 +88,7 @@ Examples - actions = { - create-filter = { - filter-graph = {} # Virtual node goes here -+ filter-path = "/path/to/spa.json" - hide-parent = true - } - } --- -2.44.0 - diff --git a/0010-Revert-node-software-dsp-do-not-hide-target-node-whe.patch b/0010-Revert-node-software-dsp-do-not-hide-target-node-whe.patch deleted file mode 100644 index 5c76127..0000000 --- a/0010-Revert-node-software-dsp-do-not-hide-target-node-whe.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 1844fd6d615cc12a84f9709dfc4c4f7541fa6502 Mon Sep 17 00:00:00 2001 -From: James Calligeros -Date: Sat, 6 Apr 2024 16:26:32 +1000 -Subject: [PATCH 10/10] Revert "node/software-dsp: do not hide target node when - hide-parent is false" - -Using parseBool is actually more broken if the property is already parsed as a -boolean, and causes the node to remain unhidden even when hide-parent = true. - -Revert 2a4584216917 to fix this behaviour. - -Signed-off-by: James Calligeros ---- - src/scripts/node/software-dsp.lua | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/src/scripts/node/software-dsp.lua b/src/scripts/node/software-dsp.lua -index da410bd7..0474ee5e 100644 ---- a/src/scripts/node/software-dsp.lua -+++ b/src/scripts/node/software-dsp.lua -@@ -6,7 +6,6 @@ - -- SPDX-License-Identifier: MIT - - log = Log.open_topic("s-node") --cutils = require ("common-utils") - - config = {} - config.rules = Conf.get_section_as_json("node.software-dsp.rules", Json.Array{}) -@@ -51,7 +50,7 @@ SimpleEventHook { - end - end - -- if cutils.parseBool (props["hide-parent"]) then -+ if props["hide-parent"] then - log:debug("Setting permissions to '-' on " .. node.properties["node.name"] .. " for open clients") - for client in clients_om:iterate{ type = "client" } do - if not client["properties"]["wireplumber.daemon"] then --- -2.44.0 - diff --git a/sources b/sources index 1b326ee..c404477 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.1.tar.bz2) = 147f7ab9c1d253fa0284a2c17a5b1395b6f9c505e7e6ec3449f8281b8a5f4f4911fb70f552e6dc4cc8b5a5847a959aea42009da08e0475ba66ff0450658c4b2d +SHA512 (wireplumber-0.5.2.tar.bz2) = 4cd2949739b8af86f73e072fe8c1d8606fa9be77b6e109aa0825d516f11953c4811ae1162da07ae245f7039f4243d01c43b8e9c083d4e0be1066b180484abbfb diff --git a/wireplumber.spec b/wireplumber.spec index eb99aa9..ffd1d84 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber -Version: 0.5.1 -Release: 2%{?dist} +Version: 0.5.2 +Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -8,16 +8,6 @@ URL: https://pipewire.pages.freedesktop.org/wireplumber/ Source0: https://gitlab.freedesktop.org/pipewire/%{name}/-/archive/%{version}/%{name}-%{version}.tar.bz2 ## upstream patches -Patch0001: 0001-wplua-sandbox-support-mixing-static-methods-and-cons.patch -Patch0002: 0002-conf-explain-behaviour-of-wp_base_dirs_find_file.patch -Patch0003: 0003-conf-Add-WpProperties-as-a-member-of-WpConf.patch -Patch0004: 0004-conf-allow-a-WpConf-to-be-loaded-without-fragments.patch -Patch0005: 0005-conf-allow-a-SPA-JSON-container-to-be-loaded-as-a-na.patch -Patch0006: 0006-lua-add-constructor-and-file-ops-for-WpConf.patch -Patch0007: 0007-lua-allow-Conf-methods-to-be-indexed-or-called.patch -Patch0008: 0008-node-software-dsp-implement-loading-filter-graphs-fr.patch -Patch0009: 0009-docs-document-filter-path-property-of-software-DSP-p.patch -Patch0010: 0010-Revert-node-software-dsp-do-not-hide-target-node-whe.patch ## upstreamable patches @@ -142,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Mon Apr 22 2024 Wim Taymans - 0.5.2-1 +- wireplumber 0.5.2 + * Thu Apr 18 2024 Neal Gompa - 0.5.1-2 - Backport support for loading external WpConf from disk From 6647526561bd00b298e50b3f2407e3ca252ade49 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sat, 1 Jun 2024 18:36:40 +0200 Subject: [PATCH 23/39] wireplumber 0.5.3 --- sources | 2 +- wireplumber.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sources b/sources index c404477..666a6f2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.2.tar.bz2) = 4cd2949739b8af86f73e072fe8c1d8606fa9be77b6e109aa0825d516f11953c4811ae1162da07ae245f7039f4243d01c43b8e9c083d4e0be1066b180484abbfb +SHA512 (wireplumber-0.5.3.tar.bz2) = 1c62f7f919242b2a9586ff6a532f214b564bcf10c838eae4a64078edf6fd461fc65f364c8af79150e33b86594331446516a1a4c926bb245a4b2ba2d9f63f7243 diff --git a/wireplumber.spec b/wireplumber.spec index ffd1d84..8b34346 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,5 +1,5 @@ Name: wireplumber -Version: 0.5.2 +Version: 0.5.3 Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Sat Jun 01 2024 Wim Taymans - 0.5.3-1 +- wireplumber 0.5.3 + * Mon Apr 22 2024 Wim Taymans - 0.5.2-1 - wireplumber 0.5.2 From 02fbc193fc2e74cd38cd55315138d8e606fdfd18 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 26 Jun 2024 17:09:13 +0200 Subject: [PATCH 24/39] wireplumber 0.5.4 --- sources | 2 +- wireplumber.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sources b/sources index 666a6f2..5e7a77e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.3.tar.bz2) = 1c62f7f919242b2a9586ff6a532f214b564bcf10c838eae4a64078edf6fd461fc65f364c8af79150e33b86594331446516a1a4c926bb245a4b2ba2d9f63f7243 +SHA512 (wireplumber-0.5.4.tar.bz2) = 9a4b33cfd0abdab0b0be5bd5be8fc9f90e4d20ca981eb3ac9dad263f77c7ad99be0ca7b03e0be9ad93d969e907defcc2815f2928ad6b8181667f79709d4af955 diff --git a/wireplumber.spec b/wireplumber.spec index 8b34346..6177664 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,5 +1,5 @@ Name: wireplumber -Version: 0.5.3 +Version: 0.5.4 Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Wed Jun 26 2024 Wim Taymans - 0.5.4-1 +- wireplumber 0.5.4 + * Sat Jun 01 2024 Wim Taymans - 0.5.3-1 - wireplumber 0.5.3 From b3e3efff9419aa50aeed500357e67cb8d0bbf1d8 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 28 Jun 2024 17:41:52 +0200 Subject: [PATCH 25/39] wireplumber 0.5.5 --- sources | 2 +- wireplumber.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sources b/sources index 5e7a77e..7b844da 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.4.tar.bz2) = 9a4b33cfd0abdab0b0be5bd5be8fc9f90e4d20ca981eb3ac9dad263f77c7ad99be0ca7b03e0be9ad93d969e907defcc2815f2928ad6b8181667f79709d4af955 +SHA512 (wireplumber-0.5.5.tar.bz2) = 50ddc6f275bba89ddac0e55dd2a572a13ca19953bce6bdbca14eadd44f3669c7ad4b39ae857770543567a05ea3e437ccee36a2538fad1f4caa777036ace04f77 diff --git a/wireplumber.spec b/wireplumber.spec index 6177664..ad4048c 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,5 +1,5 @@ Name: wireplumber -Version: 0.5.4 +Version: 0.5.5 Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Fri Jun 28 2024 Wim Taymans - 0.5.5-1 +- wireplumber 0.5.5 + * Wed Jun 26 2024 Wim Taymans - 0.5.4-1 - wireplumber 0.5.4 From 79e2102f828fc75d198d4093d5b3d4c5c8f57119 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 20 Jul 2024 09:24:29 +0000 Subject: [PATCH 26/39] Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild --- wireplumber.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wireplumber.spec b/wireplumber.spec index ad4048c..04b0884 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.5.5 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Sat Jul 20 2024 Fedora Release Engineering - 0.5.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + * Fri Jun 28 2024 Wim Taymans - 0.5.5-1 - wireplumber 0.5.5 From 06c7427f561fc2df5a4548fc108fa47b52183eb9 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 17 Dec 2024 09:34:01 +0100 Subject: [PATCH 27/39] wireplumber 0.5.7 --- sources | 2 +- wireplumber.spec | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sources b/sources index 7b844da..0708158 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.5.tar.bz2) = 50ddc6f275bba89ddac0e55dd2a572a13ca19953bce6bdbca14eadd44f3669c7ad4b39ae857770543567a05ea3e437ccee36a2538fad1f4caa777036ace04f77 +SHA512 (wireplumber-0.5.7.tar.bz2) = a9f47664359ec8e483a3b16a1ba6b6e6bea3187bd17536f1ee2a756a0b217ebc401d4f21044b4c1caac83f08cead71539cf96705968aac80289cfe7e70857c56 diff --git a/wireplumber.spec b/wireplumber.spec index 04b0884..0435f55 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber -Version: 0.5.5 -Release: 2%{?dist} +Version: 0.5.7 +Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Tue Dec 17 2024 Wim Taymans - 0.5.7-1 +- wireplumber 0.5.7 + * Sat Jul 20 2024 Fedora Release Engineering - 0.5.5-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From 4bb6d7aad6b4f1a61df056e9ad2affc72f215025 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sun, 19 Jan 2025 15:05:34 +0000 Subject: [PATCH 28/39] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild --- wireplumber.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wireplumber.spec b/wireplumber.spec index 0435f55..62d6aa6 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.5.7 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Sun Jan 19 2025 Fedora Release Engineering - 0.5.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + * Tue Dec 17 2024 Wim Taymans - 0.5.7-1 - wireplumber 0.5.7 From ecf0b6f6ca6326cb360e6b70d056c5635ae25cec Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 7 Feb 2025 18:07:17 +0100 Subject: [PATCH 29/39] wireplumber 0.5.8 wireplumber 0.5.8 wireplumber 0.5.8 wireplumber 0.5.8 --- sources | 2 +- wireplumber.spec | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sources b/sources index 0708158..3bda6f7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.7.tar.bz2) = a9f47664359ec8e483a3b16a1ba6b6e6bea3187bd17536f1ee2a756a0b217ebc401d4f21044b4c1caac83f08cead71539cf96705968aac80289cfe7e70857c56 +SHA512 (wireplumber-0.5.8.tar.bz2) = bb3a4a3bc9fd0ece7fccb4efa32d01b02d68738b7766dd4b3310471c4bb98cc499b324ef0643079665d175e3267c1b4e53deef6ebdd9600e49a9560adb22ad88 diff --git a/wireplumber.spec b/wireplumber.spec index 62d6aa6..9ac6d33 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber -Version: 0.5.7 -Release: 2%{?dist} +Version: 0.5.8 +Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Fri Feb 07 2025 Wim Taymans - 0.5.8-1 +- wireplumber 0.5.8 + * Sun Jan 19 2025 Fedora Release Engineering - 0.5.7-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild From 74393aa64b5249a16de8bdf4f48ef770864ff7ce Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 19 May 2025 13:35:22 +0200 Subject: [PATCH 30/39] wireplumber 0.5.9 --- sources | 2 +- wireplumber.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sources b/sources index 3bda6f7..e5581a1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.8.tar.bz2) = bb3a4a3bc9fd0ece7fccb4efa32d01b02d68738b7766dd4b3310471c4bb98cc499b324ef0643079665d175e3267c1b4e53deef6ebdd9600e49a9560adb22ad88 +SHA512 (wireplumber-0.5.9.tar.bz2) = 2011b415c4d7f050ee59d8a491fc56ba4f6a06483fa42e33f70dc7cd6301a58b62903ac1d0898a7f9d369d1d3e51069b84c9382059a3d8008441c008027fcb64 diff --git a/wireplumber.spec b/wireplumber.spec index 9ac6d33..ceadbb9 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,5 +1,5 @@ Name: wireplumber -Version: 0.5.8 +Version: 0.5.9 Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Mon May 19 2025 Wim Taymans - 0.5.9-1 +- wireplumber 0.5.9 + * Fri Feb 07 2025 Wim Taymans - 0.5.8-1 - wireplumber 0.5.8 From 197849b5e84d8851f5357cc96e99dc43c9c1d53c Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 21 May 2025 09:36:41 +0200 Subject: [PATCH 31/39] wireplumber 0.5.10 --- sources | 2 +- wireplumber.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sources b/sources index e5581a1..7ed341b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.9.tar.bz2) = 2011b415c4d7f050ee59d8a491fc56ba4f6a06483fa42e33f70dc7cd6301a58b62903ac1d0898a7f9d369d1d3e51069b84c9382059a3d8008441c008027fcb64 +SHA512 (wireplumber-0.5.10.tar.bz2) = 53e1518ccc9f607dcbef9cfdc459804ac077ca11b79f215a2466332f5c67e9eace1b9bc05f1e7320e34a915c99a1b3ffdbb8963fadbdd1e3af85b3d0af09a32d diff --git a/wireplumber.spec b/wireplumber.spec index ceadbb9..dc2899f 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,5 +1,5 @@ Name: wireplumber -Version: 0.5.9 +Version: 0.5.10 Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Wed May 21 2025 Wim Taymans - 0.5.10-1 +- wireplumber 0.5.10 + * Mon May 19 2025 Wim Taymans - 0.5.9-1 - wireplumber 0.5.9 From eb63ac11b0074118f1f061dcd7319814cf0f0f70 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 25 Jul 2025 20:27:30 +0000 Subject: [PATCH 32/39] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild --- wireplumber.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wireplumber.spec b/wireplumber.spec index dc2899f..b0bd22b 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.5.10 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Fri Jul 25 2025 Fedora Release Engineering - 0.5.10-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + * Wed May 21 2025 Wim Taymans - 0.5.10-1 - wireplumber 0.5.10 From 494762605051eeaca8eb5854f4d7583a4dface5e Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 5 Sep 2025 11:00:21 +0200 Subject: [PATCH 33/39] wireplumber 0.5.11 --- sources | 2 +- wireplumber.spec | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sources b/sources index 7ed341b..1ce9251 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.10.tar.bz2) = 53e1518ccc9f607dcbef9cfdc459804ac077ca11b79f215a2466332f5c67e9eace1b9bc05f1e7320e34a915c99a1b3ffdbb8963fadbdd1e3af85b3d0af09a32d +SHA512 (wireplumber-0.5.11.tar.bz2) = 782b266a4be9663c73f892f01a4de5b154ddfc1dfcc51a17e0783a30660168991905c37aa604609a107432d05da7199d1ed770d806864c588fc116762bb06c6e diff --git a/wireplumber.spec b/wireplumber.spec index b0bd22b..a891719 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber -Version: 0.5.10 -Release: 2%{?dist} +Version: 0.5.11 +Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Fri Sep 05 2025 Wim Taymans - 0.5.11-1 +- wireplumber 0.5.11 + * Fri Jul 25 2025 Fedora Release Engineering - 0.5.10-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild From 99a986ef2838137c66ac0dd81b9713b84da8a943 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 10 Oct 2025 17:53:30 +0200 Subject: [PATCH 34/39] wireplumber 0.5.12 --- sources | 2 +- wireplumber.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sources b/sources index 1ce9251..fbd4061 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.11.tar.bz2) = 782b266a4be9663c73f892f01a4de5b154ddfc1dfcc51a17e0783a30660168991905c37aa604609a107432d05da7199d1ed770d806864c588fc116762bb06c6e +SHA512 (wireplumber-0.5.12.tar.bz2) = e00317ef90add4d5a0e1b637109a2fba594f081f466c15e1c5e62b9157d9684c13a745c926cc18795d0e4899c7813ddb5615b5f396e191a455b11cab11a38990 diff --git a/wireplumber.spec b/wireplumber.spec index a891719..17eca6d 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,5 +1,5 @@ Name: wireplumber -Version: 0.5.11 +Version: 0.5.12 Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Fri Oct 10 2025 Wim Taymans - 0.5.12-1 +- wireplumber 0.5.12 + * Fri Sep 05 2025 Wim Taymans - 0.5.11-1 - wireplumber 0.5.11 From dfcbf50d997e6a3a1b4d629b93bca03c0ee2cb29 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 17 Jan 2026 20:16:39 +0000 Subject: [PATCH 35/39] Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild --- wireplumber.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wireplumber.spec b/wireplumber.spec index 17eca6d..29c3aad 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.5.12 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -132,6 +132,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Sat Jan 17 2026 Fedora Release Engineering - 0.5.12-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + * Fri Oct 10 2025 Wim Taymans - 0.5.12-1 - wireplumber 0.5.12 From ed75548dc08b5405421cd9f5042ab0da8cf7d43e Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 19 Jan 2026 10:32:59 +0100 Subject: [PATCH 36/39] wireplumber 0.5.13 --- sources | 2 +- wireplumber.spec | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/sources b/sources index fbd4061..c9f2ff8 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.12.tar.bz2) = e00317ef90add4d5a0e1b637109a2fba594f081f466c15e1c5e62b9157d9684c13a745c926cc18795d0e4899c7813ddb5615b5f396e191a455b11cab11a38990 +SHA512 (wireplumber-0.5.13.tar.bz2) = 6d9c3f7b4d2d5afa55a5bff7f3956960ea22eebec3b059e78a8d091184e016187bb1f7558023581d29bc85f347aabee5ab5668eb0dc367b80de9c5e789ad4441 diff --git a/wireplumber.spec b/wireplumber.spec index 29c3aad..480cd95 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber -Version: 0.5.12 -Release: 2%{?dist} +Version: 0.5.13 +Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -112,6 +112,7 @@ fi %dir %{_sysconfdir}/wireplumber/policy.lua.d %{_datadir}/wireplumber/ %{_datadir}/zsh/site-functions/_wpctl +%{_datadir}/bash-completion/completions/wpctl %{_userunitdir}/wireplumber.service %{_userunitdir}/wireplumber@.service @@ -132,6 +133,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Mon Jan 19 2026 Wim Taymans - 0.5.13-1 +- wireplumber 0.5.13 + * Sat Jan 17 2026 Fedora Release Engineering - 0.5.12-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild From 4a3edf69d6883b4d6ad461d142ed42ecff00ec01 Mon Sep 17 00:00:00 2001 From: Tom spot Callaway Date: Mon, 16 Mar 2026 16:59:02 -0400 Subject: [PATCH 37/39] rebuild for lua 5.5 --- wireplumber.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wireplumber.spec b/wireplumber.spec index 480cd95..64bb974 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.5.13 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -133,6 +133,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Mon Mar 16 2026 Tom Callaway - 0.5.13-2 +- rebuild for lua 5.5 + * Mon Jan 19 2026 Wim Taymans - 0.5.13-1 - wireplumber 0.5.13 From 8a8c6a6accc11f38a8c440f345186ffb952323fc Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 1 Apr 2026 12:48:20 +0200 Subject: [PATCH 38/39] wireplumber 0.5.14 --- sources | 2 +- wireplumber.spec | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sources b/sources index c9f2ff8..03749fb 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (wireplumber-0.5.13.tar.bz2) = 6d9c3f7b4d2d5afa55a5bff7f3956960ea22eebec3b059e78a8d091184e016187bb1f7558023581d29bc85f347aabee5ab5668eb0dc367b80de9c5e789ad4441 +SHA512 (wireplumber-0.5.14.tar.bz2) = 49c2813b6374a327e1d15b79a56aa8a0f31049f4b7f13cc3cc85858dc498099556928d8347080ad3135c7b0575334deeaf343cdec6ecfe6a7734f442b97d4b40 diff --git a/wireplumber.spec b/wireplumber.spec index 64bb974..6cbc47e 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber -Version: 0.5.13 -Release: 2%{?dist} +Version: 0.5.14 +Release: 1%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -133,6 +133,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Wed Apr 01 2026 Wim Taymans - 0.5.14-1 +- wireplumber 0.5.14 + * Mon Mar 16 2026 Tom Callaway - 0.5.13-2 - rebuild for lua 5.5 From 3c171d1ad4472135c542bd6f362850152c391830 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 17 Jul 2026 08:50:29 +0000 Subject: [PATCH 39/39] Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild --- wireplumber.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wireplumber.spec b/wireplumber.spec index 6cbc47e..58df00f 100644 --- a/wireplumber.spec +++ b/wireplumber.spec @@ -1,6 +1,6 @@ Name: wireplumber Version: 0.5.14 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A modular session/policy manager for PipeWire License: MIT @@ -133,6 +133,9 @@ fi %{_datadir}/doc/wireplumber/ %changelog +* Fri Jul 17 2026 Fedora Release Engineering - 0.5.14-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild + * Wed Apr 01 2026 Wim Taymans - 0.5.14-1 - wireplumber 0.5.14