From c9f5deb81dbe5c5370ef8367b9d3119c73edf19d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= Date: Sat, 19 Jun 2021 00:09:09 +0200 Subject: [PATCH] pulse-server: split out module handling Part of !776. --- src/modules/meson.build | 1 + src/modules/module-protocol-pulse/internal.h | 2 ++ src/modules/module-protocol-pulse/module.c | 34 +++++++++++++------ src/modules/module-protocol-pulse/module.h | 14 ++++++-- .../module-protocol-pulse/modules/registry.h | 2 +- .../module-protocol-pulse/pulse-server.c | 9 ++--- 6 files changed, 42 insertions(+), 20 deletions(-) diff --git a/src/modules/meson.build b/src/modules/meson.build index ccb0dd57..162e92e2 100644 --- a/src/modules/meson.build +++ b/src/modules/meson.build @@ -141,6 +141,7 @@ pipewire_module_protocol_pulse_sources = [ 'module-protocol-pulse/manager.c', 'module-protocol-pulse/media-roles.c', 'module-protocol-pulse/message.c', + 'module-protocol-pulse/module.c', 'module-protocol-pulse/operation.c', 'module-protocol-pulse/pending-sample.c', 'module-protocol-pulse/pulse-server.c', diff --git a/src/modules/module-protocol-pulse/internal.h b/src/modules/module-protocol-pulse/internal.h index 8ce63e3b..559f24bd 100644 --- a/src/modules/module-protocol-pulse/internal.h +++ b/src/modules/module-protocol-pulse/internal.h @@ -83,4 +83,6 @@ struct impl { extern bool debug_messages; +void broadcast_subscribe_event(struct impl *impl, uint32_t mask, uint32_t event, uint32_t id); + #endif diff --git a/src/modules/module-protocol-pulse/module.c b/src/modules/module-protocol-pulse/module.c index 6593854d..ed64b888 100644 --- a/src/modules/module-protocol-pulse/module.c +++ b/src/modules/module-protocol-pulse/module.c @@ -23,11 +23,23 @@ * DEALINGS IN THE SOFTWARE. */ -#include "module.h" +#include +#include +#include +#include +#include #include - -static int module_unload(struct client *client, struct module *module); +#include +#include +#include +#include + +#include "client.h" +#include "defs.h" +#include "format.h" +#include "internal.h" +#include "module.h" static void on_module_unload(void *obj, void *data, int res, uint32_t id) { @@ -52,20 +64,20 @@ struct module *module_new(struct impl *impl, const struct module_methods *method module->impl = impl; module->methods = methods; spa_hook_list_init(&module->listener_list); - module->user_data = SPA_PTROFF(module, sizeof(struct module), void); + module->user_data = SPA_PTROFF(module, sizeof(*module), void); module->loaded = false; return module; } -static void module_add_listener(struct module *module, - struct spa_hook *listener, - const struct module_events *events, void *data) +void module_add_listener(struct module *module, + struct spa_hook *listener, + const struct module_events *events, void *data) { spa_hook_list_append(&module->listener_list, listener, events, data); } -static int module_load(struct client *client, struct module *module) +int module_load(struct client *client, struct module *module) { pw_log_info("load module id:%u name:%s", module->idx, module->name); if (module->methods->load == NULL) @@ -75,7 +87,7 @@ static int module_load(struct client *client, struct module *module) return module->methods->load(client, module); } -static void module_free(struct module *module) +void module_free(struct module *module) { struct impl *impl = module->impl; @@ -92,7 +104,7 @@ static void module_free(struct module *module) free(module); } -static int module_unload(struct client *client, struct module *module) +int module_unload(struct client *client, struct module *module) { struct impl *impl = module->impl; int res = 0; @@ -253,7 +265,7 @@ static const struct module_info *find_module_info(const char *name) return NULL; } -static struct module *create_module(struct client *client, const char *name, const char *args) +struct module *module_create(struct client *client, const char *name, const char *args) { struct impl *impl = client->impl; const struct module_info *info; diff --git a/src/modules/module-protocol-pulse/module.h b/src/modules/module-protocol-pulse/module.h index 68341d24..d61928c4 100644 --- a/src/modules/module-protocol-pulse/module.h +++ b/src/modules/module-protocol-pulse/module.h @@ -27,11 +27,13 @@ #define PIPEWIRE_PULSE_MODULE_H #include +#include #include "client.h" #include "internal.h" struct module; +struct pw_properties; struct module_info { const char *name; @@ -45,8 +47,6 @@ struct module_events { void (*loaded) (void *data, int result); }; -#define module_emit_loaded(m,r) spa_hook_list_call(&m->listener_list, struct module_events, loaded, 0, r) - struct module_methods { #define VERSION_MODULE_METHODS 0 uint32_t version; @@ -67,9 +67,19 @@ struct module { unsigned int loaded:1; }; +#define module_emit_loaded(m,r) spa_hook_list_call(&m->listener_list, struct module_events, loaded, 0, r) + +struct module *module_create(struct client *client, const char *name, const char *args); +void module_free(struct module *module); struct module *module_new(struct impl *impl, const struct module_methods *methods, size_t user_data); +int module_load(struct client *client, struct module *module); +int module_unload(struct client *client, struct module *module); void module_schedule_unload(struct module *module); +void module_add_listener(struct module *module, + struct spa_hook *listener, + const struct module_events *events, void *data); + void module_args_add_props(struct pw_properties *props, const char *str); int module_args_to_audioinfo(struct impl *impl, struct pw_properties *props, struct spa_audio_info_raw *info); diff --git a/src/modules/module-protocol-pulse/modules/registry.h b/src/modules/module-protocol-pulse/modules/registry.h index f85a6cd7..6825a1a1 100644 --- a/src/modules/module-protocol-pulse/modules/registry.h +++ b/src/modules/module-protocol-pulse/modules/registry.h @@ -26,7 +26,7 @@ #ifndef PIPEWIRE_PULSE_MODULE_REGISTRY_H #define PIPEWIRE_PULSE_MODULE_REGISTRY_H -#include "../internal.h" +struct impl; struct module *create_module_combine_sink(struct impl *impl, const char *argument); struct module *create_module_echo_cancel(struct impl *impl, const char *argument); diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c index 2991f992..9ad9b292 100644 --- a/src/modules/module-protocol-pulse/pulse-server.c +++ b/src/modules/module-protocol-pulse/pulse-server.c @@ -67,6 +67,7 @@ #include "format.h" #include "internal.h" #include "message.h" +#include "module.h" #include "operation.h" #include "pending-sample.h" #include "reply.h" @@ -100,10 +101,6 @@ struct latency_offset_data { unsigned int initialized:1; }; -/* Functions that modules can use */ -static void broadcast_subscribe_event(struct impl *impl, uint32_t mask, uint32_t event, uint32_t id); - -#include "module.c" #include "message-handler.c" static struct sample *find_sample(struct impl *impl, uint32_t idx, const char *name) @@ -122,7 +119,7 @@ static struct sample *find_sample(struct impl *impl, uint32_t idx, const char *n return NULL; } -static void broadcast_subscribe_event(struct impl *impl, uint32_t mask, uint32_t event, uint32_t id) +void broadcast_subscribe_event(struct impl *impl, uint32_t mask, uint32_t event, uint32_t id) { struct server *s; spa_list_for_each(s, &impl->servers, link) { @@ -4548,7 +4545,7 @@ static int do_load_module(struct client *client, uint32_t command, uint32_t tag, pw_log_info(NAME" %p: [%s] %s name:%s argument:%s", impl, client->name, commands[command].name, name, argument); - module = create_module(client, name, argument); + module = module_create(client, name, argument); if (module == NULL) return -errno;