From 78e9e5958efce02dad98a67ed93ab2ab1e531999 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 10 Mar 2021 13:28:56 +0100 Subject: [PATCH] impl-node: delay starting the driver node Only start the driver node after we have added ourselves to the driver node or else we might start too soon, before there is anything to schedule and we cause driver underruns. --- src/pipewire/impl-node.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index 25e470275..42122aba3 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -214,8 +214,9 @@ static int start_node(struct pw_impl_node *this) pw_log_debug(NAME" %p: start node", this); - res = spa_node_send_command(this->node, - &SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Start)); + if (!this->driving) + res = spa_node_send_command(this->node, + &SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Start)); if (res < 0) pw_log_error("(%s-%u) start node error %d: %s", this->name, this->info.id, @@ -338,6 +339,9 @@ static void node_update_state(struct pw_impl_node *node, enum pw_node_state stat switch (state) { case PW_NODE_STATE_RUNNING: pw_loop_invoke(node->data_loop, do_node_add, 1, NULL, 0, true, node); + if (node->driving) + spa_node_send_command(node->node, + &SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Start)); break; default: break;