From 4c0bba953a24b95f7b1daa5ea058f7fb7075fb0c Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 24 Dec 2021 11:30:56 +0100 Subject: [PATCH] jack: avoid metadata updates to monitor nodes Because there is no difference in the node id of the monitor and the sink carla has problems. See #1945 --- pipewire-jack/src/metadata.c | 13 +++++++++---- pipewire-jack/src/uuid.c | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/pipewire-jack/src/metadata.c b/pipewire-jack/src/metadata.c index 15bb75bd2..fd11833dc 100644 --- a/pipewire-jack/src/metadata.c +++ b/pipewire-jack/src/metadata.c @@ -196,10 +196,12 @@ static int update_property(struct client *c, } pthread_mutex_unlock(&globals.lock); - if (c->property_callback && changed) + if (c->property_callback && changed) { + pw_log_info("emit %lu %s", subject, key); c->property_callback(subject, key, change, c->property_arg); + } - return 0; + return changed; } @@ -222,14 +224,17 @@ int jack_set_property(jack_client_t*client, if (c->metadata == NULL) goto done; + if (subject & (1<<30)) + goto done; + id = jack_uuid_to_index(subject); if (type == NULL) type = ""; pw_log_info("set id:%u (%"PRIu64") '%s' to '%s@%s'", id, subject, key, value, type); - update_property(c, id, key, type, value); - pw_metadata_set_property(c->metadata->proxy, id, key, type, value); + if (update_property(c, subject, key, type, value)) + pw_metadata_set_property(c->metadata->proxy, id, key, type, value); res = 0; done: pw_thread_loop_unlock(c->context.loop); diff --git a/pipewire-jack/src/uuid.c b/pipewire-jack/src/uuid.c index 028b4b2fe..88d8bd881 100644 --- a/pipewire-jack/src/uuid.c +++ b/pipewire-jack/src/uuid.c @@ -54,7 +54,7 @@ jack_uuid_t jack_port_uuid_generate (uint32_t port_id) SPA_EXPORT uint32_t jack_uuid_to_index (jack_uuid_t id) { - return (id & 0xffffffff) - 1; + return (id & 0xffffff) - 1; } SPA_EXPORT