remote: add user data

This commit is contained in:
Wim Taymans 2017-09-15 14:51:39 +02:00
parent 2ca25e5bf4
commit 8a45fd4f31
13 changed files with 31 additions and 14 deletions

View file

@ -516,7 +516,7 @@ int main(int argc, char *argv[])
data.loop = pw_main_loop_new(NULL); data.loop = pw_main_loop_new(NULL);
data.core = pw_core_new(pw_main_loop_get_loop(data.loop), NULL); data.core = pw_core_new(pw_main_loop_get_loop(data.loop), NULL);
data.t = pw_core_get_type(data.core); 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; data.path = argc > 1 ? argv[1] : NULL;
pw_module_load(data.core, "libpipewire-module-spa-node-factory", NULL); pw_module_load(data.core, "libpipewire-module-spa-node-factory", NULL);

View file

@ -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) 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); 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.loop = pw_main_loop_new(NULL);
data.core = pw_core_new(pw_main_loop_get_loop(data.loop), NULL); data.core = pw_core_new(pw_main_loop_get_loop(data.loop), NULL);
data.t = pw_core_get_type(data.core); 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; data.path = argc > 1 ? argv[1] : NULL;
spa_list_init(&data.empty); spa_list_init(&data.empty);

View file

@ -125,7 +125,7 @@ int main(int argc, char *argv[])
pw_loop_add_signal(l, SIGTERM, do_quit, &data); pw_loop_add_signal(l, SIGTERM, do_quit, &data);
data.core = pw_core_new(l, NULL); data.core = pw_core_new(l, NULL);
data.t = pw_core_get_type(data.core); 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.library = argv[1];
data.factory = argv[2]; data.factory = argv[2];
if (argc > 3) if (argc > 3)

View file

@ -389,7 +389,7 @@ int main(int argc, char *argv[])
data.running = true; data.running = true;
data.core = pw_core_new(data.loop, NULL); data.core = pw_core_new(data.loop, NULL);
data.t = pw_core_get_type(data.core); 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; data.path = argc > 1 ? argv[1] : NULL;
init_type(&data.type, data.t->map); init_type(&data.type, data.t->map);

View file

@ -285,7 +285,7 @@ int main(int argc, char *argv[])
data.running = true; data.running = true;
data.core = pw_core_new(data.loop, NULL); data.core = pw_core_new(data.loop, NULL);
data.t = pw_core_get_type(data.core); 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); init_type(&data.type, data.t->map);

View file

@ -437,7 +437,7 @@ gst_pipewire_device_provider_probe (GstDeviceProvider * provider)
t = pw_core_get_type(c); t = pw_core_get_type(c);
if (!(r = pw_remote_new (c, NULL))) if (!(r = pw_remote_new (c, NULL, 0)))
goto failed; goto failed;
pw_remote_add_listener(r, &listener, &remote_events, self); 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); 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"); GST_ERROR_OBJECT (self, "Failed to create remote");
goto failed_remote; goto failed_remote;
} }

View file

@ -826,7 +826,7 @@ gst_pipewire_sink_open (GstPipeWireSink * pwsink)
goto mainloop_error; goto mainloop_error;
pw_thread_loop_lock (pwsink->main_loop); 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, pw_remote_add_listener (pwsink->remote,
&pwsink->remote_listener, &pwsink->remote_listener,

View file

@ -1032,7 +1032,7 @@ gst_pipewire_src_open (GstPipeWireSrc * pwsrc)
goto mainloop_failed; goto mainloop_failed;
pw_thread_loop_lock (pwsrc->main_loop); 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; goto no_remote;
pw_remote_add_listener (pwsrc->remote, pw_remote_add_listener (pwsrc->remote,

View file

@ -106,6 +106,7 @@ static void core_sync(void *object, uint32_t seq)
{ {
struct pw_resource *resource = object; 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); pw_core_resource_done(resource, seq);
} }

View file

@ -341,6 +341,8 @@ struct pw_remote {
char *error; char *error;
struct spa_hook_list listener_list; struct spa_hook_list listener_list;
void *user_data; /**< extra user data */
}; };

View file

@ -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_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 remote *impl;
struct pw_remote *this; struct pw_remote *this;
struct pw_protocol *protocol; struct pw_protocol *protocol;
const char *protocol_name; const char *protocol_name;
impl = calloc(1, sizeof(struct remote)); impl = calloc(1, sizeof(struct remote) + user_data_size);
if (impl == NULL) if (impl == NULL)
return NULL; return NULL;
@ -211,6 +212,9 @@ struct pw_remote *pw_remote_new(struct pw_core *core,
this->core = core; this->core = core;
if (user_data_size > 0)
this->user_data = SPA_MEMBER(impl, sizeof(struct remote), void);
if (properties == NULL) if (properties == NULL)
properties = pw_properties_new(NULL, NULL); properties = pw_properties_new(NULL, NULL);
if (properties == NULL) if (properties == NULL)
@ -288,6 +292,11 @@ struct pw_core *pw_remote_get_core(struct pw_remote *remote)
return remote->core; 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) enum pw_remote_state pw_remote_get_state(struct pw_remote *remote, const char **error)
{ {
if (error) if (error)

View file

@ -142,8 +142,9 @@ struct pw_remote_events {
* \return a new unconnected remote */ * \return a new unconnected remote */
struct pw_remote * struct pw_remote *
pw_remote_new(struct pw_core *core, /**< a \ref pw_core */ pw_remote_new(struct pw_core *core, /**< a \ref pw_core */
struct pw_properties *properties /**< optional properties, ownership of struct pw_properties *properties, /**< optional properties, ownership of
* the properties is taken.*/ ); * the properties is taken.*/
size_t user_data_size /**< extra user data size */);
/** Destroy a remote \memberof pw_remote */ /** Destroy a remote \memberof pw_remote */
void pw_remote_destroy(struct pw_remote *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 */ /** Get the core used to construct this remote */
struct pw_core *pw_remote_get_core(struct pw_remote *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 */ /** 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); enum pw_remote_state pw_remote_get_state(struct pw_remote *remote, const char **error);

View file

@ -401,7 +401,7 @@ int main(int argc, char *argv[])
pw_loop_add_signal(l, SIGTERM, do_quit, &data); pw_loop_add_signal(l, SIGTERM, do_quit, &data);
data.core = pw_core_new(l, NULL); 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_add_listener(data.remote, &data.remote_listener, &remote_events, &data);
pw_remote_connect(data.remote); pw_remote_connect(data.remote);