policy-node: only track stream peers

Only track the peer of streams. We only care about where we linked
this stream to. There is only one target per stream but the device
we link to can have many peer streams.
This commit is contained in:
Wim Taymans 2020-07-15 14:22:56 +02:00
parent 5f2c4c70ec
commit b1293d9f6e

View file

@ -282,7 +282,7 @@ static void destroy_node(struct impl *impl, struct node *node)
if (node->enabled) if (node->enabled)
spa_hook_remove(&node->listener); spa_hook_remove(&node->listener);
free(node->media); free(node->media);
if (node->peer) if (node->peer && node->peer->peer == node)
node->peer->peer = NULL; node->peer->peer = NULL;
sm_object_remove_data((struct sm_object*)node->obj, SESSION_KEY); sm_object_remove_data((struct sm_object*)node->obj, SESSION_KEY);
} }
@ -392,7 +392,6 @@ static int link_nodes(struct node *node, struct node *peer)
pw_log_debug(NAME " %p: link nodes %d %d", impl, node->id, peer->id); pw_log_debug(NAME " %p: link nodes %d %d", impl, node->id, peer->id);
peer->peer = node;
node->peer = peer; node->peer = peer;
if (node->direction == PW_DIRECTION_INPUT) { if (node->direction == PW_DIRECTION_INPUT) {
@ -400,6 +399,7 @@ static int link_nodes(struct node *node, struct node *peer)
node = peer; node = peer;
peer = t; peer = t;
} }
props = pw_properties_new(NULL, NULL); props = pw_properties_new(NULL, NULL);
pw_properties_setf(props, PW_KEY_LINK_OUTPUT_NODE, "%d", node->id); pw_properties_setf(props, PW_KEY_LINK_OUTPUT_NODE, "%d", node->id);
pw_properties_setf(props, PW_KEY_LINK_INPUT_NODE, "%d", peer->id); pw_properties_setf(props, PW_KEY_LINK_INPUT_NODE, "%d", peer->id);