From 0945b102275eb14967a83ba03eb171eb7a251dd1 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 12 Feb 2021 21:15:14 +0100 Subject: [PATCH] jack: handle bridge nodes Bridges have the device name in the port names so use this info to construct better port names. Makes midi devices show up as separate clients. --- pipewire-jack/src/pipewire-jack.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pipewire-jack/src/pipewire-jack.c b/pipewire-jack/src/pipewire-jack.c index 350fb4358..60a47b95f 100644 --- a/pipewire-jack/src/pipewire-jack.c +++ b/pipewire-jack/src/pipewire-jack.c @@ -111,6 +111,7 @@ struct object { char name[JACK_CLIENT_NAME_SIZE+1]; int32_t priority; uint32_t client_id; + bool is_bridge; } node; struct { uint32_t src; @@ -2102,6 +2103,9 @@ static void registry_event_global(void *data, uint32_t id, app = spa_dict_lookup(props, PW_KEY_APP_NAME); + if ((str = spa_dict_lookup(props, PW_KEY_MEDIA_CLASS)) != NULL) + o->node.is_bridge = strstr(str, "Bridge") != NULL; + if ((str = spa_dict_lookup(props, PW_KEY_NODE_NICK)) == NULL && (str = spa_dict_lookup(props, PW_KEY_NODE_DESCRIPTION)) == NULL && (str = node_name) == NULL) { @@ -2195,7 +2199,11 @@ static void registry_event_global(void *data, uint32_t id, if (ot == NULL || ot->type != INTERFACE_Node) goto exit_free; - snprintf(o->port.name, sizeof(o->port.name), "%s:%s", ot->node.name, str); + if (ot->node.is_bridge && strchr(str, ':') != NULL) + snprintf(o->port.name, sizeof(o->port.name), "%s", str); + else + snprintf(o->port.name, sizeof(o->port.name), "%s:%s", ot->node.name, str); + o->port.port_id = SPA_ID_INVALID; o->port.priority = ot->node.priority; }