From 8a45fd4f3197d03e0867ab0a51b3bac618071e41 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 15 Sep 2017 14:51:39 +0200 Subject: [PATCH] remote: add user data --- src/examples/export-sink.c | 2 +- src/examples/export-source.c | 3 ++- src/examples/export-spa.c | 2 +- src/examples/video-play.c | 2 +- src/examples/video-src.c | 2 +- src/gst/gstpipewiredeviceprovider.c | 4 ++-- src/gst/gstpipewiresink.c | 2 +- src/gst/gstpipewiresrc.c | 2 +- src/pipewire/core.c | 1 + src/pipewire/private.h | 2 ++ src/pipewire/remote.c | 13 +++++++++++-- src/pipewire/remote.h | 8 ++++++-- src/tools/pipewire-monitor.c | 2 +- 13 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/examples/export-sink.c b/src/examples/export-sink.c index 1c5c5a4c4..300da51ad 100644 --- a/src/examples/export-sink.c +++ b/src/examples/export-sink.c @@ -516,7 +516,7 @@ int main(int argc, char *argv[]) data.loop = pw_main_loop_new(NULL); data.core = pw_core_new(pw_main_loop_get_loop(data.loop), NULL); data.t = pw_core_get_type(data.core); - data.remote = pw_remote_new(data.core, NULL); + data.remote = pw_remote_new(data.core, NULL, 0); data.path = argc > 1 ? argv[1] : NULL; pw_module_load(data.core, "libpipewire-module-spa-node-factory", NULL); diff --git a/src/examples/export-source.c b/src/examples/export-source.c index c98c4f778..058ef43ec 100644 --- a/src/examples/export-source.c +++ b/src/examples/export-source.c @@ -299,6 +299,7 @@ static int impl_port_use_buffers(struct spa_node *node, enum spa_direction direc static inline void reuse_buffer(struct data *d, uint32_t id) { + pw_log_trace("sine-source %p: recycle buffer %d", d, id); spa_list_append(&d->empty, &d->buffers[id].link); } @@ -410,7 +411,7 @@ int main(int argc, char *argv[]) data.loop = pw_main_loop_new(NULL); data.core = pw_core_new(pw_main_loop_get_loop(data.loop), NULL); data.t = pw_core_get_type(data.core); - data.remote = pw_remote_new(data.core, NULL); + data.remote = pw_remote_new(data.core, NULL, 0); data.path = argc > 1 ? argv[1] : NULL; spa_list_init(&data.empty); diff --git a/src/examples/export-spa.c b/src/examples/export-spa.c index 4e5f67eee..8ab7d453f 100644 --- a/src/examples/export-spa.c +++ b/src/examples/export-spa.c @@ -125,7 +125,7 @@ int main(int argc, char *argv[]) pw_loop_add_signal(l, SIGTERM, do_quit, &data); data.core = pw_core_new(l, NULL); data.t = pw_core_get_type(data.core); - data.remote = pw_remote_new(data.core, NULL); + data.remote = pw_remote_new(data.core, NULL, 0); data.library = argv[1]; data.factory = argv[2]; if (argc > 3) diff --git a/src/examples/video-play.c b/src/examples/video-play.c index 5e8c5206b..0b88adcb5 100644 --- a/src/examples/video-play.c +++ b/src/examples/video-play.c @@ -389,7 +389,7 @@ int main(int argc, char *argv[]) data.running = true; data.core = pw_core_new(data.loop, NULL); data.t = pw_core_get_type(data.core); - data.remote = pw_remote_new(data.core, NULL); + data.remote = pw_remote_new(data.core, NULL, 0); data.path = argc > 1 ? argv[1] : NULL; init_type(&data.type, data.t->map); diff --git a/src/examples/video-src.c b/src/examples/video-src.c index 0c4227458..9d5bb6580 100644 --- a/src/examples/video-src.c +++ b/src/examples/video-src.c @@ -285,7 +285,7 @@ int main(int argc, char *argv[]) data.running = true; data.core = pw_core_new(data.loop, NULL); data.t = pw_core_get_type(data.core); - data.remote = pw_remote_new(data.core, NULL); + data.remote = pw_remote_new(data.core, NULL, 0); init_type(&data.type, data.t->map); diff --git a/src/gst/gstpipewiredeviceprovider.c b/src/gst/gstpipewiredeviceprovider.c index e3872a8de..69480d0b1 100644 --- a/src/gst/gstpipewiredeviceprovider.c +++ b/src/gst/gstpipewiredeviceprovider.c @@ -437,7 +437,7 @@ gst_pipewire_device_provider_probe (GstDeviceProvider * provider) t = pw_core_get_type(c); - if (!(r = pw_remote_new (c, NULL))) + if (!(r = pw_remote_new (c, NULL, 0))) goto failed; pw_remote_add_listener(r, &listener, &remote_events, self); @@ -527,7 +527,7 @@ gst_pipewire_device_provider_start (GstDeviceProvider * provider) pw_thread_loop_lock (self->main_loop); - if (!(self->remote = pw_remote_new (self->core, NULL))) { + if (!(self->remote = pw_remote_new (self->core, NULL, 0))) { GST_ERROR_OBJECT (self, "Failed to create remote"); goto failed_remote; } diff --git a/src/gst/gstpipewiresink.c b/src/gst/gstpipewiresink.c index 654b7469e..c3e214ecc 100644 --- a/src/gst/gstpipewiresink.c +++ b/src/gst/gstpipewiresink.c @@ -826,7 +826,7 @@ gst_pipewire_sink_open (GstPipeWireSink * pwsink) goto mainloop_error; pw_thread_loop_lock (pwsink->main_loop); - pwsink->remote = pw_remote_new (pwsink->core, NULL); + pwsink->remote = pw_remote_new (pwsink->core, NULL, 0); pw_remote_add_listener (pwsink->remote, &pwsink->remote_listener, diff --git a/src/gst/gstpipewiresrc.c b/src/gst/gstpipewiresrc.c index bee909934..c75a20709 100644 --- a/src/gst/gstpipewiresrc.c +++ b/src/gst/gstpipewiresrc.c @@ -1032,7 +1032,7 @@ gst_pipewire_src_open (GstPipeWireSrc * pwsrc) goto mainloop_failed; pw_thread_loop_lock (pwsrc->main_loop); - if ((pwsrc->remote = pw_remote_new (pwsrc->core, NULL)) == NULL) + if ((pwsrc->remote = pw_remote_new (pwsrc->core, NULL, 0)) == NULL) goto no_remote; pw_remote_add_listener (pwsrc->remote, diff --git a/src/pipewire/core.c b/src/pipewire/core.c index ce370df16..e0fa1f0af 100644 --- a/src/pipewire/core.c +++ b/src/pipewire/core.c @@ -106,6 +106,7 @@ static void core_sync(void *object, uint32_t seq) { struct pw_resource *resource = object; + pw_log_debug("core %p: sync %d from resource %p", resource->core, seq, resource); pw_core_resource_done(resource, seq); } diff --git a/src/pipewire/private.h b/src/pipewire/private.h index 1efbcf2ed..d70ccc3fd 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -341,6 +341,8 @@ struct pw_remote { char *error; struct spa_hook_list listener_list; + + void *user_data; /**< extra user data */ }; diff --git a/src/pipewire/remote.c b/src/pipewire/remote.c index 1ed038415..ab05614d0 100644 --- a/src/pipewire/remote.c +++ b/src/pipewire/remote.c @@ -195,14 +195,15 @@ static const struct pw_core_proxy_events core_proxy_events = { }; struct pw_remote *pw_remote_new(struct pw_core *core, - struct pw_properties *properties) + struct pw_properties *properties, + size_t user_data_size) { struct remote *impl; struct pw_remote *this; struct pw_protocol *protocol; const char *protocol_name; - impl = calloc(1, sizeof(struct remote)); + impl = calloc(1, sizeof(struct remote) + user_data_size); if (impl == NULL) return NULL; @@ -211,6 +212,9 @@ struct pw_remote *pw_remote_new(struct pw_core *core, this->core = core; + if (user_data_size > 0) + this->user_data = SPA_MEMBER(impl, sizeof(struct remote), void); + if (properties == NULL) properties = pw_properties_new(NULL, NULL); if (properties == NULL) @@ -288,6 +292,11 @@ struct pw_core *pw_remote_get_core(struct pw_remote *remote) return remote->core; } +void *pw_remote_get_user_data(struct pw_remote *remote) +{ + return remote->user_data; +} + enum pw_remote_state pw_remote_get_state(struct pw_remote *remote, const char **error) { if (error) diff --git a/src/pipewire/remote.h b/src/pipewire/remote.h index 9c901ca56..62f5e1e47 100644 --- a/src/pipewire/remote.h +++ b/src/pipewire/remote.h @@ -142,8 +142,9 @@ struct pw_remote_events { * \return a new unconnected remote */ struct pw_remote * pw_remote_new(struct pw_core *core, /**< a \ref pw_core */ - struct pw_properties *properties /**< optional properties, ownership of - * the properties is taken.*/ ); + struct pw_properties *properties, /**< optional properties, ownership of + * the properties is taken.*/ + size_t user_data_size /**< extra user data size */); /** Destroy a remote \memberof pw_remote */ void pw_remote_destroy(struct pw_remote *remote); @@ -151,6 +152,9 @@ void pw_remote_destroy(struct pw_remote *remote); /** Get the core used to construct this remote */ struct pw_core *pw_remote_get_core(struct pw_remote *remote); +/** Get the user_data. The size was given in \ref pw_remote_new */ +void *pw_remote_get_user_data(struct pw_remote *remote); + /** Get the current state, \a error is set when state is \ref PW_REMOTE_STATE_ERROR */ enum pw_remote_state pw_remote_get_state(struct pw_remote *remote, const char **error); diff --git a/src/tools/pipewire-monitor.c b/src/tools/pipewire-monitor.c index 62019e1fa..f3bd4e0a8 100644 --- a/src/tools/pipewire-monitor.c +++ b/src/tools/pipewire-monitor.c @@ -401,7 +401,7 @@ int main(int argc, char *argv[]) pw_loop_add_signal(l, SIGTERM, do_quit, &data); data.core = pw_core_new(l, NULL); - data.remote = pw_remote_new(data.core, NULL); + data.remote = pw_remote_new(data.core, NULL, 0); pw_remote_add_listener(data.remote, &data.remote_listener, &remote_events, &data); pw_remote_connect(data.remote);