From b7c5e0069777accf4a60f0728a895ecdc6431709 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 25 Nov 2019 15:58:19 +0100 Subject: [PATCH] add some missing events Add initialized events for completeness --- src/pipewire/client.c | 2 ++ src/pipewire/client.h | 3 +++ src/pipewire/device.c | 2 ++ src/pipewire/device.h | 2 ++ src/pipewire/factory.c | 3 +++ src/pipewire/factory.h | 4 ++++ src/pipewire/link.c | 2 ++ src/pipewire/link.h | 3 +++ src/pipewire/module.c | 5 ++++- src/pipewire/module.h | 4 ++++ src/pipewire/node.c | 3 ++- src/pipewire/port.c | 2 ++ src/pipewire/port.h | 3 +++ src/pipewire/private.h | 8 ++++++++ 14 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/pipewire/client.c b/src/pipewire/client.c index 6f58d938a..8c84b9d1d 100644 --- a/src/pipewire/client.c +++ b/src/pipewire/client.c @@ -412,6 +412,8 @@ int pw_client_register(struct pw_client *client, pw_properties_setf(client->properties, PW_KEY_OBJECT_ID, "%d", client->info.id); client->info.props = &client->properties->dict; + pw_client_emit_initialized(client); + pw_global_add_listener(client->global, &client->global_listener, &global_events, client); pw_global_register(client->global); diff --git a/src/pipewire/client.h b/src/pipewire/client.h index 7de801275..f93215b5f 100644 --- a/src/pipewire/client.h +++ b/src/pipewire/client.h @@ -91,6 +91,9 @@ struct pw_client_events { /** emited right before the client is freed */ void (*free) (void *data); + /** the client is initialized */ + void (*initialized) (void *data); + /** emited when the client info changed */ void (*info_changed) (void *data, const struct pw_client_info *info); diff --git a/src/pipewire/device.c b/src/pipewire/device.c index 3e3e1efaa..844eeaaa6 100644 --- a/src/pipewire/device.c +++ b/src/pipewire/device.c @@ -445,6 +445,8 @@ int pw_device_register(struct pw_device *device, pw_properties_setf(device->properties, PW_KEY_OBJECT_ID, "%d", device->info.id); device->info.props = &device->properties->dict; + pw_device_emit_initialized(device); + pw_global_add_listener(device->global, &device->global_listener, &global_events, device); pw_global_register(device->global); diff --git a/src/pipewire/device.h b/src/pipewire/device.h index 73a286a16..d3ac75440 100644 --- a/src/pipewire/device.h +++ b/src/pipewire/device.h @@ -58,6 +58,8 @@ struct pw_device_events { void (*destroy) (void *data); /** the device is freed */ void (*free) (void *data); + /** the device is initialized */ + void (*initialized) (void *data); /** the device info changed */ void (*info_changed) (void *data, const struct pw_device_info *info); diff --git a/src/pipewire/factory.c b/src/pipewire/factory.c index 971d43489..b6648a3fe 100644 --- a/src/pipewire/factory.c +++ b/src/pipewire/factory.c @@ -99,6 +99,7 @@ void pw_factory_destroy(struct pw_factory *factory) pw_global_destroy(factory->global); } + pw_factory_emit_free(factory); pw_log_debug(NAME" %p: free", factory); free((char *)factory->info.name); @@ -232,6 +233,8 @@ int pw_factory_register(struct pw_factory *factory, pw_properties_setf(factory->properties, PW_KEY_OBJECT_ID, "%d", factory->info.id); factory->info.props = &factory->properties->dict; + pw_factory_emit_initialized(factory); + pw_global_add_listener(factory->global, &factory->global_listener, &global_events, factory); pw_global_register(factory->global); diff --git a/src/pipewire/factory.h b/src/pipewire/factory.h index a4a07c014..041be1ff9 100644 --- a/src/pipewire/factory.h +++ b/src/pipewire/factory.h @@ -50,6 +50,10 @@ struct pw_factory_events { /** the factory is destroyed */ void (*destroy) (void *data); + /** the factory is freed */ + void (*free) (void *data); + /** the factory is initialized */ + void (*initialized) (void *data); }; struct pw_factory_implementation { diff --git a/src/pipewire/link.c b/src/pipewire/link.c index c51e75dcc..c02d624c0 100644 --- a/src/pipewire/link.c +++ b/src/pipewire/link.c @@ -1248,6 +1248,8 @@ int pw_link_register(struct pw_link *link, pw_properties_setf(link->properties, PW_KEY_OBJECT_ID, "%d", link->info.id); link->info.props = &link->properties->dict; + pw_link_emit_initialized(link); + pw_global_add_listener(link->global, &link->global_listener, &global_events, link); pw_global_register(link->global); diff --git a/src/pipewire/link.h b/src/pipewire/link.h index 0d3decc7f..358efaca9 100644 --- a/src/pipewire/link.h +++ b/src/pipewire/link.h @@ -61,6 +61,9 @@ struct pw_link_events { /** A link is freed */ void (*free) (void *data); + /** a Link is initialized */ + void (*initialized) (void *data); + /** The info changed on a link */ void (*info_changed) (void *data, const struct pw_link_info *info); diff --git a/src/pipewire/module.c b/src/pipewire/module.c index 438acdbe8..c10df9eff 100644 --- a/src/pipewire/module.c +++ b/src/pipewire/module.c @@ -264,6 +264,8 @@ pw_module_load(struct pw_core *core, pw_properties_setf(this->properties, PW_KEY_OBJECT_ID, "%d", this->info.id); this->info.props = &this->properties->dict; + pw_module_emit_initialized(this); + pw_global_add_listener(this->global, &this->global_listener, &global_events, this); if ((res = init_func(this, args)) < 0) @@ -334,7 +336,8 @@ void pw_module_destroy(struct pw_module *module) pw_global_destroy(module->global); } - pw_log_debug(NAME" %p: destroy", module); + pw_log_debug(NAME" %p: free", module); + pw_module_emit_free(module); free((char *) module->info.name); free((char *) module->info.filename); free((char *) module->info.args); diff --git a/src/pipewire/module.h b/src/pipewire/module.h index 0a3e7e652..53bddd3df 100644 --- a/src/pipewire/module.h +++ b/src/pipewire/module.h @@ -63,6 +63,10 @@ struct pw_module_events { /** The module is destroyed */ void (*destroy) (void *data); + /** The module is freed */ + void (*free) (void *data); + /** The module is initialized */ + void (*initialized) (void *data); /** The module is registered. This is a good time to register * objectes created from the module. */ diff --git a/src/pipewire/node.c b/src/pipewire/node.c index e49c73060..49b4e0d5f 100644 --- a/src/pipewire/node.c +++ b/src/pipewire/node.c @@ -607,8 +607,9 @@ int pw_node_register(struct pw_node *this, insert_driver(core, this); this->registered = true; + this->rt.activation->position.clock.id = this->global->id; + this->info.id = this->global->id; - this->rt.activation->position.clock.id = this->info.id; pw_properties_setf(this->properties, PW_KEY_OBJECT_ID, "%d", this->info.id); this->info.props = &this->properties->dict; diff --git a/src/pipewire/port.c b/src/pipewire/port.c index 0c41a1363..01fd3479c 100644 --- a/src/pipewire/port.c +++ b/src/pipewire/port.c @@ -819,6 +819,8 @@ int pw_port_register(struct pw_port *port, pw_properties_setf(port->properties, PW_KEY_OBJECT_ID, "%d", port->info.id); port->info.props = &port->properties->dict; + pw_port_emit_initialized(port); + return pw_global_register(port->global); } diff --git a/src/pipewire/port.h b/src/pipewire/port.h index 9245e7b8c..a29ed52c3 100644 --- a/src/pipewire/port.h +++ b/src/pipewire/port.h @@ -68,6 +68,9 @@ struct pw_port_events { /** The port is freed */ void (*free) (void *data); + /** The port is initialized */ + void (*initialized) (void *data); + /** the port info changed */ void (*info_changed) (void *data, const struct pw_port_info *info); diff --git a/src/pipewire/private.h b/src/pipewire/private.h index ead19dc32..77b46b3a0 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -91,6 +91,7 @@ typedef uint32_t (*pw_permission_func_t) (struct pw_global *global, #define pw_client_emit_destroy(o) pw_client_emit(o, destroy, 0) #define pw_client_emit_free(o) pw_client_emit(o, free, 0) +#define pw_client_emit_initialized(o) pw_client_emit(o, initialized, 0) #define pw_client_emit_info_changed(o,i) pw_client_emit(o, info_changed, 0, i) #define pw_client_emit_resource_added(o,r) pw_client_emit(o, resource_added, 0, r) #define pw_client_emit_resource_impl(o,r) pw_client_emit(o, resource_impl, 0, r) @@ -280,6 +281,7 @@ struct pw_main_loop { #define pw_device_emit(o,m,v,...) spa_hook_list_call(&o->listener_list, struct pw_device_events, m, v, ##__VA_ARGS__) #define pw_device_emit_destroy(m) pw_device_emit(m, destroy, 0) #define pw_device_emit_free(m) pw_device_emit(m, free, 0) +#define pw_device_emit_initialized(m) pw_device_emit(m, initialized, 0) #define pw_device_emit_info_changed(n,i) pw_device_emit(n, info_changed, 0, i) struct pw_device { @@ -307,6 +309,8 @@ struct pw_device { #define pw_module_emit(o,m,v,...) spa_hook_list_call(&o->listener_list, struct pw_module_events, m, v, ##__VA_ARGS__) #define pw_module_emit_destroy(m) pw_module_emit(m, destroy, 0) +#define pw_module_emit_free(m) pw_module_emit(m, free, 0) +#define pw_module_emit_initialized(m) pw_module_emit(m, initialized, 0) #define pw_module_emit_registered(m) pw_module_emit(m, registered, 0) struct pw_module { @@ -549,6 +553,7 @@ struct pw_port_implementation { #define pw_port_emit(o,m,v,...) spa_hook_list_call(&o->listener_list, struct pw_port_events, m, v, ##__VA_ARGS__) #define pw_port_emit_destroy(p) pw_port_emit(p, destroy, 0) #define pw_port_emit_free(p) pw_port_emit(p, free, 0) +#define pw_port_emit_initialized(p) pw_port_emit(p, initialized, 0) #define pw_port_emit_info_changed(p,i) pw_port_emit(p, info_changed, 0, i) #define pw_port_emit_link_added(p,l) pw_port_emit(p, link_added, 0, l) #define pw_port_emit_link_removed(p,l) pw_port_emit(p, link_removed, 0, l) @@ -631,6 +636,7 @@ struct pw_control_link { #define pw_link_emit(o,m,v,...) spa_hook_list_call(&o->listener_list, struct pw_link_events, m, v, ##__VA_ARGS__) #define pw_link_emit_destroy(l) pw_link_emit(l, destroy, 0) #define pw_link_emit_free(l) pw_link_emit(l, free, 0) +#define pw_link_emit_initialized(l) pw_link_emit(l, initialized, 0) #define pw_link_emit_info_changed(l,i) pw_link_emit(l, info_changed, 0, i) #define pw_link_emit_state_changed(l,...) pw_link_emit(l, state_changed, 0, __VA_ARGS__) #define pw_link_emit_port_unlinked(l,p) pw_link_emit(l, port_unlinked, 0, p) @@ -825,6 +831,8 @@ struct pw_filter { #define pw_factory_emit(s,m,v,...) spa_hook_list_call(&s->listener_list, struct pw_factory_events, m, v, ##__VA_ARGS__) #define pw_factory_emit_destroy(s) pw_factory_emit(s, destroy, 0) +#define pw_factory_emit_free(s) pw_factory_emit(s, free, 0) +#define pw_factory_emit_initialized(s) pw_factory_emit(s, initialized, 0) struct pw_factory { struct pw_core *core; /**< the core */