forked from pool/wireplumber
Accepting request 948445 from home:alarrosa:branches:multimedia:libs
- 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 OBS-URL: https://build.opensuse.org/request/show/948445 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/wireplumber?expand=0&rev=24
This commit is contained in:
parent
d9538f3c4f
commit
23c5d9eadf
25
0001-policy-node-fix-typo-when-finding-best-target.patch
Normal file
25
0001-policy-node-fix-typo-when-finding-best-target.patch
Normal file
@ -0,0 +1,25 @@
|
||||
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,108 +0,0 @@
|
||||
--- b/modules/module-default-nodes.c
|
||||
+++ a/modules/module-default-nodes.c
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
#include <wp/wp.h>
|
||||
#include <errno.h>
|
||||
-#include <pipewire/pipewire.h>
|
||||
#include <pipewire/keys.h>
|
||||
|
||||
#define COMPILING_MODULE_DEFAULT_NODES 1
|
||||
@@ -98,87 +97,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
-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)
|
||||
@@ -206,9 +124,6 @@
|
||||
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;
|
||||
|
@ -0,0 +1,48 @@
|
||||
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
|
||||
|
@ -0,0 +1,46 @@
|
||||
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
|
||||
|
@ -0,0 +1,39 @@
|
||||
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
|
||||
|
126
0005-config-update-the-endpoints-config.patch
Normal file
126
0005-config-update-the-endpoints-config.patch
Normal file
@ -0,0 +1,126 @@
|
||||
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
|
||||
|
@ -0,0 +1,43 @@
|
||||
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
|
||||
|
@ -0,0 +1,47 @@
|
||||
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
|
||||
|
100
0008-scripts-monitors-log-warning-if-spa-devices-were-not.patch
Normal file
100
0008-scripts-monitors-log-warning-if-spa-devices-were-not.patch
Normal file
@ -0,0 +1,100 @@
|
||||
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
|
||||
|
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.7</param>
|
||||
<param name="revision">0.4.6</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">afb177b5e0840d54dc41d02920702c3c9580ce02</param></service></servicedata>
|
||||
<param name="changesrevision">9a733293d7d39554d0c9b04741a64ece023dbac6</param></service></servicedata>
|
3
wireplumber-0.4.6.obscpio
Normal file
3
wireplumber-0.4.6.obscpio
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7c6203487d0e5324f31ce681b60a958ce6f7e4ada21c85fd27ec1ae1db164968
|
||||
size 1798668
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1a0f4a842f03602120ee830085941a52d9a5bb4bd0326e353deb3283bfb1aa53
|
||||
size 1808908
|
@ -1,3 +1,19 @@
|
||||
-------------------------------------------------------------------
|
||||
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>
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
name: wireplumber
|
||||
version: 0.4.7
|
||||
mtime: 1642066064
|
||||
commit: afb177b5e0840d54dc41d02920702c3c9580ce02
|
||||
version: 0.4.6
|
||||
mtime: 1641485511
|
||||
commit: 9a733293d7d39554d0c9b04741a64ece023dbac6
|
||||
|
@ -22,7 +22,7 @@
|
||||
%define sover 0
|
||||
%define libwireplumber libwireplumber-%{apiver_str}-%{sover}
|
||||
Name: wireplumber
|
||||
Version: 0.4.7
|
||||
Version: 0.4.6
|
||||
Release: 0
|
||||
Summary: Session / policy manager implementation for PipeWire
|
||||
License: MIT
|
||||
@ -30,7 +30,20 @@ Group: Development/Libraries/C and C++
|
||||
URL: https://gitlab.freedesktop.org/pipewire/wireplumber
|
||||
Source0: wireplumber-%{version}.tar.xz
|
||||
Source1: split-config-file.py
|
||||
Patch0: 0001-reversed-default-nodes-check-if-default-node-has-available-ro.patch
|
||||
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
|
||||
#0009-default-nodes-check-if-default-node-has-available-ro.patch
|
||||
#0010-added-support-for-disabling-nodes-and-devices-throug.patch
|
||||
#0011-default-nodes-add-more-logs.patch
|
||||
#0012-device-activation-show-device-name-in-logs.patch
|
||||
#0013-scripts-fallback-to-empty-config-table-if-args-were-.patch
|
||||
|
||||
Patch100: reduce-meson-required-version.patch
|
||||
# docs
|
||||
BuildRequires: doxygen
|
||||
|
Loading…
Reference in New Issue
Block a user