mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
link: generate unique mix ids
Generate a per link id for the mixer input of the ports.
This commit is contained in:
parent
8e2ceb773e
commit
53ee07c901
3 changed files with 15 additions and 3 deletions
|
|
@ -874,6 +874,8 @@ static void input_remove(struct pw_link *this, struct pw_port *port)
|
|||
pw_loop_invoke(port->node->data_loop,
|
||||
do_remove_input, 1, NULL, 0, true, this);
|
||||
|
||||
pw_map_remove(&port->mix_port_map, this->rt.in_port.port_id);
|
||||
|
||||
spa_list_remove(&this->input_link);
|
||||
spa_hook_list_call(&this->input->listener_list, struct pw_port_events, link_removed, this);
|
||||
|
||||
|
|
@ -901,6 +903,8 @@ static void output_remove(struct pw_link *this, struct pw_port *port)
|
|||
pw_loop_invoke(port->node->data_loop,
|
||||
do_remove_output, 1, NULL, 0, true, this);
|
||||
|
||||
pw_map_remove(&port->mix_port_map, this->rt.out_port.port_id);
|
||||
|
||||
spa_list_remove(&this->output_link);
|
||||
spa_hook_list_call(&this->output->listener_list, struct pw_port_events, link_removed, this);
|
||||
|
||||
|
|
@ -1141,9 +1145,6 @@ struct pw_link *pw_link_new(struct pw_core *core,
|
|||
pw_port_add_listener(output, &impl->output_port_listener, &output_port_events, impl);
|
||||
pw_node_add_listener(output_node, &impl->output_node_listener, &output_node_events, impl);
|
||||
|
||||
pw_log_debug("link %p: constructed %p:%d -> %p:%d", impl,
|
||||
output_node, output->port_id, input_node, input->port_id);
|
||||
|
||||
input_node->live = output_node->live;
|
||||
if (output_node->clock)
|
||||
input_node->clock = output_node->clock;
|
||||
|
|
@ -1163,6 +1164,13 @@ struct pw_link *pw_link_new(struct pw_core *core,
|
|||
|
||||
this->io = SPA_IO_BUFFERS_INIT;
|
||||
|
||||
this->rt.out_port.port_id = pw_map_insert_new(&output->mix_port_map, NULL);
|
||||
this->rt.in_port.port_id = pw_map_insert_new(&input->mix_port_map, NULL);
|
||||
|
||||
pw_log_debug("link %p: constructed %p:%d.%d -> %p:%d.%d", impl,
|
||||
output_node, output->port_id, this->rt.out_port.port_id,
|
||||
input_node, input->port_id, this->rt.in_port.port_id);
|
||||
|
||||
spa_graph_port_init(&this->rt.out_port,
|
||||
PW_DIRECTION_OUTPUT,
|
||||
this->rt.out_port.port_id,
|
||||
|
|
|
|||
|
|
@ -211,6 +211,7 @@ struct pw_port *pw_port_new(enum pw_direction direction,
|
|||
schedule_mix_node :
|
||||
schedule_tee_node;
|
||||
spa_graph_node_set_implementation(&this->rt.mix_node, &this->mix_node);
|
||||
pw_map_init(&this->mix_port_map, 64, 64);
|
||||
|
||||
spa_graph_port_init(&this->rt.mix_port,
|
||||
pw_direction_reverse(this->direction),
|
||||
|
|
@ -558,6 +559,8 @@ void pw_port_destroy(struct pw_port *port)
|
|||
|
||||
free_allocation(&port->allocation);
|
||||
|
||||
pw_map_clear(&port->mix_port_map);
|
||||
|
||||
if (port->properties)
|
||||
pw_properties_free(port->properties);
|
||||
|
||||
|
|
|
|||
|
|
@ -334,6 +334,7 @@ struct pw_port {
|
|||
|
||||
struct spa_node *mix; /**< optional port buffer mix/split */
|
||||
struct spa_node mix_node; /**< mix node implementation */
|
||||
struct pw_map mix_port_map; /**< map from port_id from mixer */
|
||||
|
||||
struct {
|
||||
struct spa_graph *graph;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue