forked from pool/wireplumber
Accepting request 949043 from home:alarrosa:branches:multimedia:libs
- Add patch from upstream to fix selection of Pro Audio nodes as default nodes: * 0001-default-nodes-handle-nodes-without-Routes.patch OBS-URL: https://build.opensuse.org/request/show/949043 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/wireplumber?expand=0&rev=28
This commit is contained in:
parent
a1ca724012
commit
eea94cc462
47
0001-default-nodes-handle-nodes-without-Routes.patch
Normal file
47
0001-default-nodes-handle-nodes-without-Routes.patch
Normal file
@ -0,0 +1,47 @@
|
||||
From 211f1e6b6cd4898121e4c2b821fae4dea6cc3317 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Fri, 14 Jan 2022 16:28:48 +0100
|
||||
Subject: [PATCH] default-nodes: handle nodes without Routes
|
||||
|
||||
When a node has not part of any EnumRoute, we must assume it is
|
||||
available.
|
||||
|
||||
Fixes selection of Pro Audio nodes as default nodes.
|
||||
---
|
||||
modules/module-default-nodes.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/modules/module-default-nodes.c b/modules/module-default-nodes.c
|
||||
index 32b2725b..15aadeaa 100644
|
||||
--- a/modules/module-default-nodes.c
|
||||
+++ b/modules/module-default-nodes.c
|
||||
@@ -108,6 +108,7 @@ node_has_available_routes (WpDefaultNodes * self, WpNode *node)
|
||||
gint dev_id = dev_id_str ? atoi (dev_id_str) : -1;
|
||||
gint cpd = cpd_str ? atoi (cpd_str) : -1;
|
||||
g_autoptr (WpDevice) device = NULL;
|
||||
+ gint found = 0;
|
||||
|
||||
if (dev_id == -1 || cpd == -1)
|
||||
return TRUE;
|
||||
@@ -168,6 +169,7 @@ node_has_available_routes (WpDefaultNodes * self, WpNode *node)
|
||||
for (; wp_iterator_next (it, &v); g_value_unset (&v)) {
|
||||
gint32 *d = (gint32 *)g_value_get_pointer (&v);
|
||||
if (d && *d == cpd) {
|
||||
+ found++;
|
||||
if (route_avail != SPA_PARAM_AVAILABILITY_no)
|
||||
return TRUE;
|
||||
}
|
||||
@@ -175,6 +177,10 @@ node_has_available_routes (WpDefaultNodes * self, WpNode *node)
|
||||
}
|
||||
}
|
||||
}
|
||||
+ /* The node is part of a profile without routes so we assume it
|
||||
+ * is available. This can happen for Pro Audio profiles */
|
||||
+ if (found == 0)
|
||||
+ return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,25 +0,0 @@
|
||||
From 23fc4d21a9cfad492f8d3a367e438115197dff4a Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Fri, 7 Jan 2022 10:12:04 -0500
|
||||
Subject: [PATCH 01/14] policy-node: fix typo when finding best target
|
||||
|
||||
---
|
||||
src/scripts/policy-node.lua | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/scripts/policy-node.lua b/src/scripts/policy-node.lua
|
||||
index 0d716c1..8ca5a69 100644
|
||||
--- a/src/scripts/policy-node.lua
|
||||
+++ b/src/scripts/policy-node.lua
|
||||
@@ -482,7 +482,7 @@ function findUndefinedTarget (si)
|
||||
if default_nodes ~= nil then
|
||||
return findDefaultlinkable (si)
|
||||
else
|
||||
- return findBestlinkable (si)
|
||||
+ return findBestLinkable (si)
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,48 +0,0 @@
|
||||
From afe71d7e48c28b0ae5cbd9327433e3c55c103fcb Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Thu, 6 Jan 2022 10:53:38 -0500
|
||||
Subject: [PATCH 02/14] policy-node: schedule a rescan without timeout if
|
||||
defined target is not found
|
||||
|
||||
Fixes #146
|
||||
---
|
||||
src/scripts/policy-node.lua | 17 ++++-------------
|
||||
1 file changed, 4 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/src/scripts/policy-node.lua b/src/scripts/policy-node.lua
|
||||
index 8ca5a69..c273c1f 100644
|
||||
--- a/src/scripts/policy-node.lua
|
||||
+++ b/src/scripts/policy-node.lua
|
||||
@@ -552,25 +552,16 @@ function handleLinkable (si)
|
||||
si_target = nil
|
||||
end
|
||||
|
||||
- -- wait up to 2 seconds for the requested target to become available
|
||||
- -- this is because the client may have already "seen" a target that we haven't
|
||||
- -- yet prepared, which leads to a race condition
|
||||
+ -- if the client has seen a target that we haven't yet prepared, schedule
|
||||
+ -- a rescan one more time and hope for the best
|
||||
local si_id = si.id
|
||||
if si_props["node.target"] and si_props["node.target"] ~= "-1"
|
||||
and not si_target
|
||||
and not si_flags[si_id].was_handled
|
||||
and not si_flags[si_id].done_waiting then
|
||||
- if not si_flags[si_id].timeout_source then
|
||||
- si_flags[si_id].timeout_source = Core.timeout_add(2000, function()
|
||||
- if si_flags[si_id] then
|
||||
- si_flags[si_id].done_waiting = true
|
||||
- si_flags[si_id].timeout_source = nil
|
||||
- scheduleRescan()
|
||||
- end
|
||||
- return false
|
||||
- end)
|
||||
- end
|
||||
Log.info (si, "... waiting for target")
|
||||
+ si_flags[si_id].done_waiting = true
|
||||
+ scheduleRescan()
|
||||
return
|
||||
end
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,46 +0,0 @@
|
||||
From bee9827ae376b75feceea926b0afc727fecca51b Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Fri, 7 Jan 2022 15:35:10 -0500
|
||||
Subject: [PATCH 03/14] policy-node: find best linkable if default one cannot
|
||||
be linked
|
||||
|
||||
Fixes issue with echo cancellation pipewire module.
|
||||
---
|
||||
src/scripts/policy-node.lua | 19 ++++++++++++++-----
|
||||
1 file changed, 14 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/scripts/policy-node.lua b/src/scripts/policy-node.lua
|
||||
index c273c1f..9df5007 100644
|
||||
--- a/src/scripts/policy-node.lua
|
||||
+++ b/src/scripts/policy-node.lua
|
||||
@@ -477,13 +477,22 @@ function findBestLinkable (si)
|
||||
end
|
||||
|
||||
function findUndefinedTarget (si)
|
||||
- -- Find the default linkable if the default nodes module is loaded, otherwise
|
||||
- -- just find the best linkable based on priority and routes
|
||||
- if default_nodes ~= nil then
|
||||
- return findDefaultlinkable (si)
|
||||
- else
|
||||
+ -- Just find the best linkable if default nodes module is not loaded
|
||||
+ if default_nodes == nil then
|
||||
return findBestLinkable (si)
|
||||
end
|
||||
+
|
||||
+ -- Otherwise find the default linkable. If the default linkabke cannot link,
|
||||
+ -- we find the best one instead. We return nil if default does not exist.
|
||||
+ local si_target, can_passthrough = findDefaultlinkable (si)
|
||||
+ if si_target then
|
||||
+ if canLink (si.properties, si_target) then
|
||||
+ return si_target, can_passthrough
|
||||
+ else
|
||||
+ return findBestLinkable (si)
|
||||
+ end
|
||||
+ end
|
||||
+ return nil, nil
|
||||
end
|
||||
|
||||
function lookupLink (si_id, si_target_id)
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,39 +0,0 @@
|
||||
From bc76cb7d74a1eac20cabd99ebb27f749d447d6ca Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Mon, 13 Dec 2021 12:01:52 -0500
|
||||
Subject: [PATCH 04/14] spa-pod: fix different architecture errors for boolean
|
||||
values
|
||||
|
||||
---
|
||||
lib/wp/spa-pod.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/lib/wp/spa-pod.c b/lib/wp/spa-pod.c
|
||||
index c1c2257..bd7b887 100644
|
||||
--- a/lib/wp/spa-pod.c
|
||||
+++ b/lib/wp/spa-pod.c
|
||||
@@ -2332,6 +2332,10 @@ wp_spa_pod_builder_add_valist (WpSpaPodBuilder *self, va_list args)
|
||||
}
|
||||
break;
|
||||
}
|
||||
+ case 'b':
|
||||
+ spa_pod_builder_bool(&self->builder,
|
||||
+ va_arg(args, gboolean) ? true : false);
|
||||
+ break;
|
||||
default:
|
||||
SPA_POD_BUILDER_COLLECT(&self->builder, *format, args);
|
||||
break;
|
||||
@@ -2778,6 +2782,10 @@ wp_spa_pod_parser_get_valist (WpSpaPodParser *self, va_list args)
|
||||
}
|
||||
break;
|
||||
}
|
||||
+ case 'b':
|
||||
+ *va_arg(args, gboolean*) =
|
||||
+ SPA_POD_VALUE(struct spa_pod_bool, pod) ? TRUE : FALSE;
|
||||
+ break;
|
||||
default:
|
||||
SPA_POD_PARSER_COLLECT (pod, *format, args);
|
||||
break;
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,126 +0,0 @@
|
||||
From 99dfa7d38a66943fc04181a2b82fe6da91402c4f Mon Sep 17 00:00:00 2001
|
||||
From: Ashok Sidipotu <ashok.sidipotu@collabora.com>
|
||||
Date: Tue, 11 Jan 2022 15:30:30 +0530
|
||||
Subject: [PATCH 05/14] config: update the endpoints config
|
||||
|
||||
-Sync endpoints config from AGL.
|
||||
-Add a capture endpoint.
|
||||
---
|
||||
.../policy.lua.d/50-endpoints-config.lua | 84 +++++++++++++++----
|
||||
1 file changed, 70 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/src/config/policy.lua.d/50-endpoints-config.lua b/src/config/policy.lua.d/50-endpoints-config.lua
|
||||
index 4bdf82a..6241509 100644
|
||||
--- a/src/config/policy.lua.d/50-endpoints-config.lua
|
||||
+++ b/src/config/policy.lua.d/50-endpoints-config.lua
|
||||
@@ -4,36 +4,92 @@
|
||||
--[[
|
||||
|
||||
default_policy.policy.roles = {
|
||||
+ ["Capture"] = {
|
||||
+ ["alias"] = { "Multimedia", "Music", "Voice", "Capture" },
|
||||
+ ["priority"] = 25,
|
||||
+ ["action.default"] = "cork",
|
||||
+ ["action.capture"] = "mix",
|
||||
+ ["media.class"] = "Audio/Source",
|
||||
+ },
|
||||
["Multimedia"] = {
|
||||
["alias"] = { "Movie", "Music", "Game" },
|
||||
- ["priority"] = 10,
|
||||
- ["action.default"] = "mix",
|
||||
+ ["priority"] = 25,
|
||||
+ ["action.default"] = "cork",
|
||||
+ },
|
||||
+ ["Speech-Low"] = {
|
||||
+ ["priority"] = 30,
|
||||
+ ["action.default"] = "cork",
|
||||
+ ["action.Speech-Low"] = "mix",
|
||||
+ },
|
||||
+ ["Custom-Low"] = {
|
||||
+ ["priority"] = 35,
|
||||
+ ["action.default"] = "cork",
|
||||
+ ["action.Custom-Low"] = "mix",
|
||||
},
|
||||
- ["Notification"] = {
|
||||
- ["priority"] = 20,
|
||||
+ ["Navigation"] = {
|
||||
+ ["priority"] = 50,
|
||||
["action.default"] = "duck",
|
||||
- ["action.Notification"] = "mix",
|
||||
+ ["action.Navigation"] = "mix",
|
||||
},
|
||||
- ["Alert"] = {
|
||||
- ["priority"] = 30,
|
||||
+ ["Speech-High"] = {
|
||||
+ ["priority"] = 60,
|
||||
+ ["action.default"] = "cork",
|
||||
+ ["action.Speech-High"] = "mix",
|
||||
+ },
|
||||
+ ["Custom-High"] = {
|
||||
+ ["priority"] = 65,
|
||||
["action.default"] = "cork",
|
||||
- ["action.Alert"] = "mix",
|
||||
+ ["action.Custom-High"] = "mix",
|
||||
+ },
|
||||
+ ["Communication"] = {
|
||||
+ ["priority"] = 75,
|
||||
+ ["action.default"] = "cork",
|
||||
+ ["action.Communication"] = "mix",
|
||||
+ },
|
||||
+ ["Emergency"] = {
|
||||
+ ["alias"] = { "Alert" },
|
||||
+ ["priority"] = 99,
|
||||
+ ["action.default"] = "cork",
|
||||
+ ["action.Emergency"] = "mix",
|
||||
},
|
||||
}
|
||||
|
||||
default_policy.endpoints = {
|
||||
+ ["endpoint.capture"] = {
|
||||
+ ["media.class"] = "Audio/Source",
|
||||
+ ["role"] = "Capture",
|
||||
+ },
|
||||
["endpoint.multimedia"] = {
|
||||
["media.class"] = "Audio/Sink",
|
||||
["role"] = "Multimedia",
|
||||
},
|
||||
- ["endpoint.notifications"] = {
|
||||
+ ["endpoint.speech_low"] = {
|
||||
+ ["media.class"] = "Audio/Sink",
|
||||
+ ["role"] = "Speech-Low",
|
||||
+ },
|
||||
+ ["endpoint.custom_low"] = {
|
||||
["media.class"] = "Audio/Sink",
|
||||
- ["role"] = "Notification",
|
||||
+ ["role"] = "Custom-Low",
|
||||
},
|
||||
- ["endpoint.alert"] = {
|
||||
+ ["endpoint.navigation"] = {
|
||||
["media.class"] = "Audio/Sink",
|
||||
- ["role"] = "Alert",
|
||||
+ ["role"] = "Navigation",
|
||||
+ },
|
||||
+ ["endpoint.speech_high"] = {
|
||||
+ ["media.class"] = "Audio/Sink",
|
||||
+ ["role"] = "Speech-High",
|
||||
+ },
|
||||
+ ["endpoint.custom_high"] = {
|
||||
+ ["media.class"] = "Audio/Sink",
|
||||
+ ["role"] = "Custom-High",
|
||||
+ },
|
||||
+ ["endpoint.communication"] = {
|
||||
+ ["media.class"] = "Audio/Sink",
|
||||
+ ["role"] = "Communication",
|
||||
+ },
|
||||
+ ["endpoint.emergency"] = {
|
||||
+ ["media.class"] = "Audio/Sink",
|
||||
+ ["role"] = "Emergency",
|
||||
},
|
||||
}
|
||||
-
|
||||
-]]--
|
||||
+]]--
|
||||
\ No newline at end of file
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,43 +0,0 @@
|
||||
From 2e23d827793e56655ffd6be39b377578cef21661 Mon Sep 17 00:00:00 2001
|
||||
From: Ashok Sidipotu <ashok.sidipotu@collabora.com>
|
||||
Date: Tue, 11 Jan 2022 15:31:40 +0530
|
||||
Subject: [PATCH 06/14] policy-endpoint-client.lua: fix record with endpoints
|
||||
|
||||
The Role traversal of config data to take notice of the
|
||||
media class as well so that source and sink roles dont
|
||||
overstep on each other and pick up unexpected endpoints.
|
||||
---
|
||||
src/scripts/policy-endpoint-client.lua | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/scripts/policy-endpoint-client.lua b/src/scripts/policy-endpoint-client.lua
|
||||
index 6b96edf..e898e35 100644
|
||||
--- a/src/scripts/policy-endpoint-client.lua
|
||||
+++ b/src/scripts/policy-endpoint-client.lua
|
||||
@@ -37,10 +37,12 @@ function scheduleRescan ()
|
||||
end
|
||||
end
|
||||
|
||||
-function findRole(role)
|
||||
+function findRole(role, tmc)
|
||||
if role and not config.roles[role] then
|
||||
for r, p in pairs(config.roles) do
|
||||
- if type(p.alias) == "table" then
|
||||
+ -- default media class can be overridden in the role config data
|
||||
+ mc = p["media.class"] or "Audio/Sink"
|
||||
+ if (type(p.alias) == "table" and tmc == mc) then
|
||||
for i = 1, #(p.alias), 1 do
|
||||
if role == p.alias[i] then
|
||||
return r
|
||||
@@ -69,7 +71,7 @@ function findTargetEndpoint (node, media_class)
|
||||
end
|
||||
|
||||
-- find highest priority endpoint by role
|
||||
- media_role = findRole(node.properties["media.role"])
|
||||
+ media_role = findRole(node.properties["media.role"], target_media_class)
|
||||
for si_target_ep in endpoints_om:iterate {
|
||||
Constraint { "role", "=", media_role, type = "pw-global" },
|
||||
Constraint { "media.class", "=", target_media_class, type = "pw-global" },
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,47 +0,0 @@
|
||||
From 07a0a5b4043ab5982a82311e031ddfd6feb80da1 Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Tue, 11 Jan 2022 07:50:15 -0500
|
||||
Subject: [PATCH 07/14] default-nodes: check if the ports exist in rescan_om
|
||||
|
||||
Ports might not be ready in the node's port object manager yet.
|
||||
|
||||
Fixes #153 and #150
|
||||
---
|
||||
modules/module-default-nodes.c | 14 ++++++++++++--
|
||||
1 file changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/modules/module-default-nodes.c b/modules/module-default-nodes.c
|
||||
index 31eafcf..c45be2d 100644
|
||||
--- a/modules/module-default-nodes.c
|
||||
+++ b/modules/module-default-nodes.c
|
||||
@@ -307,7 +307,12 @@ nodes_ready (WpDefaultNodes * self)
|
||||
PW_KEY_DEVICE_ID, "=i", device_id, NULL);
|
||||
for (; wp_iterator_next (node_it, &node_val); g_value_unset (&node_val)) {
|
||||
WpPipewireObject *node = g_value_get_object (&node_val);
|
||||
- if (wp_node_get_n_ports (WP_NODE (node)) > 0)
|
||||
+ g_autoptr (WpPort) port =
|
||||
+ wp_object_manager_lookup (self->rescan_om,
|
||||
+ WP_TYPE_PORT, WP_CONSTRAINT_TYPE_PW_PROPERTY,
|
||||
+ PW_KEY_NODE_ID, "=u", wp_proxy_get_bound_id (WP_PROXY (node)),
|
||||
+ NULL);
|
||||
+ if (port)
|
||||
ready_nodes++;
|
||||
}
|
||||
|
||||
@@ -327,7 +332,12 @@ nodes_ready (WpDefaultNodes * self)
|
||||
WpPipewireObject *node = g_value_get_object (&node_val);
|
||||
const gchar *media_class = wp_pipewire_object_get_property (
|
||||
WP_PIPEWIRE_OBJECT (node), PW_KEY_MEDIA_CLASS);
|
||||
- if (wp_node_get_n_ports (WP_NODE (node)) == 0 &&
|
||||
+ g_autoptr (WpPort) port =
|
||||
+ wp_object_manager_lookup (self->rescan_om,
|
||||
+ WP_TYPE_PORT, WP_CONSTRAINT_TYPE_PW_PROPERTY,
|
||||
+ PW_KEY_NODE_ID, "=u", wp_proxy_get_bound_id (WP_PROXY (node)),
|
||||
+ NULL);
|
||||
+ if (!port &&
|
||||
(g_strcmp0 ("Audio/Source/Virtual", media_class) == 0 ||
|
||||
g_strcmp0 ("Video/Source/Virtual", media_class) == 0))
|
||||
return FALSE;
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,100 +0,0 @@
|
||||
From 40b16974cf800ce728c7f084fbdd8b30b7a9f03c Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Tue, 11 Jan 2022 11:27:33 -0500
|
||||
Subject: [PATCH 08/14] scripts: monitors: log warning if spa devices were not
|
||||
created successfully
|
||||
|
||||
Can happen if the user does not have the specific spa pluging installed.
|
||||
---
|
||||
src/scripts/monitors/alsa.lua | 10 +++++++---
|
||||
src/scripts/monitors/bluez.lua | 9 +++++++--
|
||||
src/scripts/monitors/libcamera.lua | 10 +++++++---
|
||||
src/scripts/monitors/v4l2.lua | 10 +++++++---
|
||||
4 files changed, 28 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/scripts/monitors/alsa.lua b/src/scripts/monitors/alsa.lua
|
||||
index be4648e..8d297c1 100644
|
||||
--- a/src/scripts/monitors/alsa.lua
|
||||
+++ b/src/scripts/monitors/alsa.lua
|
||||
@@ -177,9 +177,13 @@ end
|
||||
|
||||
function createDevice(parent, id, factory, properties)
|
||||
local device = SpaDevice(factory, properties)
|
||||
- device:connect("create-object", createNode)
|
||||
- device:activate(Feature.SpaDevice.ENABLED | Feature.Proxy.BOUND)
|
||||
- parent:store_managed_object(id, device)
|
||||
+ if device then
|
||||
+ device:connect("create-object", createNode)
|
||||
+ device:activate(Feature.SpaDevice.ENABLED | Feature.Proxy.BOUND)
|
||||
+ parent:store_managed_object(id, device)
|
||||
+ else
|
||||
+ Log.warning ("Failed to create '" .. factory .. "' device")
|
||||
+ end
|
||||
end
|
||||
|
||||
function prepareDevice(parent, id, type, factory, properties)
|
||||
diff --git a/src/scripts/monitors/bluez.lua b/src/scripts/monitors/bluez.lua
|
||||
index 172e013..4a54a7b 100644
|
||||
--- a/src/scripts/monitors/bluez.lua
|
||||
+++ b/src/scripts/monitors/bluez.lua
|
||||
@@ -109,8 +109,13 @@ function createDevice(parent, id, type, factory, properties)
|
||||
|
||||
-- create the device
|
||||
device = SpaDevice(factory, properties)
|
||||
- device:connect("create-object", createNode)
|
||||
- parent:store_managed_object(id, device)
|
||||
+ if device then
|
||||
+ device:connect("create-object", createNode)
|
||||
+ parent:store_managed_object(id, device)
|
||||
+ else
|
||||
+ Log.warning ("Failed to create '" .. factory .. "' device")
|
||||
+ return
|
||||
+ end
|
||||
end
|
||||
|
||||
Log.info(parent, string.format("%d, %s (%s): %s",
|
||||
diff --git a/src/scripts/monitors/libcamera.lua b/src/scripts/monitors/libcamera.lua
|
||||
index e6e3ed9..27c7459 100644
|
||||
--- a/src/scripts/monitors/libcamera.lua
|
||||
+++ b/src/scripts/monitors/libcamera.lua
|
||||
@@ -125,9 +125,13 @@ function createDevice(parent, id, type, factory, properties)
|
||||
|
||||
-- create the device
|
||||
local device = SpaDevice(factory, properties)
|
||||
- device:connect("create-object", createNode)
|
||||
- device:activate(Feature.SpaDevice.ENABLED | Feature.Proxy.BOUND)
|
||||
- parent:store_managed_object(id, device)
|
||||
+ if device then
|
||||
+ device:connect("create-object", createNode)
|
||||
+ device:activate(Feature.SpaDevice.ENABLED | Feature.Proxy.BOUND)
|
||||
+ parent:store_managed_object(id, device)
|
||||
+ else
|
||||
+ Log.warning ("Failed to create '" .. factory .. "' device")
|
||||
+ end
|
||||
end
|
||||
|
||||
monitor = SpaDevice("api.libcamera.enum.manager", config.properties or {})
|
||||
diff --git a/src/scripts/monitors/v4l2.lua b/src/scripts/monitors/v4l2.lua
|
||||
index fd9a20d..102eb81 100644
|
||||
--- a/src/scripts/monitors/v4l2.lua
|
||||
+++ b/src/scripts/monitors/v4l2.lua
|
||||
@@ -125,9 +125,13 @@ function createDevice(parent, id, type, factory, properties)
|
||||
|
||||
-- create the device
|
||||
local device = SpaDevice(factory, properties)
|
||||
- device:connect("create-object", createNode)
|
||||
- device:activate(Feature.SpaDevice.ENABLED | Feature.Proxy.BOUND)
|
||||
- parent:store_managed_object(id, device)
|
||||
+ if device then
|
||||
+ device:connect("create-object", createNode)
|
||||
+ device:activate(Feature.SpaDevice.ENABLED | Feature.Proxy.BOUND)
|
||||
+ parent:store_managed_object(id, device)
|
||||
+ else
|
||||
+ Log.warning ("Failed to create '" .. factory .. "' device")
|
||||
+ end
|
||||
end
|
||||
|
||||
monitor = SpaDevice("api.v4l2.enum.udev", config.properties or {})
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,124 +0,0 @@
|
||||
From 75281d86817a090147a15711266709114b15aefa Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Tue, 11 Jan 2022 13:59:58 -0500
|
||||
Subject: [PATCH 09/14] default-nodes: check if default node has available
|
||||
route
|
||||
|
||||
Fixes #145
|
||||
---
|
||||
modules/module-default-nodes.c | 85 ++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 85 insertions(+)
|
||||
|
||||
diff --git a/modules/module-default-nodes.c b/modules/module-default-nodes.c
|
||||
index c45be2d..354c474 100644
|
||||
--- a/modules/module-default-nodes.c
|
||||
+++ b/modules/module-default-nodes.c
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
#include <wp/wp.h>
|
||||
#include <errno.h>
|
||||
+#include <pipewire/pipewire.h>
|
||||
#include <pipewire/keys.h>
|
||||
|
||||
#define COMPILING_MODULE_DEFAULT_NODES 1
|
||||
@@ -97,6 +98,87 @@ timer_start (WpDefaultNodes *self)
|
||||
}
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+node_has_available_routes (WpDefaultNodes * self, WpNode *node)
|
||||
+{
|
||||
+ const gchar *dev_id_str = wp_pipewire_object_get_property (
|
||||
+ WP_PIPEWIRE_OBJECT (node), PW_KEY_DEVICE_ID);
|
||||
+ const gchar *cpd_str = wp_pipewire_object_get_property (
|
||||
+ WP_PIPEWIRE_OBJECT (node), "card.profile.device");
|
||||
+ gint dev_id = dev_id_str ? atoi (dev_id_str) : -1;
|
||||
+ gint cpd = cpd_str ? atoi (cpd_str) : -1;
|
||||
+ g_autoptr (WpDevice) device = NULL;
|
||||
+
|
||||
+ if (dev_id == -1 || cpd == -1)
|
||||
+ return TRUE;
|
||||
+
|
||||
+ /* Get the device */
|
||||
+ device = wp_object_manager_lookup (self->rescan_om, WP_TYPE_DEVICE,
|
||||
+ WP_CONSTRAINT_TYPE_G_PROPERTY, "bound-id", "=i", dev_id, NULL);
|
||||
+ if (!device)
|
||||
+ return TRUE;
|
||||
+
|
||||
+ /* Check if the current device route supports the node card device profile */
|
||||
+ {
|
||||
+ g_autoptr (WpIterator) routes = NULL;
|
||||
+ g_auto (GValue) val = G_VALUE_INIT;
|
||||
+ routes = wp_pipewire_object_enum_params_sync (WP_PIPEWIRE_OBJECT (device),
|
||||
+ "Route", NULL);
|
||||
+ for (; wp_iterator_next (routes, &val); g_value_unset (&val)) {
|
||||
+ WpSpaPod *route = g_value_get_boxed (&val);
|
||||
+ gint route_device = -1;
|
||||
+ guint32 route_avail = SPA_PARAM_AVAILABILITY_unknown;
|
||||
+
|
||||
+ if (!wp_spa_pod_get_object (route, NULL,
|
||||
+ "device", "i", &route_device,
|
||||
+ "available", "?I", &route_avail,
|
||||
+ NULL))
|
||||
+ continue;
|
||||
+
|
||||
+ if (route_device != cpd)
|
||||
+ continue;
|
||||
+
|
||||
+ if (route_avail == SPA_PARAM_AVAILABILITY_no)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* Check if available routes support the node card device profile */
|
||||
+ {
|
||||
+ g_autoptr (WpIterator) routes = NULL;
|
||||
+ g_auto (GValue) val = G_VALUE_INIT;
|
||||
+ routes = wp_pipewire_object_enum_params_sync (WP_PIPEWIRE_OBJECT (device),
|
||||
+ "EnumRoute", NULL);
|
||||
+ for (; wp_iterator_next (routes, &val); g_value_unset (&val)) {
|
||||
+ WpSpaPod *route = g_value_get_boxed (&val);
|
||||
+ guint32 route_avail = SPA_PARAM_AVAILABILITY_unknown;
|
||||
+ g_autoptr (WpSpaPod) route_devices = NULL;
|
||||
+
|
||||
+ if (!wp_spa_pod_get_object (route, NULL,
|
||||
+ "available", "?I", &route_avail,
|
||||
+ "devices", "?P", &route_devices,
|
||||
+ NULL))
|
||||
+ continue;
|
||||
+
|
||||
+ {
|
||||
+ g_autoptr (WpIterator) it = wp_spa_pod_new_iterator (route_devices);
|
||||
+ g_auto (GValue) v = G_VALUE_INIT;
|
||||
+ for (; wp_iterator_next (it, &v); g_value_unset (&v)) {
|
||||
+ gint32 *d = (gint32 *)g_value_get_pointer (&v);
|
||||
+ if (d && *d == cpd) {
|
||||
+ if (route_avail != SPA_PARAM_AVAILABILITY_no)
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
static WpNode *
|
||||
find_best_media_class_node (WpDefaultNodes * self, const gchar *media_class,
|
||||
const gchar *node_name, WpDirection direction, gint *priority)
|
||||
@@ -124,6 +206,9 @@ find_best_media_class_node (WpDefaultNodes * self, const gchar *media_class,
|
||||
WP_PIPEWIRE_OBJECT (node), PW_KEY_PRIORITY_SESSION);
|
||||
gint prio = prio_str ? atoi (prio_str) : -1;
|
||||
|
||||
+ if (!node_has_available_routes (self, node))
|
||||
+ continue;
|
||||
+
|
||||
if (name && node_name && g_strcmp0 (name, node_name) == 0)
|
||||
prio += 10000;
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,62 +0,0 @@
|
||||
From bbd23fa3e3a4e13c86bf37b36e7d19d8dcaff771 Mon Sep 17 00:00:00 2001
|
||||
From: mazunki <rolferen@gmail.com>
|
||||
Date: Wed, 12 Jan 2022 12:13:08 +0100
|
||||
Subject: [PATCH 10/14] added support for disabling nodes and devices through
|
||||
conf
|
||||
|
||||
---
|
||||
src/config/main.lua.d/50-alsa-config.lua | 13 +++++++++++++
|
||||
src/scripts/monitors/alsa.lua | 6 ++++++
|
||||
2 files changed, 19 insertions(+)
|
||||
|
||||
diff --git a/src/config/main.lua.d/50-alsa-config.lua b/src/config/main.lua.d/50-alsa-config.lua
|
||||
index 9259cf5..23f8ca1 100644
|
||||
--- a/src/config/main.lua.d/50-alsa-config.lua
|
||||
+++ b/src/config/main.lua.d/50-alsa-config.lua
|
||||
@@ -17,6 +17,19 @@ alsa_monitor.properties = {
|
||||
|
||||
alsa_monitor.rules = {
|
||||
-- An array of matches/actions to evaluate.
|
||||
+ --
|
||||
+ -- If you want to disable some devices or nodes, you can apply properties per device as the following example.
|
||||
+ -- The name can be found by running pw-cli ls Device, or pw-cli dump Device
|
||||
+ --{
|
||||
+ -- matches = {
|
||||
+ -- {
|
||||
+ -- { "device.name", "matches", "name_of_some_disabled_card" },
|
||||
+ -- },
|
||||
+ -- },
|
||||
+ -- apply_properties = {
|
||||
+ -- ["device.disabled"] = true,
|
||||
+ -- },
|
||||
+ --}
|
||||
{
|
||||
-- Rules for matching a device or node. It is an array of
|
||||
-- properties that all need to match the regexp. If any of the
|
||||
diff --git a/src/scripts/monitors/alsa.lua b/src/scripts/monitors/alsa.lua
|
||||
index 8d297c1..c917a5c 100644
|
||||
--- a/src/scripts/monitors/alsa.lua
|
||||
+++ b/src/scripts/monitors/alsa.lua
|
||||
@@ -168,6 +168,9 @@ function createNode(parent, id, type, factory, properties)
|
||||
|
||||
-- apply properties from config.rules
|
||||
rulesApplyProperties(properties)
|
||||
+ if properties["node.disabled"] then
|
||||
+ return
|
||||
+ end
|
||||
|
||||
-- create the node
|
||||
local node = Node("adapter", properties)
|
||||
@@ -254,6 +257,9 @@ function prepareDevice(parent, id, type, factory, properties)
|
||||
|
||||
-- apply properties from config.rules
|
||||
rulesApplyProperties(properties)
|
||||
+ if properties["device.disabled"] then
|
||||
+ return
|
||||
+ end
|
||||
|
||||
-- override the device factory to use ACP
|
||||
if properties["api.alsa.use-acp"] then
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,53 +0,0 @@
|
||||
From b4245d64c5117015fa293148273f86bdfbeb494f Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Wed, 12 Jan 2022 13:39:57 -0500
|
||||
Subject: [PATCH 11/14] default-nodes: add more logs
|
||||
|
||||
---
|
||||
modules/module-default-nodes.c | 14 ++++++++++++--
|
||||
1 file changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/modules/module-default-nodes.c b/modules/module-default-nodes.c
|
||||
index 354c474..ac9a87b 100644
|
||||
--- a/modules/module-default-nodes.c
|
||||
+++ b/modules/module-default-nodes.c
|
||||
@@ -401,8 +401,13 @@ nodes_ready (WpDefaultNodes * self)
|
||||
ready_nodes++;
|
||||
}
|
||||
|
||||
- if (ready_nodes < total_nodes)
|
||||
+ if (ready_nodes < total_nodes) {
|
||||
+ const gchar *device_name = wp_pipewire_object_get_property (
|
||||
+ WP_PIPEWIRE_OBJECT (device), PW_KEY_DEVICE_NAME);
|
||||
+ wp_debug_object (self, "device '%s' is not ready (%d/%d)", device_name,
|
||||
+ ready_nodes, total_nodes);
|
||||
return FALSE;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -424,8 +429,12 @@ nodes_ready (WpDefaultNodes * self)
|
||||
NULL);
|
||||
if (!port &&
|
||||
(g_strcmp0 ("Audio/Source/Virtual", media_class) == 0 ||
|
||||
- g_strcmp0 ("Video/Source/Virtual", media_class) == 0))
|
||||
+ g_strcmp0 ("Video/Source/Virtual", media_class) == 0)) {
|
||||
+ const gchar *node_name = wp_pipewire_object_get_property (
|
||||
+ WP_PIPEWIRE_OBJECT (node), PW_KEY_NODE_NAME);
|
||||
+ wp_debug_object (self, "virtual node '%s' is not ready", node_name);
|
||||
return FALSE;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -465,6 +474,7 @@ schedule_rescan (WpDefaultNodes * self)
|
||||
g_autoptr (WpCore) core = wp_object_get_core (WP_OBJECT (self));
|
||||
g_return_if_fail (core);
|
||||
|
||||
+ wp_debug_object (self, "scheduling default nodes rescan");
|
||||
wp_core_sync_closure (core, NULL, g_cclosure_new_object (
|
||||
G_CALLBACK (sync_rescan), G_OBJECT (self)));
|
||||
}
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,135 +0,0 @@
|
||||
From 8844cfb0743f3ce1b447120f4c012cfdae9c2aec Mon Sep 17 00:00:00 2001
|
||||
From: Julian Bouzas <julian.bouzas@collabora.com>
|
||||
Date: Wed, 12 Jan 2022 14:07:59 -0500
|
||||
Subject: [PATCH 12/14] device-activation: show device name in logs
|
||||
|
||||
---
|
||||
modules/module-device-activation.c | 29 +++++++++++++++++------------
|
||||
1 file changed, 17 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/modules/module-device-activation.c b/modules/module-device-activation.c
|
||||
index a28f2ea..98978a2 100644
|
||||
--- a/modules/module-device-activation.c
|
||||
+++ b/modules/module-device-activation.c
|
||||
@@ -31,6 +31,7 @@ G_DEFINE_TYPE (WpDeviceActivation, wp_device_activation, WP_TYPE_PLUGIN)
|
||||
static void
|
||||
set_device_profile (WpDeviceActivation *self, WpPipewireObject *device, gint index)
|
||||
{
|
||||
+ const gchar *dn = wp_pipewire_object_get_property (device, PW_KEY_DEVICE_NAME);
|
||||
gpointer active_ptr = NULL;
|
||||
|
||||
g_return_if_fail (device);
|
||||
@@ -38,7 +39,7 @@ set_device_profile (WpDeviceActivation *self, WpPipewireObject *device, gint ind
|
||||
/* Make sure the profile we want to set is not active */
|
||||
active_ptr = g_object_get_qdata (G_OBJECT (device), active_profile_quark ());
|
||||
if (active_ptr && GPOINTER_TO_INT (active_ptr) - 1 == index) {
|
||||
- wp_info_object (self, "profile %d is already active", index);
|
||||
+ wp_info_object (self, "profile %d is already active in %s", index, dn);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -49,8 +50,7 @@ set_device_profile (WpDeviceActivation *self, WpPipewireObject *device, gint ind
|
||||
"index", "i", index,
|
||||
NULL));
|
||||
|
||||
- wp_info_object (self, "profile %d set on device " WP_OBJECT_FORMAT, index,
|
||||
- WP_OBJECT_ARGS (device));
|
||||
+ wp_info_object (self, "profile %d set on device %s", index, dn);
|
||||
}
|
||||
|
||||
static gint
|
||||
@@ -184,6 +184,7 @@ static gint
|
||||
handle_active_profile (WpDeviceActivation *self, WpPipewireObject *proxy,
|
||||
WpIterator *profiles, gboolean *changed, gboolean *off)
|
||||
{
|
||||
+ const gchar *dn = wp_pipewire_object_get_property (proxy, PW_KEY_DEVICE_NAME);
|
||||
gpointer active_ptr = NULL;
|
||||
gint new_active = -1;
|
||||
gint local_changed = FALSE;
|
||||
@@ -191,7 +192,7 @@ handle_active_profile (WpDeviceActivation *self, WpPipewireObject *proxy,
|
||||
/* Find the new active profile */
|
||||
new_active = find_active_profile (proxy, off);
|
||||
if (new_active < 0) {
|
||||
- wp_info_object (self, "cannot find active profile");
|
||||
+ wp_info_object (self, "cannot find active profile in %s", dn);
|
||||
return new_active;
|
||||
}
|
||||
|
||||
@@ -199,7 +200,7 @@ handle_active_profile (WpDeviceActivation *self, WpPipewireObject *proxy,
|
||||
active_ptr = g_object_get_qdata (G_OBJECT (proxy), active_profile_quark ());
|
||||
local_changed = !active_ptr || GPOINTER_TO_INT (active_ptr) - 1 != new_active;
|
||||
if (local_changed) {
|
||||
- wp_info_object (self, "active profile changed to: %d", new_active);
|
||||
+ wp_info_object (self, "active profile changed to %d in %s", new_active, dn);
|
||||
g_object_set_qdata (G_OBJECT (proxy), active_profile_quark (),
|
||||
GINT_TO_POINTER (new_active + 1));
|
||||
}
|
||||
@@ -214,6 +215,7 @@ static gint
|
||||
handle_best_profile (WpDeviceActivation *self, WpPipewireObject *proxy,
|
||||
WpIterator *profiles, gboolean *changed)
|
||||
{
|
||||
+ const gchar *dn = wp_pipewire_object_get_property (proxy, PW_KEY_DEVICE_NAME);
|
||||
gpointer best_ptr = NULL;
|
||||
gint new_best = -1;
|
||||
gboolean local_changed = FALSE;
|
||||
@@ -221,7 +223,7 @@ handle_best_profile (WpDeviceActivation *self, WpPipewireObject *proxy,
|
||||
/* Get the new best profile index */
|
||||
new_best = find_best_profile (profiles);
|
||||
if (new_best < 0) {
|
||||
- wp_info_object (self, "cannot find best profile");
|
||||
+ wp_info_object (self, "cannot find best profile in %s", dn);
|
||||
return new_best;
|
||||
}
|
||||
|
||||
@@ -229,7 +231,7 @@ handle_best_profile (WpDeviceActivation *self, WpPipewireObject *proxy,
|
||||
best_ptr = g_object_get_qdata (G_OBJECT (proxy), best_profile_quark ());
|
||||
local_changed = !best_ptr || GPOINTER_TO_INT (best_ptr) - 1 != new_best;
|
||||
if (local_changed) {
|
||||
- wp_info_object (self, "found new best profile: %d", new_best);
|
||||
+ wp_info_object (self, "best profile changed to %d in %s", new_best, dn);
|
||||
g_object_set_qdata (G_OBJECT (proxy), best_profile_quark (),
|
||||
GINT_TO_POINTER (new_best + 1));
|
||||
}
|
||||
@@ -244,6 +246,7 @@ static void
|
||||
handle_enum_profiles (WpDeviceActivation *self, WpPipewireObject *proxy,
|
||||
WpIterator *profiles)
|
||||
{
|
||||
+ const gchar *dn = wp_pipewire_object_get_property (proxy, PW_KEY_DEVICE_NAME);
|
||||
gint active_idx = FALSE, best_idx = FALSE;
|
||||
gboolean active_changed = FALSE, best_changed = FALSE, active_off = FALSE;
|
||||
|
||||
@@ -256,14 +259,16 @@ handle_enum_profiles (WpDeviceActivation *self, WpPipewireObject *proxy,
|
||||
default_idx = find_default_profile (self, proxy, profiles, &default_avail);
|
||||
if (default_idx >= 0) {
|
||||
if (default_avail == SPA_PARAM_AVAILABILITY_no) {
|
||||
- wp_info_object (self, "default profile %d unavailable", default_idx);
|
||||
+ wp_info_object (self, "default profile %d unavailable for %s",
|
||||
+ default_idx, dn);
|
||||
} else {
|
||||
- wp_info_object (self, "found default profile: %d", default_idx);
|
||||
+ wp_info_object (self, "found default profile %d for %s", default_idx,
|
||||
+ dn);
|
||||
set_device_profile (self, proxy, default_idx);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
- wp_info_object (self, "cannot find default profile");
|
||||
+ wp_info_object (self, "cannot find default profile for %s", dn);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,9 +277,9 @@ handle_enum_profiles (WpDeviceActivation *self, WpPipewireObject *proxy,
|
||||
if (best_idx >= 0 && best_changed)
|
||||
set_device_profile (self, proxy, best_idx);
|
||||
else if (best_idx >= 0)
|
||||
- wp_info_object (self, "best profile already set: %d", best_idx);
|
||||
+ wp_info_object (self, "best profile %d already set in %s", best_idx, dn);
|
||||
else
|
||||
- wp_info_object (self, "best profile not found");
|
||||
+ wp_info_object (self, "best profile not found in %s", dn);
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,139 +0,0 @@
|
||||
From 18bc3d3596a1fac8ab21361160ac4e9c6ec37c89 Mon Sep 17 00:00:00 2001
|
||||
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
|
||||
Date: Thu, 13 Jan 2022 11:08:34 +0200
|
||||
Subject: [PATCH 13/14] scripts: fallback to empty config table if args were
|
||||
not passed from the config files
|
||||
|
||||
Fixes #158
|
||||
---
|
||||
src/scripts/access/access-default.lua | 2 +-
|
||||
src/scripts/create-item.lua | 2 +-
|
||||
src/scripts/default-routes.lua | 2 +-
|
||||
src/scripts/monitors/alsa-midi.lua | 2 +-
|
||||
src/scripts/monitors/alsa.lua | 2 +-
|
||||
src/scripts/policy-endpoint-client-links.lua | 2 +-
|
||||
src/scripts/policy-endpoint-client.lua | 2 +-
|
||||
src/scripts/policy-endpoint-device.lua | 2 +-
|
||||
src/scripts/policy-node.lua | 2 +-
|
||||
9 files changed, 9 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/scripts/access/access-default.lua b/src/scripts/access/access-default.lua
|
||||
index 3c27e90..0fac87b 100644
|
||||
--- a/src/scripts/access/access-default.lua
|
||||
+++ b/src/scripts/access/access-default.lua
|
||||
@@ -5,7 +5,7 @@
|
||||
--
|
||||
-- SPDX-License-Identifier: MIT
|
||||
|
||||
-local config = ...
|
||||
+local config = ... or {}
|
||||
|
||||
-- preprocess rules and create Interest objects
|
||||
for _, r in ipairs(config.rules or {}) do
|
||||
diff --git a/src/scripts/create-item.lua b/src/scripts/create-item.lua
|
||||
index ad4a6f6..f2c7562 100644
|
||||
--- a/src/scripts/create-item.lua
|
||||
+++ b/src/scripts/create-item.lua
|
||||
@@ -6,7 +6,7 @@
|
||||
-- SPDX-License-Identifier: MIT
|
||||
|
||||
-- Receive script arguments from config.lua
|
||||
-local config = ...
|
||||
+local config = ... or {}
|
||||
|
||||
items = {}
|
||||
|
||||
diff --git a/src/scripts/default-routes.lua b/src/scripts/default-routes.lua
|
||||
index 953cba3..075f5d6 100644
|
||||
--- a/src/scripts/default-routes.lua
|
||||
+++ b/src/scripts/default-routes.lua
|
||||
@@ -8,7 +8,7 @@
|
||||
--
|
||||
-- SPDX-License-Identifier: MIT
|
||||
|
||||
-local config = ...
|
||||
+local config = ... or {}
|
||||
|
||||
-- whether to store state on the file system
|
||||
use_persistent_storage = config["use-persistent-storage"] or false
|
||||
diff --git a/src/scripts/monitors/alsa-midi.lua b/src/scripts/monitors/alsa-midi.lua
|
||||
index bf4fde4..0efee34 100644
|
||||
--- a/src/scripts/monitors/alsa-midi.lua
|
||||
+++ b/src/scripts/monitors/alsa-midi.lua
|
||||
@@ -6,7 +6,7 @@
|
||||
-- SPDX-License-Identifier: MIT
|
||||
|
||||
-- Receive script arguments from config.lua
|
||||
-local config = ...
|
||||
+local config = ... or {}
|
||||
|
||||
-- ensure config.properties is not nil
|
||||
config.properties = config.properties or {}
|
||||
diff --git a/src/scripts/monitors/alsa.lua b/src/scripts/monitors/alsa.lua
|
||||
index c917a5c..3e8eda8 100644
|
||||
--- a/src/scripts/monitors/alsa.lua
|
||||
+++ b/src/scripts/monitors/alsa.lua
|
||||
@@ -6,7 +6,7 @@
|
||||
-- SPDX-License-Identifier: MIT
|
||||
|
||||
-- Receive script arguments from config.lua
|
||||
-local config = ...
|
||||
+local config = ... or {}
|
||||
|
||||
-- ensure config.properties is not nil
|
||||
config.properties = config.properties or {}
|
||||
diff --git a/src/scripts/policy-endpoint-client-links.lua b/src/scripts/policy-endpoint-client-links.lua
|
||||
index 1a93294..eaa1c08 100644
|
||||
--- a/src/scripts/policy-endpoint-client-links.lua
|
||||
+++ b/src/scripts/policy-endpoint-client-links.lua
|
||||
@@ -5,7 +5,7 @@
|
||||
--
|
||||
-- SPDX-License-Identifier: MIT
|
||||
|
||||
-local config = ...
|
||||
+local config = ... or {}
|
||||
config.roles = config.roles or {}
|
||||
config["duck.level"] = config["duck.level"] or 0.3
|
||||
|
||||
diff --git a/src/scripts/policy-endpoint-client.lua b/src/scripts/policy-endpoint-client.lua
|
||||
index e898e35..487d4b4 100644
|
||||
--- a/src/scripts/policy-endpoint-client.lua
|
||||
+++ b/src/scripts/policy-endpoint-client.lua
|
||||
@@ -6,7 +6,7 @@
|
||||
-- SPDX-License-Identifier: MIT
|
||||
|
||||
-- Receive script arguments from config.lua
|
||||
-local config = ...
|
||||
+local config = ... or {}
|
||||
config.roles = config.roles or {}
|
||||
|
||||
local self = {}
|
||||
diff --git a/src/scripts/policy-endpoint-device.lua b/src/scripts/policy-endpoint-device.lua
|
||||
index b726cb3..71f7772 100644
|
||||
--- a/src/scripts/policy-endpoint-device.lua
|
||||
+++ b/src/scripts/policy-endpoint-device.lua
|
||||
@@ -6,7 +6,7 @@
|
||||
-- SPDX-License-Identifier: MIT
|
||||
|
||||
-- Receive script arguments from config.lua
|
||||
-local config = ...
|
||||
+local config = ... or {}
|
||||
|
||||
-- ensure config.move and config.follow are not nil
|
||||
config.move = config.move or false
|
||||
diff --git a/src/scripts/policy-node.lua b/src/scripts/policy-node.lua
|
||||
index 9df5007..51a5549 100644
|
||||
--- a/src/scripts/policy-node.lua
|
||||
+++ b/src/scripts/policy-node.lua
|
||||
@@ -6,7 +6,7 @@
|
||||
-- SPDX-License-Identifier: MIT
|
||||
|
||||
-- Receive script arguments from config.lua
|
||||
-local config = ...
|
||||
+local config = ... or {}
|
||||
|
||||
-- ensure config.move and config.follow are not nil
|
||||
config.move = config.move or false
|
||||
--
|
||||
2.34.1
|
||||
|
2
_service
2
_service
@ -4,7 +4,7 @@
|
||||
<param name="scm">git</param>
|
||||
<param name="url">https://gitlab.freedesktop.org/pipewire/wireplumber.git</param>
|
||||
<param name="changesgenerate">enable</param>
|
||||
<param name="revision">0.4.6</param>
|
||||
<param name="revision">0.4.7</param>
|
||||
<param name="versionformat">@PARENT_TAG@</param>
|
||||
<!--
|
||||
<param name="versionprefix">0.4.6+git</param>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<servicedata>
|
||||
<service name="tar_scm">
|
||||
<param name="url">https://gitlab.freedesktop.org/pipewire/wireplumber.git</param>
|
||||
<param name="changesrevision">9a733293d7d39554d0c9b04741a64ece023dbac6</param></service></servicedata>
|
||||
<param name="changesrevision">afb177b5e0840d54dc41d02920702c3c9580ce02</param></service></servicedata>
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7c6203487d0e5324f31ce681b60a958ce6f7e4ada21c85fd27ec1ae1db164968
|
||||
size 1798668
|
3
wireplumber-0.4.7.obscpio
Normal file
3
wireplumber-0.4.7.obscpio
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4731fd072ee13bbdaf270b10af3639a8f8abfd8aa43d9062fa46783584edb23b
|
||||
size 1806348
|
@ -1,77 +1,5 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Jan 25 10:33:09 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- Add two patches from upstream:
|
||||
* 0012-device-activation-show-device-name-in-logs.patch
|
||||
* 0013-scripts-fallback-to-empty-config-table-if-args-were-.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jan 25 08:34:28 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- Add another patch from upstream:
|
||||
* 0011-default-nodes-add-more-logs.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jan 24 18:32:54 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- So far it passed openQA, so let's try adding two more patches:
|
||||
* 0009-default-nodes-check-if-default-node-has-available-ro.patch
|
||||
* 0010-added-support-for-disabling-nodes-and-devices-throug.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jan 24 15:40:22 UTC 2022 - alarrosa@suse.com
|
||||
|
||||
- Back to version 0.4.6, and add patches incrementally
|
||||
to bisect it and find the issue
|
||||
* 0001-policy-node-fix-typo-when-finding-best-target.patch
|
||||
* 0002-policy-node-schedule-a-rescan-without-timeout-if-def.patch
|
||||
* 0003-policy-node-find-best-linkable-if-default-one-cannot.patch
|
||||
* 0004-spa-pod-fix-different-architecture-errors-for-boolea.patch
|
||||
* 0005-config-update-the-endpoints-config.patch
|
||||
* 0006-policy-endpoint-client.lua-fix-record-with-endpoints.patch
|
||||
* 0007-default-nodes-check-if-the-ports-exist-in-rescan_om.patch
|
||||
* 0008-scripts-monitors-log-warning-if-spa-devices-were-not.patch
|
||||
- Remove revert from previous change:
|
||||
* 0001-reversed-default-nodes-check-if-default-node-has-available-ro.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jan 24 11:08:04 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- Since wireplumber keeps failing to run in openQA since 0.4.7,
|
||||
let's drop all patches added since then:
|
||||
* 0001-core-add-API-to-check-if-running-in-a-virtual-machine.patch
|
||||
* 0002-alsa-monitor-set-period-size-and-headroom-props-if-running-in-virtual-machine.patch
|
||||
* 0002-default-nodes-handle-nodes-without-Routes.patch
|
||||
- And revert one of the commits introduced in 0.4.7:
|
||||
* 0001-reversed-default-nodes-check-if-default-node-has-available-ro.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Jan 21 11:41:03 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- Remove patch that was reverted upstream:
|
||||
* 0001-default-nodes-increase-priority-if-node-has-available-routes.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Jan 19 16:46:29 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- Add patches from a MR to fix glfo#pipewire/wireplumber#162 (fix
|
||||
audio in virtual machines with pipewire):
|
||||
* 0001-core-add-API-to-check-if-running-in-a-virtual-machine.patch
|
||||
* 0002-alsa-monitor-set-period-size-and-headroom-props-if-running-in-virtual-machine.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Jan 14 15:59:55 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- Add patch from upstream to fix a problem changing the default
|
||||
device:
|
||||
* 0001-default-nodes-increase-priority-if-node-has-available-routes.patch
|
||||
|
||||
- Add patch from upstream to fix selection of Pro Audio nodes
|
||||
as default nodes:
|
||||
* 0002-default-nodes-handle-nodes-without-Routes.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jan 13 09:56:28 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||
Tue Jan 25 15:08:59 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
||||
- Update to version 0.4.7:
|
||||
* Fixed a regression in 0.4.6 that caused the selection of the
|
||||
@ -93,6 +21,9 @@ Thu Jan 13 09:56:28 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||
- Drop patches already included upstream:
|
||||
* 0001-policy-node-schedule-rescan-without-timeout-if-defined-target-is-not-found.patch
|
||||
* 0002-policy-node-find-best-linkable-if-default-one-cannot-be-linked.patch
|
||||
- Add patch from upstream to fix selection of Pro Audio nodes
|
||||
as default nodes:
|
||||
* 0001-default-nodes-handle-nodes-without-Routes.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jan 10 09:50:15 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
|
||||
|
@ -1,4 +1,4 @@
|
||||
name: wireplumber
|
||||
version: 0.4.6
|
||||
mtime: 1641485511
|
||||
commit: 9a733293d7d39554d0c9b04741a64ece023dbac6
|
||||
version: 0.4.7
|
||||
mtime: 1642066064
|
||||
commit: afb177b5e0840d54dc41d02920702c3c9580ce02
|
||||
|
@ -22,7 +22,7 @@
|
||||
%define sover 0
|
||||
%define libwireplumber libwireplumber-%{apiver_str}-%{sover}
|
||||
Name: wireplumber
|
||||
Version: 0.4.6
|
||||
Version: 0.4.7
|
||||
Release: 0
|
||||
Summary: Session / policy manager implementation for PipeWire
|
||||
License: MIT
|
||||
@ -30,19 +30,7 @@ Group: Development/Libraries/C and C++
|
||||
URL: https://gitlab.freedesktop.org/pipewire/wireplumber
|
||||
Source0: wireplumber-%{version}.tar.xz
|
||||
Source1: split-config-file.py
|
||||
Patch1: 0001-policy-node-fix-typo-when-finding-best-target.patch
|
||||
Patch2: 0002-policy-node-schedule-a-rescan-without-timeout-if-def.patch
|
||||
Patch3: 0003-policy-node-find-best-linkable-if-default-one-cannot.patch
|
||||
Patch4: 0004-spa-pod-fix-different-architecture-errors-for-boolea.patch
|
||||
Patch5: 0005-config-update-the-endpoints-config.patch
|
||||
Patch6: 0006-policy-endpoint-client.lua-fix-record-with-endpoints.patch
|
||||
Patch7: 0007-default-nodes-check-if-the-ports-exist-in-rescan_om.patch
|
||||
Patch8: 0008-scripts-monitors-log-warning-if-spa-devices-were-not.patch
|
||||
Patch9: 0009-default-nodes-check-if-default-node-has-available-ro.patch
|
||||
Patch10: 0010-added-support-for-disabling-nodes-and-devices-throug.patch
|
||||
Patch11: 0011-default-nodes-add-more-logs.patch
|
||||
Patch12: 0012-device-activation-show-device-name-in-logs.patch
|
||||
Patch13: 0013-scripts-fallback-to-empty-config-table-if-args-were-.patch
|
||||
Patch0: 0001-default-nodes-handle-nodes-without-Routes.patch
|
||||
|
||||
Patch100: reduce-meson-required-version.patch
|
||||
# docs
|
||||
|
Loading…
Reference in New Issue
Block a user