From e20b0c77c2cbac9a63cdf0cc9945987ed9a7f6b5d9a749c0de324a7832652a5e Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Sun, 26 Nov 2023 11:24:38 +0000 Subject: [PATCH] Accepting request 1128888 from home:alarrosa:branches:multimedia:libs - Update to version 0.4.16: * Additions: - Added a new "sm-objects" script that allows loading objects on demand via metadata entries that describe the object to load; this can be used to load pipewire modules, such as filters or network sources/sinks, on demand - Added a mechanism to override device profile priorities in the configuration, mainly as a way to re-prioritize Bluetooth codecs, but this also can be used for other devices - Added a mechanism in the endpoints policy to allow connecting filters between a certain endpoint's virtual sink and the device sink; this is specifically intended to allow plugging a filter-chain to act as equalizer on the Multimedia endpoint - Added wp_core_get_own_bound_id() method in WpCore * Changes: - PipeWire 0.3.68 is now required - policy-dsp now has the ability to hide hardware nodes behind the DSP sink to prevent hardware misuse or damage - JSON parsing in Lua now allows keys inside objects to be without quotes - Added optional argument in the Lua JSON parse() method to limit recursions, making it possible to partially parse a JSON object - It is now possible to pass nil in Lua object constructors that expect an optional properties object; previously, omitting the argument was the only way to skip the properties - The endpoints policy now marks the endpoint nodes as "passive" instead of marking their links, adjusting for the behavior change in PipeWire 0.3.68 - Removed the "passive" property from si-standard-link, since OBS-URL: https://build.opensuse.org/request/show/1128888 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/wireplumber?expand=0&rev=63 --- ...the-amount-of-globals-that-initially.patch | 36 -------- ...dsp-add-ability-to-hide-parent-nodes.patch | 69 --------------- ...-idle-callback-to-expose-tmp-globals.patch | 88 ------------------- _service | 2 +- split-config-file.py | 7 +- wireplumber-0.4.15.obscpio | 3 - wireplumber-0.4.16.obscpio | 3 + wireplumber.changes | 47 ++++++++++ wireplumber.obsinfo | 6 +- wireplumber.spec | 10 +-- 10 files changed, 61 insertions(+), 210 deletions(-) delete mode 100644 0001-object-manager-reduce-the-amount-of-globals-that-initially.patch delete mode 100644 0001-policy-dsp-add-ability-to-hide-parent-nodes.patch delete mode 100644 0002-object-manager-use-an-idle-callback-to-expose-tmp-globals.patch delete mode 100644 wireplumber-0.4.15.obscpio create mode 100644 wireplumber-0.4.16.obscpio diff --git a/0001-object-manager-reduce-the-amount-of-globals-that-initially.patch b/0001-object-manager-reduce-the-amount-of-globals-that-initially.patch deleted file mode 100644 index 686639c..0000000 --- a/0001-object-manager-reduce-the-amount-of-globals-that-initially.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 5fc7e68d109b646c550e3fdeddebadc5047137a2 Mon Sep 17 00:00:00 2001 -From: George Kiagiadakis -Date: Mon, 23 Oct 2023 23:04:02 +0300 -Subject: [PATCH] object-manager: reduce the amount of globals that initially - match the interest - -With the previous check, any global matching either the type or the global -properties of the interest would be considered for inclusion in the object -manager and would be prepared only to fail the same check later. - -The correct way to check is (variable & (X|Y) == (X|Y)), which is what -SPA_FLAG_IS_SET() expands to. - -Fixes #517 ---- - lib/wp/object-manager.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/lib/wp/object-manager.c b/lib/wp/object-manager.c -index 6f58653ba..dea7857e1 100644 ---- a/lib/wp/object-manager.c -+++ b/lib/wp/object-manager.c -@@ -638,8 +638,8 @@ wp_object_manager_is_interested_in_global (WpObjectManager * self, - /* and consider the manager interested if the type and the globals match... - if pw_properties / g_properties fail, that's ok because they are not - known yet (the proxy is likely NULL and properties not yet retrieved) */ -- if (match & (WP_INTEREST_MATCH_GTYPE | -- WP_INTEREST_MATCH_PW_GLOBAL_PROPERTIES)) { -+ if (SPA_FLAG_IS_SET (match, (WP_INTEREST_MATCH_GTYPE | -+ WP_INTEREST_MATCH_PW_GLOBAL_PROPERTIES))) { - gpointer ft = g_hash_table_lookup (self->features, - GSIZE_TO_POINTER (global->type)); - *wanted_features = (WpObjectFeatures) GPOINTER_TO_UINT (ft); --- -GitLab - 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 aff077d..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 55f86c68..ce23a67a 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() --- -GitLab - diff --git a/0002-object-manager-use-an-idle-callback-to-expose-tmp-globals.patch b/0002-object-manager-use-an-idle-callback-to-expose-tmp-globals.patch deleted file mode 100644 index 0a54cbb..0000000 --- a/0002-object-manager-use-an-idle-callback-to-expose-tmp-globals.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 23ba01970f2520fb30fddc4ee911d77cdda9ac22 Mon Sep 17 00:00:00 2001 -From: George Kiagiadakis -Date: Mon, 23 Oct 2023 23:08:45 +0300 -Subject: [PATCH] object-manager: use an idle callback to expose tmp globals - instead of pw_core_sync - -A core sync is not really necessary here because whatever objects the remote -pipewire daemon has to announce have already been sent to us on a message -and this message is already being processed at this point. This means, we are -not going to be returning to the main loop until all the new objects have been -announced and therefore placed into the tmp globals array. So, we can also use -an idle callback and achieve the same effect of slightly delaying until all -new globals have been announced. - -With an idle callback, we can be more agile and add those new objects immediately -after the message has been processed instead of waiting for a pw_core_sync() -reply, which will come in the next message. - -This fixes an odd failure of the si-standard-link test after applying the fix -for #517, which was caused by the fact that the test was previously relying on -a delay caused by some unrelated globals being prepared in the object manager -that tries to verify the graph state. After those globals were removed from the -internal preparation queue, the test would fail to detect the link objects -because they were stuck in the tmp_globals array for too long. ---- - lib/wp/object-manager.c | 20 ++++++++++---------- - 1 file changed, 10 insertions(+), 10 deletions(-) - -diff --git a/lib/wp/object-manager.c b/lib/wp/object-manager.c -index dea7857e..816db6dc 100644 ---- a/lib/wp/object-manager.c -+++ b/lib/wp/object-manager.c -@@ -1047,18 +1047,15 @@ wp_registry_detach (WpRegistry *self) - } - } - --static void --expose_tmp_globals (WpCore *core, GAsyncResult *res, WpRegistry *self) -+static gboolean -+expose_tmp_globals (WpCore *core) - { -- g_autoptr (GError) error = NULL; -+ WpRegistry *self = wp_core_get_registry (core); - g_autoptr (GPtrArray) tmp_globals = NULL; - -- if (!wp_core_sync_finish (core, res, &error)) -- wp_warning_object (core, "core sync error: %s", error->message); -- - /* in case the registry was cleared in the meantime... */ - if (G_UNLIKELY (!self->tmp_globals)) -- return; -+ return G_SOURCE_REMOVE; - - /* steal the tmp_globals list and replace it with an empty one */ - tmp_globals = self->tmp_globals; -@@ -1082,8 +1079,8 @@ expose_tmp_globals (WpCore *core, GAsyncResult *res, WpRegistry *self) - wp_global_rm_flag (old_g, WP_GLOBAL_FLAG_OWNED_BY_PROXY); - } - -- g_return_if_fail (self->globals->len <= g->id || -- g_ptr_array_index (self->globals, g->id) == NULL); -+ g_return_val_if_fail (self->globals->len <= g->id || -+ g_ptr_array_index (self->globals, g->id) == NULL, G_SOURCE_REMOVE); - - /* set the registry, so that wp_global_rm_flag() can work full-scale */ - g->registry = self; -@@ -1109,6 +1106,8 @@ expose_tmp_globals (WpCore *core, GAsyncResult *res, WpRegistry *self) - } - wp_object_manager_maybe_objects_changed (om); - } -+ -+ return G_SOURCE_REMOVE; - } - - /* -@@ -1159,7 +1158,8 @@ wp_registry_prepare_new_global (WpRegistry * self, guint32 id, - - /* schedule exposing when adding the first global */ - if (self->tmp_globals->len == 1) { -- wp_core_sync (core, NULL, (GAsyncReadyCallback) expose_tmp_globals, self); -+ wp_core_idle_add_closure (core, NULL, -+ g_cclosure_new_object (G_CALLBACK (expose_tmp_globals), G_OBJECT (core))); - } - } else { - /* store the most permissive permissions */ --- -GitLab - diff --git a/_service b/_service index 0e35671..9ad7767 100644 --- a/_service +++ b/_service @@ -3,7 +3,7 @@ git https://gitlab.freedesktop.org/pipewire/wireplumber.git - refs/tags/0.4.15 + refs/tags/0.4.16 @PARENT_TAG@