impl-port: only go through mixer for IO

Since we don't follow updates of the params on the mixer but only on the
port, we might get out of sync and fail to negotiate.

Going through the mixers for everything needs some more work.

Fixes #3971
This commit is contained in:
Wim Taymans 2024-04-22 10:01:39 +02:00
parent ac95f796bf
commit 8dce124720
3 changed files with 70 additions and 17 deletions

View file

@ -315,11 +315,25 @@ static int add_port_update(struct node_data *data, struct pw_impl_port *port, ui
continue;
for (idx = 0;;) {
struct spa_node *qnode;
uint32_t qport;
spa_pod_dynamic_builder_init(&b, buf, sizeof(buf), 4096);
res = spa_node_port_enum_params_sync(port->mix,
port->direction, SPA_ID_INVALID,
switch (id) {
case SPA_PARAM_IO:
qnode = port->mix;
qport = SPA_ID_INVALID;
break;
default:
qnode = port->node->node;
qport = port->port_id;
break;
}
res = spa_node_port_enum_params_sync(qnode,
port->direction, qport,
id, &idx, NULL, &param, &b.b);
if (res == 1) {
void *p;
p = pw_reallocarray(params, n_params + 1, sizeof(struct spa_pod*));