diff --git a/src/modules/module-client-node/client-node.c b/src/modules/module-client-node/client-node.c index d398b13fc..3031ffa00 100644 --- a/src/modules/module-client-node/client-node.c +++ b/src/modules/module-client-node/client-node.c @@ -1056,6 +1056,7 @@ client_node_port_update(void *data, if (port == NULL) { target = &this->dummy; spa_zero(this->dummy); + target->id = port_id; } else target = port; diff --git a/src/pipewire/link.c b/src/pipewire/link.c index ce3da33a9..fd6e3fb07 100644 --- a/src/pipewire/link.c +++ b/src/pipewire/link.c @@ -632,8 +632,8 @@ static int do_allocation(struct pw_link *this, uint32_t in_state, uint32_t out_s output = this->output; pw_log_debug("link %p: doing alloc buffers %p %p", this, output->node, input->node); - oinfo = output->spa_info; - iinfo = input->spa_info; + oinfo = &output->spa_info; + iinfo = &input->spa_info; in_flags = iinfo->flags; out_flags = oinfo->flags; diff --git a/src/pipewire/port.c b/src/pipewire/port.c index c351b398b..adbcce89f 100644 --- a/src/pipewire/port.c +++ b/src/pipewire/port.c @@ -329,7 +329,7 @@ static int do_add_port(struct spa_loop *loop, struct pw_port *this = user_data; struct spa_graph_node *out, *in; - this->rt.port.flags = this->spa_info->flags; + this->rt.port.flags = this->spa_info.flags; spa_graph_port_add(&this->node->rt.node, &this->rt.port); spa_graph_port_add(&this->rt.mix_node, &this->rt.mix_port); spa_graph_port_link(&this->rt.port, &this->rt.mix_port); @@ -486,6 +486,7 @@ int pw_port_add(struct pw_port *port, struct pw_node *node) const char *str, *dir; int res; bool control; + const struct spa_port_info *spa_info; if (port->node != NULL) return -EEXIST; @@ -504,7 +505,7 @@ int pw_port_add(struct pw_port *port, struct pw_node *node) if ((res = spa_node_port_get_info(node->node, port->direction, port_id, - &port->spa_info)) < 0) { + &spa_info)) < 0) { /* can't get port info, try to add it.. */ if ((res = spa_node_add_port(node->node, port->direction, port_id)) < 0) goto add_failed; @@ -514,14 +515,16 @@ int pw_port_add(struct pw_port *port, struct pw_node *node) /* try again */ if ((res = spa_node_port_get_info(node->node, port->direction, port_id, - &port->spa_info)) < 0) + &spa_info)) < 0) goto info_failed; } port->node = node; + port->spa_info = *spa_info; + port->spa_info.props = NULL; - if (port->spa_info->props) - pw_port_update_properties(port, port->spa_info->props); + if (spa_info->props) + pw_port_update_properties(port, spa_info->props); pw_node_events_port_init(node, port); @@ -545,12 +548,12 @@ int pw_port_add(struct pw_port *port, struct pw_node *node) } } - if (SPA_FLAG_CHECK(port->spa_info->flags, SPA_PORT_INFO_FLAG_PHYSICAL)) + if (SPA_FLAG_CHECK(port->spa_info.flags, SPA_PORT_INFO_FLAG_PHYSICAL)) pw_properties_set(port->properties, "port.physical", "1"); - if (SPA_FLAG_CHECK(port->spa_info->flags, SPA_PORT_INFO_FLAG_TERMINAL)) + if (SPA_FLAG_CHECK(port->spa_info.flags, SPA_PORT_INFO_FLAG_TERMINAL)) pw_properties_set(port->properties, "port.terminal", "1"); - pw_log_debug("port %p: %d add to node %p %08x", port, port_id, node, port->spa_info->flags); + pw_log_debug("port %p: %d add to node %p %08x", port, port_id, node, port->spa_info.flags); spa_list_append(ports, &port->link); pw_map_insert_at(portmap, port_id, port); diff --git a/src/pipewire/private.h b/src/pipewire/private.h index ec7883018..502da928e 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -403,7 +403,7 @@ struct pw_port { enum pw_direction direction; /**< port direction */ uint32_t port_id; /**< port id */ - const struct spa_port_info *spa_info; + struct spa_port_info spa_info; struct pw_properties *properties; /**< properties of the port */ struct pw_port_info info;