https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/78937ee0ece9dc5f35c7bc6fa9fad3abe9b3eb9f

From 78937ee0ece9dc5f35c7bc6fa9fad3abe9b3eb9f Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Wed, 24 Sep 2025 12:36:13 +0200
Subject: [PATCH] adapter: fix Start of adapter

Commit cbbf37c3b8b6c77e111ab229c3315aadb9690bf9 changed the logic of the
Start command. Before this commit, when there was no converter, the
follower would always get the Start command. After the commit, the
follower would only get Start when previously Paused.

This however breaks when we set a format or buffers on the follower
without a converter because those actions might change the state of the
follower to Paused implicitly.

We should simply remove the started check here and always call Start on
the converter and follower, the implementations themselves will keep track
if anything needs to be done.

Fixes #4911
---
 spa/plugins/audioconvert/audioadapter.c | 2 --
 spa/plugins/videoconvert/videoadapter.c | 2 --
 2 files changed, 4 deletions(-)

diff --git a/spa/plugins/audioconvert/audioadapter.c b/spa/plugins/audioconvert/audioadapter.c
index 2e42b6f432..b4535dd765 100644
--- a/spa/plugins/audioconvert/audioadapter.c
+++ b/spa/plugins/audioconvert/audioadapter.c
@@ -1013,8 +1013,6 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
 	switch (SPA_NODE_COMMAND_ID(command)) {
 	case SPA_NODE_COMMAND_Start:
 		spa_log_debug(this->log, "%p: starting %d", this, this->started);
-		if (this->started)
-			return 0;
 		if ((res = negotiate_format(this)) < 0)
 			return res;
 		this->ready = true;
diff --git a/spa/plugins/videoconvert/videoadapter.c b/spa/plugins/videoconvert/videoadapter.c
index 5b101ff3d9..c901b99e6c 100644
--- a/spa/plugins/videoconvert/videoadapter.c
+++ b/spa/plugins/videoconvert/videoadapter.c
@@ -980,8 +980,6 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
 	switch (SPA_NODE_COMMAND_ID(command)) {
 	case SPA_NODE_COMMAND_Start:
 		spa_log_debug(this->log, "%p: starting %d", this, this->started);
-		if (this->started)
-			return 0;
 		if ((res = negotiate_format(this)) < 0)
 			return res;
 		this->ready = true;
-- 
GitLab
