diff --git a/src/modules/module-protocol-pulse/module.c b/src/modules/module-protocol-pulse/module.c index 1bd3ce875..118d931c3 100644 --- a/src/modules/module-protocol-pulse/module.c +++ b/src/modules/module-protocol-pulse/module.c @@ -59,16 +59,17 @@ void module_schedule_unload(struct module *module) module->unloading = true; } -struct module *module_new(struct impl *impl, size_t user_data) +static struct module *module_new(struct impl *impl, const struct module_info *info) { struct module *module; - module = calloc(1, sizeof(struct module) + user_data); + module = calloc(1, sizeof(*module) + info->data_size); if (module == NULL) return NULL; module->index = SPA_ID_INVALID; module->impl = impl; + module->info = info; spa_hook_list_init(&module->listener_list); module->user_data = SPA_PTROFF(module, sizeof(*module), void); module->loaded = false; @@ -304,17 +305,34 @@ struct module *module_create(struct client *client, const char *name, const char } } - module = info->create(impl, args); + module = module_new(impl, info); if (module == NULL) return NULL; - module->info = info; + module->props = pw_properties_new(NULL, NULL); + if (module->props == NULL) { + module_free(module); + return NULL; + } + + if (args) + module_args_add_props(module->props, args); + + int res = module->info->create(module); + if (res < 0) { + module_free(module); + errno = -res; + return NULL; + } + module->index = pw_map_insert_new(&impl->modules, module); if (module->index == SPA_ID_INVALID) { module_unload(module); return NULL; } + module->args = args ? strdup(args) : NULL; module->index |= MODULE_FLAG; + return module; } diff --git a/src/modules/module-protocol-pulse/module.h b/src/modules/module-protocol-pulse/module.h index 5bf8febf3..efdc30025 100644 --- a/src/modules/module-protocol-pulse/module.h +++ b/src/modules/module-protocol-pulse/module.h @@ -40,11 +40,12 @@ struct module_info { unsigned int load_once:1; - struct module *(*create) (struct impl *impl, const char *args); + int (*create) (struct module *module); int (*load) (struct client *client, struct module *module); int (*unload) (struct module *module); const struct spa_dict *properties; + size_t data_size; }; #define DEFINE_MODULE_INFO(name) \ @@ -79,7 +80,6 @@ struct module { 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, size_t user_data); int module_load(struct client *client, struct module *module); int module_unload(struct module *module); void module_schedule_unload(struct module *module); diff --git a/src/modules/module-protocol-pulse/modules/module-always-sink.c b/src/modules/module-protocol-pulse/modules/module-always-sink.c index f225f0055..78675b62a 100644 --- a/src/modules/module-protocol-pulse/modules/module-always-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-always-sink.c @@ -101,34 +101,14 @@ static const struct spa_dict_item module_always_sink_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_always_sink(struct impl *impl, const char *argument) +int create_module_always_sink(struct module * const module) { - struct module *module; - struct pw_properties *props = NULL; - int res; - PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); - if (props == NULL) { - res = -EINVAL; - goto out; - } - if (argument) - module_args_add_props(props, argument); + struct module_always_sink_data * const data = module->user_data; + data->module = module; - module = module_new(impl, sizeof(struct module_always_sink_data)); - if (module == NULL) { - res = -errno; - goto out; - } - module->props = props; - - return module; -out: - pw_properties_free(props); - errno = -res; - return NULL; + return 0; } DEFINE_MODULE_INFO(module_always_sink) = { @@ -138,4 +118,5 @@ DEFINE_MODULE_INFO(module_always_sink) = { .load = module_always_sink_load, .unload = module_always_sink_unload, .properties = &SPA_DICT_INIT_ARRAY(module_always_sink_info), + .data_size = sizeof(struct module_always_sink_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-combine-sink.c b/src/modules/module-protocol-pulse/modules/module-combine-sink.c index 06c2d13b7..8aba80bf3 100644 --- a/src/modules/module-protocol-pulse/modules/module-combine-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-combine-sink.c @@ -499,11 +499,10 @@ static int module_combine_sink_unload(struct module *module) return 0; } -struct module *create_module_combine_sink(struct impl *impl, const char *argument) +int create_module_combine_sink(struct module * const module) { - struct module *module; - struct module_combine_sink_data *d; - struct pw_properties *props = NULL; + struct module_combine_sink_data * const d = module->user_data; + struct pw_properties * const props = module->props; const char *str; char *sink_name = NULL, **sink_names = NULL; struct spa_audio_info_raw info = { 0 }; @@ -512,14 +511,6 @@ struct module *create_module_combine_sink(struct impl *impl, const char *argumen PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); - if (!props) { - res = -EINVAL; - goto out; - } - if (argument) - module_args_add_props(props, argument); - if ((str = pw_properties_get(props, "sink_name")) != NULL) { sink_name = strdup(str); pw_properties_set(props, "sink_name", NULL); @@ -542,19 +533,11 @@ struct module *create_module_combine_sink(struct impl *impl, const char *argumen pw_properties_set(props, "resample_method", NULL); } - if (module_args_to_audioinfo(impl, props, &info) < 0) { + if (module_args_to_audioinfo(module->impl, props, &info) < 0) { res = -EINVAL; goto out; } - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->info = info; d->sink_name = sink_name; @@ -565,13 +548,12 @@ struct module *create_module_combine_sink(struct impl *impl, const char *argumen d->streams[i].cleanup = false; } - return module; + return 0; out: - pw_properties_free(props); free(sink_name); pw_free_strv(sink_names); - errno = -res; - return NULL; + + return res; } DEFINE_MODULE_INFO(module_combine_sink) = { @@ -580,4 +562,5 @@ DEFINE_MODULE_INFO(module_combine_sink) = { .load = module_combine_sink_load, .unload = module_combine_sink_unload, .properties = &SPA_DICT_INIT_ARRAY(module_combine_sink_info), + .data_size = sizeof(struct module_combine_sink_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-echo-cancel.c b/src/modules/module-protocol-pulse/modules/module-echo-cancel.c index 2528364f9..aa96263af 100644 --- a/src/modules/module-protocol-pulse/modules/module-echo-cancel.c +++ b/src/modules/module-protocol-pulse/modules/module-echo-cancel.c @@ -155,27 +155,24 @@ static const struct spa_dict_item module_echo_cancel_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_echo_cancel(struct impl *impl, const char *argument) +int create_module_echo_cancel(struct module * const module) { - struct module *module; - struct module_echo_cancel_data *d; - struct pw_properties *props = NULL, *aec_props = NULL, *sink_props = NULL, *source_props = NULL; + struct module_echo_cancel_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *aec_props = NULL, *sink_props = NULL, *source_props = NULL; const char *str; struct spa_audio_info_raw info = { 0 }; int res; PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); aec_props = pw_properties_new(NULL, NULL); source_props = pw_properties_new(NULL, NULL); sink_props = pw_properties_new(NULL, NULL); - if (!props ||!aec_props || !source_props || !sink_props) { + if (!aec_props || !source_props || !sink_props) { res = -EINVAL; goto out; } - if (argument) - module_args_add_props(props, argument); if ((str = pw_properties_get(props, "source_name")) != NULL) { pw_properties_set(source_props, PW_KEY_NODE_NAME, str); @@ -208,7 +205,7 @@ struct module *create_module_echo_cancel(struct impl *impl, const char *argument pw_properties_set(props, "sink_master", NULL); } - if (module_args_to_audioinfo(impl, props, &info) < 0) { + if (module_args_to_audioinfo(module->impl, props, &info) < 0) { res = -EINVAL; goto out; } @@ -233,29 +230,19 @@ struct module *create_module_echo_cancel(struct impl *impl, const char *argument pw_properties_set(props, "aec_args", NULL); } - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->props = aec_props; d->source_props = source_props; d->sink_props = sink_props; d->info = info; - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(aec_props); pw_properties_free(sink_props); pw_properties_free(source_props); - errno = -res; - return NULL; + return res; } DEFINE_MODULE_INFO(module_echo_cancel) = { @@ -264,4 +251,5 @@ DEFINE_MODULE_INFO(module_echo_cancel) = { .load = module_echo_cancel_load, .unload = module_echo_cancel_unload, .properties = &SPA_DICT_INIT_ARRAY(module_echo_cancel_info), + .data_size = sizeof(struct module_echo_cancel_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c b/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c index 93562e4e4..85b77f4d4 100644 --- a/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-ladspa-sink.c @@ -177,11 +177,11 @@ static void position_to_props(struct spa_audio_info_raw *info, struct pw_propert pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } -struct module *create_module_ladspa_sink(struct impl *impl, const char *argument) +int create_module_ladspa_sink(struct module * const module) { - struct module *module; - struct module_ladspa_sink_data *d; - struct pw_properties *props = NULL, *playback_props = NULL, *capture_props = NULL; + struct module_ladspa_sink_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *playback_props = NULL, *capture_props = NULL; const char *str; struct spa_audio_info_raw capture_info = { 0 }; struct spa_audio_info_raw playback_info = { 0 }; @@ -189,15 +189,12 @@ struct module *create_module_ladspa_sink(struct impl *impl, const char *argument PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); capture_props = pw_properties_new(NULL, NULL); playback_props = pw_properties_new(NULL, NULL); - if (!props || !capture_props || !playback_props) { + if (!capture_props || !playback_props) { res = -EINVAL; goto out; } - if (argument) - module_args_add_props(props, argument); if ((str = pw_properties_get(props, "sink_name")) != NULL) { pw_properties_set(capture_props, PW_KEY_NODE_NAME, str); @@ -226,7 +223,7 @@ struct module *create_module_ladspa_sink(struct impl *impl, const char *argument pw_properties_set(props, "master", NULL); } - if (module_args_to_audioinfo(impl, props, &capture_info) < 0) { + if (module_args_to_audioinfo(module->impl, props, &capture_info) < 0) { res = -EINVAL; goto out; } @@ -238,25 +235,16 @@ struct module *create_module_ladspa_sink(struct impl *impl, const char *argument if (pw_properties_get(playback_props, PW_KEY_NODE_PASSIVE) == NULL) pw_properties_set(playback_props, PW_KEY_NODE_PASSIVE, "true"); - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->capture_props = capture_props; d->playback_props = playback_props; - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(playback_props); pw_properties_free(capture_props); - errno = -res; - return NULL; + + return res; } DEFINE_MODULE_INFO(module_ladspa_sink) = { @@ -265,4 +253,5 @@ DEFINE_MODULE_INFO(module_ladspa_sink) = { .load = module_ladspa_sink_load, .unload = module_ladspa_sink_unload, .properties = &SPA_DICT_INIT_ARRAY(module_ladspa_sink_info), + .data_size = sizeof(struct module_ladspa_sink_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-ladspa-source.c b/src/modules/module-protocol-pulse/modules/module-ladspa-source.c index 8abf7622e..dfb017c73 100644 --- a/src/modules/module-protocol-pulse/modules/module-ladspa-source.c +++ b/src/modules/module-protocol-pulse/modules/module-ladspa-source.c @@ -177,11 +177,11 @@ static void position_to_props(struct spa_audio_info_raw *info, struct pw_propert pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } -struct module *create_module_ladspa_source(struct impl *impl, const char *argument) +int create_module_ladspa_source(struct module * const module) { - struct module *module; - struct module_ladspa_source_data *d; - struct pw_properties *props = NULL, *playback_props = NULL, *capture_props = NULL; + struct module_ladspa_source_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *playback_props = NULL, *capture_props = NULL; const char *str; struct spa_audio_info_raw capture_info = { 0 }; struct spa_audio_info_raw playback_info = { 0 }; @@ -189,15 +189,12 @@ struct module *create_module_ladspa_source(struct impl *impl, const char *argume PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); capture_props = pw_properties_new(NULL, NULL); playback_props = pw_properties_new(NULL, NULL); - if (!props || !capture_props || !playback_props) { + if (!capture_props || !playback_props) { res = -EINVAL; goto out; } - if (argument) - module_args_add_props(props, argument); if ((str = pw_properties_get(props, "source_name")) != NULL) { pw_properties_set(playback_props, PW_KEY_NODE_NAME, str); @@ -226,7 +223,7 @@ struct module *create_module_ladspa_source(struct impl *impl, const char *argume pw_properties_set(props, "master", NULL); } - if (module_args_to_audioinfo(impl, props, &playback_info) < 0) { + if (module_args_to_audioinfo(module->impl, props, &playback_info) < 0) { res = -EINVAL; goto out; } @@ -238,25 +235,16 @@ struct module *create_module_ladspa_source(struct impl *impl, const char *argume if (pw_properties_get(capture_props, PW_KEY_NODE_PASSIVE) == NULL) pw_properties_set(capture_props, PW_KEY_NODE_PASSIVE, "true"); - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->capture_props = capture_props; d->playback_props = playback_props; - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(playback_props); pw_properties_free(capture_props); - errno = -res; - return NULL; + + return res; } DEFINE_MODULE_INFO(module_ladspa_source) = { @@ -265,4 +253,5 @@ DEFINE_MODULE_INFO(module_ladspa_source) = { .load = module_ladspa_source_load, .unload = module_ladspa_source_unload, .properties = &SPA_DICT_INIT_ARRAY(module_ladspa_source_info), + .data_size = sizeof(struct module_ladspa_source_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-loopback.c b/src/modules/module-protocol-pulse/modules/module-loopback.c index 8a65806a6..0c5fc7ca4 100644 --- a/src/modules/module-protocol-pulse/modules/module-loopback.c +++ b/src/modules/module-protocol-pulse/modules/module-loopback.c @@ -143,26 +143,23 @@ static const struct spa_dict_item module_loopback_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_loopback(struct impl *impl, const char *argument) +int create_module_loopback(struct module * const module) { - struct module *module; - struct module_loopback_data *d; - struct pw_properties *props = NULL, *playback_props = NULL, *capture_props = NULL; + struct module_loopback_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *playback_props = NULL, *capture_props = NULL; const char *str; struct spa_audio_info_raw info = { 0 }; int res; PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); capture_props = pw_properties_new(NULL, NULL); playback_props = pw_properties_new(NULL, NULL); - if (!props || !capture_props || !playback_props) { + if (!capture_props || !playback_props) { res = -EINVAL; goto out; } - if (argument) - module_args_add_props(props, argument); /* The following modargs are not implemented: * adjust_time, max_latency_msec, fast_adjust_threshold_msec: these are just not relevant @@ -185,7 +182,7 @@ struct module *create_module_loopback(struct impl *impl, const char *argument) pw_properties_set(props, "sink", NULL); } - if (module_args_to_audioinfo(impl, props, &info) < 0) { + if (module_args_to_audioinfo(module->impl, props, &info) < 0) { res = -EINVAL; goto out; } @@ -227,27 +224,17 @@ struct module *create_module_loopback(struct impl *impl, const char *argument) pw_properties_set(props, "source_output_properties", NULL); } - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->capture_props = capture_props; d->playback_props = playback_props; d->info = info; - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(playback_props); pw_properties_free(capture_props); - errno = -res; - return NULL; + return res; } DEFINE_MODULE_INFO(module_loopback) = { @@ -256,4 +243,5 @@ DEFINE_MODULE_INFO(module_loopback) = { .load = module_loopback_load, .unload = module_loopback_unload, .properties = &SPA_DICT_INIT_ARRAY(module_loopback_info), + .data_size = sizeof(struct module_loopback_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c b/src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c index 2144c984d..09ffc34c1 100644 --- a/src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c +++ b/src/modules/module-protocol-pulse/modules/module-native-protocol-tcp.c @@ -79,27 +79,17 @@ static const struct spa_dict_item module_native_protocol_tcp_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_native_protocol_tcp(struct impl *impl, const char *argument) +int create_module_native_protocol_tcp(struct module * const module) { - struct module *module; - struct module_native_protocol_tcp_data *d; - struct pw_properties *props = NULL; + struct module_native_protocol_tcp_data * const d = module->user_data; + struct pw_properties * const props = module->props; const char *port, *listen, *auth; FILE *f; char *args; size_t size; - int res; PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); - if (props == NULL) { - res = -errno; - goto out; - } - if (argument) - module_args_add_props(props, argument); - if ((port = pw_properties_get(props, "port")) == NULL) port = SPA_STRINGIFY(PW_PROTOCOL_PULSE_DEFAULT_PORT); @@ -108,10 +98,8 @@ struct module *create_module_native_protocol_tcp(struct impl *impl, const char * auth = pw_properties_get(props, "auth-anonymous"); f = open_memstream(&args, &size); - if (f == NULL) { - res = -errno; - goto out; - } + if (f == NULL) + return -errno; fprintf(f, "[ { "); fprintf(f, " \"address\": \"tcp:%s%s%s\" ", @@ -124,21 +112,9 @@ struct module *create_module_native_protocol_tcp(struct impl *impl, const char * pw_properties_set(props, "pulse.tcp", args); free(args); - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; - return module; -out: - pw_properties_free(props); - errno = -res; - return NULL; + return 0; } DEFINE_MODULE_INFO(module_native_protocol_tcp) = { @@ -147,4 +123,5 @@ DEFINE_MODULE_INFO(module_native_protocol_tcp) = { .load = module_native_protocol_tcp_load, .unload = module_native_protocol_tcp_unload, .properties = &SPA_DICT_INIT_ARRAY(module_native_protocol_tcp_info), + .data_size = sizeof(struct module_native_protocol_tcp_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-null-sink.c b/src/modules/module-protocol-pulse/modules/module-null-sink.c index 139cb85f7..c70ede18b 100644 --- a/src/modules/module-protocol-pulse/modules/module-null-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-null-sink.c @@ -158,25 +158,15 @@ static const struct spa_dict_item module_null_sink_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_null_sink(struct impl *impl, const char *argument) +int create_module_null_sink(struct module * const module) { - struct module *module; - struct pw_properties *props = NULL; + struct pw_properties * const props = module->props; const char *str; struct spa_audio_info_raw info = { 0 }; uint32_t i; - int res; PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); - if (props == NULL) { - res = -EINVAL; - goto out; - } - if (argument) - module_args_add_props(props, argument); - if ((str = pw_properties_get(props, "sink_name")) != NULL) { pw_properties_set(props, PW_KEY_NODE_NAME, str); pw_properties_set(props, "sink_name", NULL); @@ -190,10 +180,8 @@ struct module *create_module_null_sink(struct impl *impl, const char *argument) pw_properties_set(props, "sink_properties", NULL); } - if (module_args_to_audioinfo(impl, props, &info) < 0) { - res = -EINVAL; - goto out; - } + if (module_args_to_audioinfo(module->impl, props, &info) < 0) + return -EINVAL; if (info.rate) pw_properties_setf(props, SPA_KEY_AUDIO_RATE, "%u", info.rate); @@ -227,18 +215,7 @@ struct module *create_module_null_sink(struct impl *impl, const char *argument) if (pw_properties_get(props, "monitor.channel-volumes") == NULL) pw_properties_set(props, "monitor.channel-volumes", "true"); - module = module_new(impl, sizeof(struct module_null_sink_data)); - if (module == NULL) { - res = -errno; - goto out; - } - module->props = props; - - return module; -out: - pw_properties_free(props); - errno = -res; - return NULL; + return 0; } DEFINE_MODULE_INFO(module_null_sink) = { @@ -247,4 +224,5 @@ DEFINE_MODULE_INFO(module_null_sink) = { .load = module_null_sink_load, .unload = module_null_sink_unload, .properties = &SPA_DICT_INIT_ARRAY(module_null_sink_info), + .data_size = sizeof(struct module_null_sink_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-pipe-sink.c b/src/modules/module-protocol-pulse/modules/module-pipe-sink.c index 3ba0994b0..e257d44d3 100644 --- a/src/modules/module-protocol-pulse/modules/module-pipe-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-pipe-sink.c @@ -218,11 +218,11 @@ static const struct spa_dict_item module_pipe_sink_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_pipe_sink(struct impl *impl, const char *argument) +int create_module_pipe_sink(struct module * const module) { - struct module *module; - struct module_pipesink_data *d; - struct pw_properties *props = NULL, *capture_props = NULL; + struct module_pipesink_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *capture_props = NULL; struct spa_audio_info_raw info = { 0 }; struct stat st; const char *str; @@ -233,16 +233,13 @@ struct module *create_module_pipe_sink(struct impl *impl, const char *argument) PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); capture_props = pw_properties_new(NULL, NULL); - if (!props || !capture_props) { + if (!capture_props) { res = -EINVAL; goto out; } - if (argument) - module_args_add_props(props, argument); - if (module_args_to_audioinfo(impl, props, &info) < 0) { + if (module_args_to_audioinfo(module->impl, props, &info) < 0) { res = -EINVAL; goto out; } @@ -302,14 +299,6 @@ struct module *create_module_pipe_sink(struct impl *impl, const char *argument) pw_properties_set(capture_props, PW_KEY_NODE_VIRTUAL, "true"); pw_properties_set(capture_props, PW_KEY_MEDIA_CLASS, "Audio/Sink"); - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->capture_props = capture_props; d->info = info; @@ -319,9 +308,8 @@ struct module *create_module_pipe_sink(struct impl *impl, const char *argument) pw_log_info("Successfully loaded module-pipe-sink"); - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(capture_props); if (filename) { if (do_unlink_fifo) @@ -330,9 +318,8 @@ out: } if (fd >= 0) close(fd); - errno = -res; - return NULL; + return res; } DEFINE_MODULE_INFO(module_pipe_sink) = { @@ -341,4 +328,5 @@ DEFINE_MODULE_INFO(module_pipe_sink) = { .load = module_pipe_sink_load, .unload = module_pipe_sink_unload, .properties = &SPA_DICT_INIT_ARRAY(module_pipe_sink_info), + .data_size = sizeof(struct module_pipesink_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-pipe-source.c b/src/modules/module-protocol-pulse/modules/module-pipe-source.c index 9b2fd5887..27d65e4f7 100644 --- a/src/modules/module-protocol-pulse/modules/module-pipe-source.c +++ b/src/modules/module-protocol-pulse/modules/module-pipe-source.c @@ -238,11 +238,11 @@ static const struct spa_dict_item module_pipe_source_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_pipe_source(struct impl *impl, const char *argument) +int create_module_pipe_source(struct module * const module) { - struct module *module; - struct module_pipesrc_data *d; - struct pw_properties *props = NULL, *playback_props = NULL; + struct module_pipesrc_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *playback_props = NULL; struct spa_audio_info_raw info = { 0 }; struct stat st; const char *str; @@ -253,16 +253,13 @@ struct module *create_module_pipe_source(struct impl *impl, const char *argument PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); playback_props = pw_properties_new(NULL, NULL); - if (!props || !playback_props) { + if (!playback_props) { res = -errno; goto out; } - if (argument) - module_args_add_props(props, argument); - if (module_args_to_audioinfo(impl, props, &info) < 0) { + if (module_args_to_audioinfo(module->impl, props, &info) < 0) { res = -EINVAL; goto out; } @@ -361,14 +358,6 @@ struct module *create_module_pipe_source(struct impl *impl, const char *argument pw_properties_set(playback_props, PW_KEY_NODE_VIRTUAL, "true"); pw_properties_set(playback_props, PW_KEY_MEDIA_CLASS, "Audio/Source"); - module = module_new(impl, sizeof(*d) + stride); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->playback_props = playback_props; d->info = info; @@ -379,18 +368,16 @@ struct module *create_module_pipe_source(struct impl *impl, const char *argument pw_log_info("Successfully loaded module-pipe-source"); - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(playback_props); if (do_unlink) unlink(filename); free(filename); if (fd >= 0) close(fd); - errno = -res; - return NULL; + return res; } DEFINE_MODULE_INFO(module_pipe_source) = { @@ -399,4 +386,5 @@ DEFINE_MODULE_INFO(module_pipe_source) = { .load = module_pipe_source_load, .unload = module_pipe_source_unload, .properties = &SPA_DICT_INIT_ARRAY(module_pipe_source_info), + .data_size = sizeof(struct module_pipesrc_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-raop-discover.c b/src/modules/module-protocol-pulse/modules/module-raop-discover.c index d4862b43f..5e1f63bb0 100644 --- a/src/modules/module-protocol-pulse/modules/module-raop-discover.c +++ b/src/modules/module-protocol-pulse/modules/module-raop-discover.c @@ -92,38 +92,14 @@ static const struct spa_dict_item module_raop_discover_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_raop_discover(struct impl *impl, const char *argument) +int create_module_raop_discover(struct module * const module) { - struct module *module; - struct module_raop_discover_data *d; - struct pw_properties *props = NULL; - int res; - PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); - if (props == NULL) { - res = -errno; - goto out; - } - if (argument != NULL) - module_args_add_props(props, argument); + struct module_raop_discover_data * const data = module->user_data; + data->module = module; - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; - d->module = module; - - return module; -out: - pw_properties_free(props); - errno = -res; - return NULL; + return 0; } DEFINE_MODULE_INFO(module_raop_discover) = { @@ -133,4 +109,5 @@ DEFINE_MODULE_INFO(module_raop_discover) = { .load = module_raop_discover_load, .unload = module_raop_discover_unload, .properties = &SPA_DICT_INIT_ARRAY(module_raop_discover_info), + .data_size = sizeof(struct module_raop_discover_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-remap-sink.c b/src/modules/module-protocol-pulse/modules/module-remap-sink.c index 51b8c9e28..2db1ea350 100644 --- a/src/modules/module-protocol-pulse/modules/module-remap-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-remap-sink.c @@ -143,11 +143,11 @@ static void position_to_props(struct spa_audio_info_raw *info, struct pw_propert pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } -struct module *create_module_remap_sink(struct impl *impl, const char *argument) +int create_module_remap_sink(struct module * const module) { - struct module *module; - struct module_remap_sink_data *d; - struct pw_properties *props = NULL, *playback_props = NULL, *capture_props = NULL; + struct module_remap_sink_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *playback_props = NULL, *capture_props = NULL; const char *str, *master; struct spa_audio_info_raw capture_info = { 0 }; struct spa_audio_info_raw playback_info = { 0 }; @@ -155,15 +155,12 @@ struct module *create_module_remap_sink(struct impl *impl, const char *argument) PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); capture_props = pw_properties_new(NULL, NULL); playback_props = pw_properties_new(NULL, NULL); - if (!props || !capture_props || !playback_props) { + if (!capture_props || !playback_props) { res = -EINVAL; goto out; } - if (argument) - module_args_add_props(props, argument); master = pw_properties_get(props, "master"); if (pw_properties_get(props, "sink_name") == NULL) { @@ -204,7 +201,7 @@ struct module *create_module_remap_sink(struct impl *impl, const char *argument) pw_properties_set(props, "master", NULL); } - if (module_args_to_audioinfo(impl, props, &capture_info) < 0) { + if (module_args_to_audioinfo(module->impl, props, &capture_info) < 0) { res = -EINVAL; goto out; } @@ -235,25 +232,16 @@ struct module *create_module_remap_sink(struct impl *impl, const char *argument) if (pw_properties_get(playback_props, PW_KEY_NODE_PASSIVE) == NULL) pw_properties_set(playback_props, PW_KEY_NODE_PASSIVE, "true"); - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->capture_props = capture_props; d->playback_props = playback_props; - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(playback_props); pw_properties_free(capture_props); - errno = -res; - return NULL; + + return res; } DEFINE_MODULE_INFO(module_remap_sink) = { @@ -262,4 +250,5 @@ DEFINE_MODULE_INFO(module_remap_sink) = { .load = module_remap_sink_load, .unload = module_remap_sink_unload, .properties = &SPA_DICT_INIT_ARRAY(module_remap_sink_info), + .data_size = sizeof(struct module_remap_sink_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-remap-source.c b/src/modules/module-protocol-pulse/modules/module-remap-source.c index af233e1cc..beb927469 100644 --- a/src/modules/module-protocol-pulse/modules/module-remap-source.c +++ b/src/modules/module-protocol-pulse/modules/module-remap-source.c @@ -143,11 +143,11 @@ static void position_to_props(struct spa_audio_info_raw *info, struct pw_propert pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } -struct module *create_module_remap_source(struct impl *impl, const char *argument) +int create_module_remap_source(struct module * const module) { - struct module *module; - struct module_remap_source_data *d; - struct pw_properties *props = NULL, *playback_props = NULL, *capture_props = NULL; + struct module_remap_source_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *playback_props = NULL, *capture_props = NULL; const char *str, *master; struct spa_audio_info_raw capture_info = { 0 }; struct spa_audio_info_raw playback_info = { 0 }; @@ -155,15 +155,12 @@ struct module *create_module_remap_source(struct impl *impl, const char *argumen PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); capture_props = pw_properties_new(NULL, NULL); playback_props = pw_properties_new(NULL, NULL); - if (!props || !capture_props || !playback_props) { + if (!capture_props || !playback_props) { res = -EINVAL; goto out; } - if (argument) - module_args_add_props(props, argument); master = pw_properties_get(props, "master"); if (pw_properties_get(props, "source_name") == NULL) { @@ -204,7 +201,7 @@ struct module *create_module_remap_source(struct impl *impl, const char *argumen pw_properties_set(props, "master", NULL); } - if (module_args_to_audioinfo(impl, props, &playback_info) < 0) { + if (module_args_to_audioinfo(module->impl, props, &playback_info) < 0) { res = -EINVAL; goto out; } @@ -235,25 +232,16 @@ struct module *create_module_remap_source(struct impl *impl, const char *argumen if (pw_properties_get(capture_props, PW_KEY_NODE_PASSIVE) == NULL) pw_properties_set(capture_props, PW_KEY_NODE_PASSIVE, "true"); - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->capture_props = capture_props; d->playback_props = playback_props; - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(playback_props); pw_properties_free(capture_props); - errno = -res; - return NULL; + + return res; } DEFINE_MODULE_INFO(module_remap_source) = { @@ -262,4 +250,5 @@ DEFINE_MODULE_INFO(module_remap_source) = { .load = module_remap_source_load, .unload = module_remap_source_unload, .properties = &SPA_DICT_INIT_ARRAY(module_remap_source_info), + .data_size = sizeof(struct module_remap_source_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-roc-sink-input.c b/src/modules/module-protocol-pulse/modules/module-roc-sink-input.c index 5da44845d..04a0ed549 100644 --- a/src/modules/module-protocol-pulse/modules/module-roc-sink-input.c +++ b/src/modules/module-protocol-pulse/modules/module-roc-sink-input.c @@ -124,27 +124,23 @@ static const struct spa_dict_item module_roc_sink_input_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_roc_sink_input(struct impl *impl, const char *argument) +int create_module_roc_sink_input(struct module * const module) { - struct module *module; - struct module_roc_sink_input_data *d; - struct pw_properties *props = NULL, *source_props = NULL, *roc_props = NULL; + struct module_roc_sink_input_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *source_props = NULL, *roc_props = NULL; const char *str; int res; PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); source_props = pw_properties_new(NULL, NULL); roc_props = pw_properties_new(NULL, NULL); - if (!props || !source_props || !roc_props) { + if (!source_props || !roc_props) { res = -errno; goto out; } - if (argument != NULL) - module_args_add_props(props, argument); - if ((str = pw_properties_get(props, "sink")) != NULL) { pw_properties_set(source_props, PW_KEY_TARGET_OBJECT, str); pw_properties_set(props, "sink", NULL); @@ -184,25 +180,16 @@ struct module *create_module_roc_sink_input(struct impl *impl, const char *argum pw_properties_set(props, "fec_code", NULL); } - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->source_props = source_props; d->roc_props = roc_props; - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(source_props); pw_properties_free(roc_props); - errno = -res; - return NULL; + + return res; } DEFINE_MODULE_INFO(module_roc_sink_input) = { @@ -211,4 +198,5 @@ DEFINE_MODULE_INFO(module_roc_sink_input) = { .load = module_roc_sink_input_load, .unload = module_roc_sink_input_unload, .properties = &SPA_DICT_INIT_ARRAY(module_roc_sink_input_info), + .data_size = sizeof(struct module_roc_sink_input_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-roc-sink.c b/src/modules/module-protocol-pulse/modules/module-roc-sink.c index e69c415c3..bf33dab68 100644 --- a/src/modules/module-protocol-pulse/modules/module-roc-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-roc-sink.c @@ -123,25 +123,22 @@ static const struct spa_dict_item module_roc_sink_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_roc_sink(struct impl *impl, const char *argument) +int create_module_roc_sink(struct module * const module) { - struct module *module; - struct module_roc_sink_data *d; - struct pw_properties *props = NULL, *sink_props = NULL, *roc_props = NULL; + struct module_roc_sink_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *sink_props = NULL, *roc_props = NULL; const char *str; int res; PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); sink_props = pw_properties_new(NULL, NULL); roc_props = pw_properties_new(NULL, NULL); - if (!props || !sink_props || !roc_props) { + if (!sink_props || !roc_props) { res = -errno; goto out; } - if (argument != NULL) - module_args_add_props(props, argument); if ((str = pw_properties_get(props, "sink_name")) != NULL) { pw_properties_set(sink_props, PW_KEY_NODE_NAME, str); @@ -185,25 +182,16 @@ struct module *create_module_roc_sink(struct impl *impl, const char *argument) pw_properties_set(props, "fec_code", NULL); } - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->sink_props = sink_props; d->roc_props = roc_props; - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(sink_props); pw_properties_free(roc_props); - errno = -res; - return NULL; + + return res; } DEFINE_MODULE_INFO(module_roc_sink) = { @@ -212,4 +200,5 @@ DEFINE_MODULE_INFO(module_roc_sink) = { .load = module_roc_sink_load, .unload = module_roc_sink_unload, .properties = &SPA_DICT_INIT_ARRAY(module_roc_sink_info), + .data_size = sizeof(struct module_roc_sink_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-roc-source.c b/src/modules/module-protocol-pulse/modules/module-roc-source.c index c465d5507..8ee98e27a 100644 --- a/src/modules/module-protocol-pulse/modules/module-roc-source.c +++ b/src/modules/module-protocol-pulse/modules/module-roc-source.c @@ -124,27 +124,23 @@ static const struct spa_dict_item module_roc_source_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_roc_source(struct impl *impl, const char *argument) +int create_module_roc_source(struct module * const module) { - struct module *module; - struct module_roc_source_data *d; - struct pw_properties *props = NULL, *source_props = NULL, *roc_props = NULL; + struct module_roc_source_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *source_props = NULL, *roc_props = NULL; const char *str; int res; PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); source_props = pw_properties_new(NULL, NULL); roc_props = pw_properties_new(NULL, NULL); - if (!props || !source_props || !roc_props) { + if (!source_props || !roc_props) { res = -errno; goto out; } - if (argument != NULL) - module_args_add_props(props, argument); - if ((str = pw_properties_get(props, "source_name")) != NULL) { pw_properties_set(source_props, PW_KEY_NODE_NAME, str); pw_properties_set(props, "source_name", NULL); @@ -189,25 +185,16 @@ struct module *create_module_roc_source(struct impl *impl, const char *argument) pw_properties_set(props, "fec_code", NULL); } - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->source_props = source_props; d->roc_props = roc_props; - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(source_props); pw_properties_free(roc_props); - errno = -res; - return NULL; + + return res; } DEFINE_MODULE_INFO(module_roc_source) = { @@ -216,4 +203,5 @@ DEFINE_MODULE_INFO(module_roc_source) = { .load = module_roc_source_load, .unload = module_roc_source_unload, .properties = &SPA_DICT_INIT_ARRAY(module_roc_source_info), + .data_size = sizeof(struct module_roc_source_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-simple-protocol-tcp.c b/src/modules/module-protocol-pulse/modules/module-simple-protocol-tcp.c index 4e3254d1a..3fd9542bb 100644 --- a/src/modules/module-protocol-pulse/modules/module-simple-protocol-tcp.c +++ b/src/modules/module-protocol-pulse/modules/module-simple-protocol-tcp.c @@ -130,25 +130,17 @@ static const struct spa_dict_item module_simple_protocol_tcp_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_simple_protocol_tcp(struct impl *impl, const char *argument) +int create_module_simple_protocol_tcp(struct module * const module) { - struct module *module; - struct module_simple_protocol_tcp_data *d; - struct pw_properties *props = NULL, *module_props = NULL; + struct module_simple_protocol_tcp_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *module_props = NULL; const char *str, *port, *listen; struct spa_audio_info_raw info = { 0 }; int res; PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); - if (props == NULL) { - res = -errno; - goto out; - } - if (argument) - module_args_add_props(props, argument); - module_props = pw_properties_new(NULL, NULL); if (module_props == NULL) { res = -errno; @@ -160,7 +152,7 @@ struct module *create_module_simple_protocol_tcp(struct impl *impl, const char * format_id2name(format_paname2id(str, strlen(str)))); pw_properties_set(props, "format", NULL); } - if (module_args_to_audioinfo(impl, props, &info) < 0) { + if (module_args_to_audioinfo(module->impl, props, &info) < 0) { res = -EINVAL; goto out; } @@ -197,24 +189,15 @@ struct module *create_module_simple_protocol_tcp(struct impl *impl, const char * pw_properties_setf(module_props, "server.address", "[ \"tcp:%s%s%s\" ]", listen ? listen : "", listen ? ":" : "", port); - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->module_props = module_props; d->info = info; - return module; + return 0; out: pw_properties_free(module_props); - pw_properties_free(props); - errno = -res; - return NULL; + + return res; } DEFINE_MODULE_INFO(module_simple_protocol_tcp) = { @@ -223,4 +206,5 @@ DEFINE_MODULE_INFO(module_simple_protocol_tcp) = { .load = module_simple_protocol_tcp_load, .unload = module_simple_protocol_tcp_unload, .properties = &SPA_DICT_INIT_ARRAY(module_simple_protocol_tcp_info), + .data_size = sizeof(struct module_simple_protocol_tcp_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-switch-on-connect.c b/src/modules/module-protocol-pulse/modules/module-switch-on-connect.c index 0134c35d5..4cfe8796b 100644 --- a/src/modules/module-protocol-pulse/modules/module-switch-on-connect.c +++ b/src/modules/module-protocol-pulse/modules/module-switch-on-connect.c @@ -245,11 +245,10 @@ static const struct spa_dict_item module_switch_on_connect_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_switch_on_connect(struct impl *impl, const char *argument) +int create_module_switch_on_connect(struct module * const module) { - struct module *module; - struct module_switch_on_connect_data *d; - struct pw_properties *props = NULL; + struct module_switch_on_connect_data * const d = module->user_data; + struct pw_properties * const props = module->props; regex_t *blocklist = NULL; bool only_from_unavailable = false, ignore_virtual = true; const char *str; @@ -257,14 +256,6 @@ struct module *create_module_switch_on_connect(struct impl *impl, const char *ar PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); - if (!props) { - res = -EINVAL; - goto out; - } - if (argument) - module_args_add_props(props, argument); - if ((str = pw_properties_get(props, "only_from_unavailable")) != NULL) { only_from_unavailable = module_args_parse_bool(str); pw_properties_set(props, "only_from_unavailable", NULL); @@ -292,14 +283,6 @@ struct module *create_module_switch_on_connect(struct impl *impl, const char *ar pw_properties_set(props, "blocklist", NULL); - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->blocklist = blocklist; d->ignore_virtual = ignore_virtual; @@ -310,17 +293,15 @@ struct module *create_module_switch_on_connect(struct impl *impl, const char *ar pw_log_warn("only_from_unavailable is not implemented"); } - return module; + return 0; out: - pw_properties_free(props); if (blocklist) { regfree(blocklist); free(blocklist); } - errno = -res; - return NULL; + return res; } DEFINE_MODULE_INFO(module_switch_on_connect) = { @@ -330,4 +311,5 @@ DEFINE_MODULE_INFO(module_switch_on_connect) = { .load = module_switch_on_connect_load, .unload = module_switch_on_connect_unload, .properties = &SPA_DICT_INIT_ARRAY(module_switch_on_connect_info), + .data_size = sizeof(struct module_switch_on_connect_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c b/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c index 7deb5f995..8070286c2 100644 --- a/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-tunnel-sink.c @@ -149,25 +149,22 @@ static void audio_info_to_props(struct spa_audio_info_raw *info, struct pw_prope pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } -struct module *create_module_tunnel_sink(struct impl *impl, const char *argument) +int create_module_tunnel_sink(struct module * const module) { - struct module *module; - struct module_tunnel_sink_data *d; - struct pw_properties *props = NULL, *stream_props = NULL; + struct module_tunnel_sink_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *stream_props = NULL; const char *str, *server, *remote_sink_name; struct spa_audio_info_raw info = { 0 }; int res; PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); stream_props = pw_properties_new(NULL, NULL); - if (props == NULL || stream_props == NULL) { + if (stream_props == NULL) { res = -ENOMEM; goto out; } - if (argument) - module_args_add_props(props, argument); remote_sink_name = pw_properties_get(props, "sink"); if (remote_sink_name) @@ -196,7 +193,7 @@ struct module *create_module_tunnel_sink(struct impl *impl, const char *argument module_args_add_props(stream_props, str); pw_properties_set(props, "sink_properties", NULL); } - if (module_args_to_audioinfo(impl, props, &info) < 0) { + if (module_args_to_audioinfo(module->impl, props, &info) < 0) { res = -EINVAL; goto out; } @@ -212,25 +209,16 @@ struct module *create_module_tunnel_sink(struct impl *impl, const char *argument pw_properties_set(stream_props, PW_KEY_AUDIO_FORMAT, format_id2name(id)); } - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->stream_props = stream_props; pw_properties_fetch_uint32(props, "latency_msec", &d->latency_msec); - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(stream_props); - errno = -res; - return NULL; + + return res; } DEFINE_MODULE_INFO(module_tunnel_sink) = { @@ -239,4 +227,5 @@ DEFINE_MODULE_INFO(module_tunnel_sink) = { .load = module_tunnel_sink_load, .unload = module_tunnel_sink_unload, .properties = &SPA_DICT_INIT_ARRAY(module_tunnel_sink_info), + .data_size = sizeof(struct module_tunnel_sink_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-tunnel-source.c b/src/modules/module-protocol-pulse/modules/module-tunnel-source.c index a390b7e98..7f2fcf031 100644 --- a/src/modules/module-protocol-pulse/modules/module-tunnel-source.c +++ b/src/modules/module-protocol-pulse/modules/module-tunnel-source.c @@ -149,25 +149,22 @@ static void audio_info_to_props(struct spa_audio_info_raw *info, struct pw_prope pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s); } -struct module *create_module_tunnel_source(struct impl *impl, const char *argument) +int create_module_tunnel_source(struct module * const module) { - struct module *module; - struct module_tunnel_source_data *d; - struct pw_properties *props = NULL, *stream_props = NULL; + struct module_tunnel_source_data * const d = module->user_data; + struct pw_properties * const props = module->props; + struct pw_properties *stream_props = NULL; const char *str, *server, *remote_source_name; struct spa_audio_info_raw info = { 0 }; int res; PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); stream_props = pw_properties_new(NULL, NULL); - if (props == NULL || stream_props == NULL) { + if (stream_props == NULL) { res = -ENOMEM; goto out; } - if (argument) - module_args_add_props(props, argument); remote_source_name = pw_properties_get(props, "source"); if (remote_source_name) @@ -195,32 +192,23 @@ struct module *create_module_tunnel_source(struct impl *impl, const char *argume module_args_add_props(stream_props, str); pw_properties_set(props, "source_properties", NULL); } - if (module_args_to_audioinfo(impl, props, &info) < 0) { + if (module_args_to_audioinfo(module->impl, props, &info) < 0) { res = -EINVAL; goto out; } audio_info_to_props(&info, stream_props); - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; d->module = module; d->stream_props = stream_props; pw_properties_fetch_uint32(props, "latency_msec", &d->latency_msec); - return module; + return 0; out: - pw_properties_free(props); pw_properties_free(stream_props); - errno = -res; - return NULL; + + return res; } DEFINE_MODULE_INFO(module_tunnel_source) = { @@ -229,4 +217,5 @@ DEFINE_MODULE_INFO(module_tunnel_source) = { .load = module_tunnel_source_load, .unload = module_tunnel_source_unload, .properties = &SPA_DICT_INIT_ARRAY(module_tunnel_source_info), + .data_size = sizeof(struct module_tunnel_source_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-x11-bell.c b/src/modules/module-protocol-pulse/modules/module-x11-bell.c index 6e2c3138a..b9d1847e8 100644 --- a/src/modules/module-protocol-pulse/modules/module-x11-bell.c +++ b/src/modules/module-protocol-pulse/modules/module-x11-bell.c @@ -110,38 +110,14 @@ static const struct spa_dict_item module_x11_bell_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_x11_bell(struct impl *impl, const char *argument) +int create_module_x11_bell(struct module * const module) { - struct pw_properties *props = NULL; - struct module_x11_bell_data *data; - struct module *module; - int res; - PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); - if (props == NULL) { - res = -EINVAL; - goto out; - } - if (argument) - module_args_add_props(props, argument); - - module = module_new(impl, sizeof(struct module_x11_bell_data)); - if (module == NULL) { - res = -errno; - goto out; - } - module->props = props; - - data = module->user_data; + struct module_x11_bell_data * const data = module->user_data; data->module = module; - return module; -out: - pw_properties_free(props); - errno = -res; - return NULL; + return 0; } DEFINE_MODULE_INFO(module_x11_bell) = { @@ -150,4 +126,5 @@ DEFINE_MODULE_INFO(module_x11_bell) = { .load = module_x11_bell_load, .unload = module_x11_bell_unload, .properties = &SPA_DICT_INIT_ARRAY(module_x11_bell_info), + .data_size = sizeof(struct module_x11_bell_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-zeroconf-discover.c b/src/modules/module-protocol-pulse/modules/module-zeroconf-discover.c index e0bcfe019..6d3180e48 100644 --- a/src/modules/module-protocol-pulse/modules/module-zeroconf-discover.c +++ b/src/modules/module-protocol-pulse/modules/module-zeroconf-discover.c @@ -92,38 +92,14 @@ static const struct spa_dict_item module_zeroconf_discover_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_zeroconf_discover(struct impl *impl, const char *argument) +int create_module_zeroconf_discover(struct module * const module) { - struct module *module; - struct module_zeroconf_discover_data *d; - struct pw_properties *props = NULL; - int res; - PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); - if (props == NULL) { - res = -errno; - goto out; - } - if (argument != NULL) - module_args_add_props(props, argument); + struct module_zeroconf_discover_data * const data = module->user_data; + data->module = module; - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; - d->module = module; - - return module; -out: - pw_properties_free(props); - errno = -res; - return NULL; + return 0; } DEFINE_MODULE_INFO(module_zeroconf_discover) = { @@ -133,4 +109,5 @@ DEFINE_MODULE_INFO(module_zeroconf_discover) = { .load = module_zeroconf_discover_load, .unload = module_zeroconf_discover_unload, .properties = &SPA_DICT_INIT_ARRAY(module_zeroconf_discover_info), + .data_size = sizeof(struct module_zeroconf_discover_data), }; diff --git a/src/modules/module-protocol-pulse/modules/module-zeroconf-publish.c b/src/modules/module-protocol-pulse/modules/module-zeroconf-publish.c index 2936fe6db..e407e65a0 100644 --- a/src/modules/module-protocol-pulse/modules/module-zeroconf-publish.c +++ b/src/modules/module-protocol-pulse/modules/module-zeroconf-publish.c @@ -647,41 +647,17 @@ static const struct spa_dict_item module_zeroconf_publish_info[] = { { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; -struct module *create_module_zeroconf_publish(struct impl *impl, const char *argument) +int create_module_zeroconf_publish(struct module * const module) { - struct module *module; - struct module_zeroconf_publish_data *d; - struct pw_properties *props = NULL; - int res; - PW_LOG_TOPIC_INIT(mod_topic); - props = pw_properties_new(NULL, NULL); - if (!props) { - res = -errno; - goto out; - } - if (argument) - module_args_add_props(props, argument); + struct module_zeroconf_publish_data * const data = module->user_data; + data->module = module; + data->port = pw_properties_get_uint32(module->props, "port", PW_PROTOCOL_PULSE_DEFAULT_PORT); + spa_list_init(&data->pending); + spa_list_init(&data->published); - module = module_new(impl, sizeof(*d)); - if (module == NULL) { - res = -errno; - goto out; - } - - module->props = props; - d = module->user_data; - d->module = module; - d->port = pw_properties_get_uint32(props, "port", PW_PROTOCOL_PULSE_DEFAULT_PORT); - spa_list_init(&d->pending); - spa_list_init(&d->published); - - return module; -out: - pw_properties_free(props); - errno = -res; - return NULL; + return 0; } DEFINE_MODULE_INFO(module_zeroconf_publish) = { @@ -690,4 +666,5 @@ DEFINE_MODULE_INFO(module_zeroconf_publish) = { .load = module_zeroconf_publish_load, .unload = module_zeroconf_publish_unload, .properties = &SPA_DICT_INIT_ARRAY(module_zeroconf_publish_info), + .data_size = sizeof(struct module_zeroconf_publish_data), };