diff options
Diffstat (limited to 'media-video/wireplumber/files/wireplumber-0.4.10-alsa.lua-fix-device-name-deduplication-when-reserva.patch')
-rw-r--r-- | media-video/wireplumber/files/wireplumber-0.4.10-alsa.lua-fix-device-name-deduplication-when-reserva.patch | 117 |
1 files changed, 0 insertions, 117 deletions
diff --git a/media-video/wireplumber/files/wireplumber-0.4.10-alsa.lua-fix-device-name-deduplication-when-reserva.patch b/media-video/wireplumber/files/wireplumber-0.4.10-alsa.lua-fix-device-name-deduplication-when-reserva.patch deleted file mode 100644 index 610db0e11e89..000000000000 --- a/media-video/wireplumber/files/wireplumber-0.4.10-alsa.lua-fix-device-name-deduplication-when-reserva.patch +++ /dev/null @@ -1,117 +0,0 @@ -https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/c00c5a6675b6640db13111c808eaa3251917c412 - -From c00c5a6675b6640db13111c808eaa3251917c412 Mon Sep 17 00:00:00 2001 -From: Julian Bouzas <julian.bouzas@collabora.com> -Date: Wed, 18 May 2022 10:51:41 -0400 -Subject: [PATCH] alsa.lua: fix device name deduplication when reservation is - enabled - -Fixes #241 ---- - src/scripts/monitors/alsa.lua | 47 +++++++++++++++++++---------------- - 1 file changed, 25 insertions(+), 22 deletions(-) - -diff --git a/src/scripts/monitors/alsa.lua b/src/scripts/monitors/alsa.lua -index 01d241db..7beed3a8 100644 ---- a/src/scripts/monitors/alsa.lua -+++ b/src/scripts/monitors/alsa.lua -@@ -11,6 +11,10 @@ local config = ... or {} - -- ensure config.properties is not nil - config.properties = config.properties or {} - -+-- unique device/node name tables -+device_names_table = nil -+node_names_table = nil -+ - -- preprocess rules and create Interest objects - for _, r in ipairs(config.rules or {}) do - r.interests = {} -@@ -41,16 +45,6 @@ function rulesApplyProperties(properties) - end - end - --function findDuplicate(parent, id, property, value) -- for i = 0, id - 1, 1 do -- local obj = parent:get_managed_object(i) -- if obj and obj.properties[property] == value then -- return true -- end -- end -- return false --end -- - function nonempty(str) - return str ~= "" and str or nil - end -@@ -125,11 +119,11 @@ function createNode(parent, id, type, factory, properties) - - -- deduplicate nodes with the same name - for counter = 2, 99, 1 do -- if findDuplicate(parent, id, "node.name", properties["node.name"]) then -- properties["node.name"] = name .. "." .. counter -- else -+ if node_names_table[properties["node.name"]] ~= true then -+ node_names_table[properties["node.name"]] = true - break - end -+ properties["node.name"] = name .. "." .. counter - end - end - -@@ -186,6 +180,10 @@ function createDevice(parent, id, factory, properties) - local device = SpaDevice(factory, properties) - if device then - device:connect("create-object", createNode) -+ device:connect("object-removed", function (parent, id) -+ local node = parent:get_managed_object(id) -+ node_names_table[node.properties["node.name"]] = nil -+ end) - device:activate(Feature.SpaDevice.ENABLED | Feature.Proxy.BOUND) - parent:store_managed_object(id, device) - else -@@ -205,11 +203,11 @@ function prepareDevice(parent, id, type, factory, properties) - - -- deduplicate devices with the same name - for counter = 2, 99, 1 do -- if findDuplicate(parent, id, "device.name", properties["device.name"]) then -- properties["device.name"] = name .. "." .. counter -- else -+ if device_names_table[properties["device.name"]] ~= true then -+ device_names_table[properties["device.name"]] = true - break - end -+ properties["device.name"] = name .. "." .. counter - end - - -- ensure the device has a description -@@ -337,16 +335,21 @@ function createMonitor () - -- handle create-object to prepare device - m:connect("create-object", prepareDevice) - -- -- if dbus reservation, handle object-removed to destroy device reservations -- if rd_plugin then -- m:connect("object-removed", function (parent, id) -- local device = parent:get_managed_object(id) -+ -- handle object-removed to destroy device reservations and recycle device name -+ m:connect("object-removed", function (parent, id) -+ local device = parent:get_managed_object(id) -+ if rd_plugin then - local rd_name = device.properties["api.dbus.ReserveDevice1"] - if rd_name then - rd_plugin:call("destroy-reservation", rd_name) - end -- end) -- end -+ end -+ device_names_table[device.properties["device.name"]] = nil -+ end) -+ -+ -- reset the name tables to make sure names are recycled -+ device_names_table = {} -+ node_names_table = {} - - -- activate monitor - Log.info("Activating ALSA monitor") --- -GitLab - |