diff options
Diffstat (limited to 'audio/out/ao_pipewire.c')
-rw-r--r-- | audio/out/ao_pipewire.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/audio/out/ao_pipewire.c b/audio/out/ao_pipewire.c index 1f9fe44e1e..c94d411262 100644 --- a/audio/out/ao_pipewire.c +++ b/audio/out/ao_pipewire.c @@ -276,21 +276,29 @@ struct registry_event_global_ctx { void *sink_cb_ctx; }; -static void for_each_sink_registry_event_global(void *data, uint32_t id, - uint32_t permissions, const - char *type, uint32_t version, - const struct spa_dict *props) +static bool is_sink_node(const char *type, const struct spa_dict *props) { - struct registry_event_global_ctx *ctx = data; - if (strcmp(type, PW_TYPE_INTERFACE_Node) != 0) - return; + return false; if (!props) - return; + return false; const char *class = spa_dict_lookup(props, PW_KEY_MEDIA_CLASS); if (!class || strcmp(class, "Audio/Sink") != 0) + return false; + + return true; +} + +static void for_each_sink_registry_event_global(void *data, uint32_t id, + uint32_t permissions, const + char *type, uint32_t version, + const struct spa_dict *props) +{ + struct registry_event_global_ctx *ctx = data; + + if (!is_sink_node(type, props)) return; ctx->sink_cb(ctx->ao, id, props, ctx->sink_cb_ctx); |