From aada47252db2a100a5dd9452eeb1d9f1097e3cd0 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 5 Apr 2018 15:34:33 +0200 Subject: [PATCH] pipewire: add helper to load spa plugin --- src/pipewire/pipewire.c | 33 +++++++++++++++++++++++---------- src/pipewire/pipewire.h | 3 +++ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/pipewire/pipewire.c b/src/pipewire/pipewire.c index ce9588968..b66b44eeb 100644 --- a/src/pipewire/pipewire.c +++ b/src/pipewire/pipewire.c @@ -170,27 +170,40 @@ const struct spa_support *pw_get_support(uint32_t *n_support) return support_info.support; } -void *pw_get_spa_dbus(struct pw_loop *loop) +void *pw_load_spa_interface(const char *lib, const char *factory_name, const char *type, + struct spa_support *support, uint32_t n_support) { - struct support_info dbus_support_info; + struct support_info extra_support_info; const char *str; + int i; - dbus_support_info.n_support = support_info.n_support; - memcpy(dbus_support_info.support, support_info.support, - sizeof(struct spa_support) * dbus_support_info.n_support); - - dbus_support_info.support[dbus_support_info.n_support++] = - SPA_SUPPORT_INIT(SPA_TYPE__LoopUtils, loop->utils); + extra_support_info.n_support = support_info.n_support; + memcpy(extra_support_info.support, support_info.support, + sizeof(struct spa_support) * extra_support_info.n_support); + for (i = 0; i < n_support; i++) { + extra_support_info.support[extra_support_info.n_support++] = + SPA_SUPPORT_INIT(support[i].type, support[i].data); + } if ((str = getenv("SPA_PLUGIN_DIR")) == NULL) str = PLUGINDIR; - if (open_support(str, "support/libspa-dbus", &dbus_support_info)) - return load_interface(&dbus_support_info, "dbus", SPA_TYPE__DBus); + pw_log_debug("load \"%s\", \"%s\"", lib, factory_name); + + if (open_support(str, lib, &extra_support_info)) + return load_interface(&extra_support_info, factory_name, type); return NULL; } +void *pw_get_spa_dbus(struct pw_loop *loop) +{ + struct spa_support support = SPA_SUPPORT_INIT(SPA_TYPE__LoopUtils, loop->utils); + + return pw_load_spa_interface("support/libspa-dbus", "dbus", SPA_TYPE__DBus, + &support, 1); +} + /** Initialize PipeWire * * \param argc pointer to argc diff --git a/src/pipewire/pipewire.h b/src/pipewire/pipewire.h index 870f97462..475624820 100644 --- a/src/pipewire/pipewire.h +++ b/src/pipewire/pipewire.h @@ -132,6 +132,9 @@ pw_direction_reverse(enum pw_direction direction); void * pw_get_support_interface(const char *type); +void *pw_load_spa_interface(const char *lib, const char *factory_name, const char *type, + struct spa_support *support, uint32_t n_support); + void *pw_get_spa_dbus(struct pw_loop *loop); const struct spa_handle_factory *