mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	remote: add user data
This commit is contained in:
		
							parent
							
								
									2ca25e5bf4
								
							
						
					
					
						commit
						8a45fd4f31
					
				
					 13 changed files with 31 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -341,6 +341,8 @@ struct pw_remote {
 | 
			
		|||
	char *error;
 | 
			
		||||
 | 
			
		||||
	struct spa_hook_list listener_list;
 | 
			
		||||
 | 
			
		||||
	void *user_data;			/**< extra user data */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue