diff options
Diffstat (limited to 'media-video/wireplumber/files/wireplumber-0.5.6-bluetooth-only-autoswitch.patch')
-rw-r--r-- | media-video/wireplumber/files/wireplumber-0.5.6-bluetooth-only-autoswitch.patch | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/media-video/wireplumber/files/wireplumber-0.5.6-bluetooth-only-autoswitch.patch b/media-video/wireplumber/files/wireplumber-0.5.6-bluetooth-only-autoswitch.patch new file mode 100644 index 000000000000..779a4d4f21bf --- /dev/null +++ b/media-video/wireplumber/files/wireplumber-0.5.6-bluetooth-only-autoswitch.patch @@ -0,0 +1,64 @@ +https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/715 +https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/669 +https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/b68a6794cd5c3702a2144be60c41a9ca982c416b + +From b68a6794cd5c3702a2144be60c41a9ca982c416b Mon Sep 17 00:00:00 2001 +From: Pauli Virtanen <pav@iki.fi> +Date: Sun, 8 Sep 2024 20:22:41 +0300 +Subject: [PATCH] autoswitch-bluetooth-profile: switch only Bluetooth devices + +Handle only devices associated with Bluetooth loopback nodes. + +Make sure the node.link-group iteration cannot get stuck if there is a +loop in the link graph. +--- a/src/scripts/device/autoswitch-bluetooth-profile.lua ++++ b/src/scripts/device/autoswitch-bluetooth-profile.lua +@@ -301,13 +301,14 @@ end + + -- We consider a Stream of interest if it is linked to a bluetooth loopback + -- source filter +-local function checkStreamStatus (stream, node_om) ++local function checkStreamStatus (stream, node_om, visited_link_groups) + -- check if the stream is linked to a bluetooth loopback source + local stream_id = tonumber(stream["bound-id"]) + local peer_id = lutils.getNodePeerId (stream_id) + if peer_id ~= nil then + local bt_node = node_om:lookup { +- Constraint { "bound-id", "=", peer_id, type = "gobject" } ++ Constraint { "bound-id", "=", peer_id, type = "gobject" }, ++ Constraint { "bluez5.loopback", "=", "true", type = "pw" } + } + if bt_node ~= nil then + local dev_id = bt_node.properties["device.id"] +@@ -325,18 +326,27 @@ local function checkStreamStatus (stream, node_om) + else + -- Check if it is linked to a filter main node, and recursively advance if so + local filter_main_node = node_om:lookup { +- Constraint { "bound-id", "=", peer_id, type = "gobject" } ++ Constraint { "bound-id", "=", peer_id, type = "gobject" }, ++ Constraint { "node.link-group", "+", type = "pw" } + } + if filter_main_node ~= nil then + -- Now check all stream nodes for this filter + local filter_link_group = filter_main_node.properties ["node.link-group"] ++ if visited_link_groups == nil then ++ visited_link_groups = {} ++ end ++ if visited_link_groups [filter_link_group] then ++ return nil ++ else ++ visited_link_groups [filter_link_group] = true ++ end + for filter_stream_node in node_om:iterate { + Constraint { "media.class", "matches", "Stream/Input/Audio", type = "pw-global" }, + Constraint { "stream.monitor", "!", "true", type = "pw" }, + Constraint { "bluez5.loopback", "!", "true", type = "pw" }, + Constraint { "node.link-group", "=", filter_link_group, type = "pw" } + } do +- local dev_id = checkStreamStatus (filter_stream_node, node_om) ++ local dev_id = checkStreamStatus (filter_stream_node, node_om, visited_link_groups) + if dev_id ~= nil then + return dev_id + end +-- +GitLab |