mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
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:
parent
ac95f796bf
commit
8dce124720
3 changed files with 70 additions and 17 deletions
|
|
@ -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, ¶m, &b.b);
|
||||
|
||||
if (res == 1) {
|
||||
void *p;
|
||||
p = pw_reallocarray(params, n_params + 1, sizeof(struct spa_pod*));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue