From fadeb6f81e8c41021c8e8ab0fd9295bc9ae248e3b71e8bc019df09fb93cd9ac4 Mon Sep 17 00:00:00 2001 From: Antonio Larrosa Date: Thu, 11 Nov 2021 14:00:57 +0000 Subject: [PATCH] Accepting request 930868 from home:alarrosa:branches:multimedia:libs - Update to version 0.4.5: * Fixes: - Fixed a crash that could happen after a node linking error (glfo#pipewire/wireplumber#76) - Fixed a bug that would cause capture streams to link to monitor ports of loopback nodes instead of linking to their capture ports - Fixed a needless wait that would happen on applications using the pipewire ALSA plugin (glfo#pipewire/wireplumber#92) - Fixed an issue that would cause endless rescan loops in policy-node and could potentially also cause other strange behaviors in case pavucontrol or another monitoring utility was open while the policy was rescanning (glfo#pipewire/wireplumber#77) - Fixed the endpoints-based policy that broke in recent versions and improved its codebase to share more code and be more in-line with policy-node - The semicolon character is now escaped properly in state files (glfo#pipewire/wireplumber#82) - When a player requests encoded audio passthrough, the policy now prefers linking to a device that supports that instead of trying to link to the default device and potentially failing (glfo#pipewire/wireplumber#75) - Miscellaneous robustness fixes in policy-node * API: - Added WpFactory, a binding for pw_factory proxies. This allows object managers to query factories that are loaded in the pipewire daemon - The file-monitor-api plugin can now watch files for changes in addition to directories OBS-URL: https://build.opensuse.org/request/show/930868 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/wireplumber?expand=0&rev=8 --- ...-break-in-best-route-selection-logic.patch | 26 ---- ...x-crash-after-returning-a-link-error.patch | 36 ------ ...the-target-when-linking-by-node-name.patch | 116 ------------------ _service | 2 +- _servicedata | 2 +- reduce-meson-required-version.patch | 12 +- wireplumber-0.4.4.obscpio | 3 - wireplumber-0.4.5.obscpio | 3 + wireplumber.changes | 39 ++++++ wireplumber.obsinfo | 6 +- wireplumber.spec | 12 +- 11 files changed, 57 insertions(+), 200 deletions(-) delete mode 100644 0001-add-missing-break-in-best-route-selection-logic.patch delete mode 100644 0001-si-standard-link-fix-crash-after-returning-a-link-error.patch delete mode 100644 0002-policy-node-enforce-the-direction-of-the-target-when-linking-by-node-name.patch delete mode 100644 wireplumber-0.4.4.obscpio create mode 100644 wireplumber-0.4.5.obscpio diff --git a/0001-add-missing-break-in-best-route-selection-logic.patch b/0001-add-missing-break-in-best-route-selection-logic.patch deleted file mode 100644 index 3597fe4..0000000 --- a/0001-add-missing-break-in-best-route-selection-logic.patch +++ /dev/null @@ -1,26 +0,0 @@ -From ff9b49064df436b0523bda66e567eb60ecf07f70 Mon Sep 17 00:00:00 2001 -From: George Kiagiadakis -Date: Mon, 1 Nov 2021 12:14:04 +0200 -Subject: [PATCH] default-routes.lua: add missing break in best route selection - logic - -Fixes #86 ---- - src/scripts/default-routes.lua | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/scripts/default-routes.lua b/src/scripts/default-routes.lua -index 9c5593a4..b55ae4e0 100644 ---- a/src/scripts/default-routes.lua -+++ b/src/scripts/default-routes.lua -@@ -266,6 +266,7 @@ function findBestRoute(dev_info, device_id) - if ri.direction == "Output" and ri.available ~= ri.prev_available then - best_avail = ri - ri.save = true -+ break - elseif ri.available == "yes" then - if (best_avail == nil or ri.priority > best_avail.priority) then - best_avail = ri --- -GitLab - diff --git a/0001-si-standard-link-fix-crash-after-returning-a-link-error.patch b/0001-si-standard-link-fix-crash-after-returning-a-link-error.patch deleted file mode 100644 index 277e870..0000000 --- a/0001-si-standard-link-fix-crash-after-returning-a-link-error.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 6e67000d5e42fc30e6f7ff3ec5544e0be8dcbf00 Mon Sep 17 00:00:00 2001 -From: George Kiagiadakis -Date: Sat, 16 Oct 2021 09:51:00 +0300 -Subject: [PATCH] si-standard-link: fix crash after returning a link error - -If one link fails, the activation transition will return, but then -other links will continue to call the callback and try to access -the now invalid activation transition. With this change, the callback -is bound to the lifetime of the transition and will stop being called -after the transition returns - -Fixes #76 ---- - modules/module-si-standard-link.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/modules/module-si-standard-link.c b/modules/module-si-standard-link.c -index 5dda0581..95ec7ca5 100644 ---- a/modules/module-si-standard-link.c -+++ b/modules/module-si-standard-link.c -@@ -310,9 +310,10 @@ create_links (WpSiStandardLink * self, WpTransition * transition, - - /* activate to ensure it is created without errors */ - self->n_async_ops_wait++; -- wp_object_activate (WP_OBJECT (link), -+ wp_object_activate_closure (WP_OBJECT (link), - WP_PIPEWIRE_OBJECT_FEATURES_MINIMAL, NULL, -- (GAsyncReadyCallback) on_link_activated, transition); -+ g_cclosure_new_object ( -+ (GCallback) on_link_activated, G_OBJECT (transition))); - } - g_variant_iter_free (iter); - return self->node_links->len > 0; --- -GitLab - diff --git a/0002-policy-node-enforce-the-direction-of-the-target-when-linking-by-node-name.patch b/0002-policy-node-enforce-the-direction-of-the-target-when-linking-by-node-name.patch deleted file mode 100644 index da02c2d..0000000 --- a/0002-policy-node-enforce-the-direction-of-the-target-when-linking-by-node-name.patch +++ /dev/null @@ -1,116 +0,0 @@ -From f8ced47a1a9595b32c59ece24b864bafbdcc74fe Mon Sep 17 00:00:00 2001 -From: George Kiagiadakis -Date: Tue, 19 Oct 2021 13:04:58 +0300 -Subject: [PATCH] policy-node: enforce the direction of the target when linking - by node name - -When node.target is set to contain a node's name, it is possible to run -into the situation where you have a sink and a source with the same name -(typically the case with module-loopback) and the sink has monitor ports, -so wireplumber may link the stream to the monitor of the sink instead of the -capture ports of the source - -With this policy, if a stream really wants to link to the monitor of the sink, -it has to have the "stream.capture.sink" property set or specify the -target by id. ---- - src/scripts/policy-node.lua | 76 +++++++++++++++++-------------------- - 1 file changed, 35 insertions(+), 41 deletions(-) - -diff --git a/src/scripts/policy-node.lua b/src/scripts/policy-node.lua -index 4c5c359b..e982a09d 100644 ---- a/src/scripts/policy-node.lua -+++ b/src/scripts/policy-node.lua -@@ -187,47 +187,6 @@ function canLink (properties, si_target) - return true - end - ---- Try to locate a valid target node that was explicitly defined by the user ---- Use the target.node metadata, if config.move is enabled, ---- then use the node.target property that was set on the node ---- `properties` must be the properties dictionary of the session item ---- that is currently being handled --function findDefinedTarget (properties) -- local function findTargetByTargetNodeMetadata (properties) -- local node_id = properties["node.id"] -- local metadata = metadata_om:lookup() -- local target_id = metadata and metadata:find(node_id, "target.node") or nil -- if target_id and tonumber(target_id) > 0 then -- local si_target = linkables_om:lookup { -- Constraint { "node.id", "=", target_id }, -- } -- if si_target and canLink (properties, si_target) then -- return si_target -- end -- end -- return nil -- end -- -- local function findTargetByNodeTargetProperty (properties) -- local target_id = properties["node.target"] -- if target_id then -- for si_target in linkables_om:iterate() do -- local target_props = si_target.properties -- if (target_props["node.id"] == target_id or -- target_props["node.name"] == target_id or -- target_props["object.path"] == target_id) and -- canLink (properties, si_target) then -- return si_target -- end -- end -- end -- return nil -- end -- -- return (config.move and findTargetByTargetNodeMetadata (properties) or nil) -- or findTargetByNodeTargetProperty (properties) --end -- - function getTargetDirection(properties) - local target_direction = nil - if properties["item.node.direction"] == "output" or -@@ -247,6 +206,41 @@ function getDefaultNode(properties, target_direction) - return default_nodes:call("get-default-node", target_media_class) - end - -+-- Try to locate a valid target node that was explicitly defined by the user -+-- Use the target.node metadata, if config.move is enabled, -+-- then use the node.target property that was set on the node -+-- `properties` must be the properties dictionary of the session item -+-- that is currently being handled -+function findDefinedTarget (properties) -+ local metadata = config.move and metadata_om:lookup() -+ local target_id = metadata -+ and metadata:find(properties["node.id"], "target.node") -+ or properties["node.target"] -+ local target_direction = getTargetDirection(properties) -+ -+ if target_id and tonumber(target_id) then -+ local si_target = linkables_om:lookup { -+ Constraint { "node.id", "=", target_id }, -+ } -+ if si_target and canLink (properties, si_target) then -+ return si_target -+ end -+ end -+ -+ if target_id then -+ for si_target in linkables_om:iterate() do -+ local target_props = si_target.properties -+ if (target_props["node.name"] == target_id or -+ target_props["object.path"] == target_id) and -+ target_props["item.node.direction"] == target_direction and -+ canLink (properties, si_target) then -+ return si_target -+ end -+ end -+ end -+ return nil -+end -+ - -- Try to locate a valid target node that was NOT explicitly defined by the user - -- `properties` must be the properties dictionary of the session item - -- that is currently being handled --- -GitLab - diff --git a/_service b/_service index b6bd227..f47dd1e 100644 --- a/_service +++ b/_service @@ -4,7 +4,7 @@ git https://gitlab.freedesktop.org/pipewire/wireplumber.git enable - 0.4.4 + 0.4.5 @PARENT_TAG@