summaryrefslogtreecommitdiff
path: root/media-video/pipewire/files/0.3.69/0001-context-improve-state-calculations.patch
diff options
context:
space:
mode:
Diffstat (limited to 'media-video/pipewire/files/0.3.69/0001-context-improve-state-calculations.patch')
-rw-r--r--media-video/pipewire/files/0.3.69/0001-context-improve-state-calculations.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/media-video/pipewire/files/0.3.69/0001-context-improve-state-calculations.patch b/media-video/pipewire/files/0.3.69/0001-context-improve-state-calculations.patch
new file mode 100644
index 000000000000..29469205cf48
--- /dev/null
+++ b/media-video/pipewire/files/0.3.69/0001-context-improve-state-calculations.patch
@@ -0,0 +1,59 @@
+https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/a275e825c75c93775baaeb17479e38d035d9b79a
+
+From a275e825c75c93775baaeb17479e38d035d9b79a Mon Sep 17 00:00:00 2001
+From: Wim Taymans <wtaymans@redhat.com>
+Date: Fri, 14 Apr 2023 12:01:03 +0200
+Subject: [PATCH] context: improve state calculations
+
+Always make peers of non-passive links runnable, even if we already
+visited the peer node. This makes non-passive links between drivers set the
+drivers to runnable. (midi-bridge, source to sink). It also makes nodes
+collected from the (link-)group runnable when they are linked together.
+
+To calculate the runnable state of the other nodes, only start from
+non-driver runnable nodes (like we already did when following links).
+
+This makes a link from echo-cancel-source to echo-cancel-sink activate
+the echo-canceler chain instead of staying idle.
+--- a/src/pipewire/context.c
++++ b/src/pipewire/context.c
+@@ -788,9 +788,6 @@ static inline int run_nodes(struct pw_context *context, struct pw_impl_node *nod
+ struct pw_impl_port *p;
+ struct pw_impl_link *l;
+
+- if (!node->runnable)
+- return 0;
+-
+ pw_log_debug("node %p: '%s'", node, node->name);
+
+ spa_list_for_each(p, &node->input_ports, link) {
+@@ -885,7 +882,7 @@ static int collect_nodes(struct pw_context *context, struct pw_impl_node *node,
+
+ pw_impl_link_prepare(l);
+
+- if (!l->prepared || (t != n && t->visited))
++ if (!l->prepared)
+ continue;
+
+ if (!l->passive)
+@@ -906,7 +903,7 @@ static int collect_nodes(struct pw_context *context, struct pw_impl_node *node,
+
+ pw_impl_link_prepare(l);
+
+- if (!l->prepared || (t != n && t->visited))
++ if (!l->prepared)
+ continue;
+
+ if (!l->passive)
+@@ -936,7 +933,8 @@ static int collect_nodes(struct pw_context *context, struct pw_impl_node *node,
+ pw_log_debug(" next node %p: '%s' runnable:%u", n, n->name, n->runnable);
+ }
+ spa_list_for_each(n, collect, sort_link)
+- run_nodes(context, n, collect);
++ if (!n->driver && n->runnable)
++ run_nodes(context, n, collect);
+
+ return 0;
+ }
+--
+GitLab