mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	improve properties on objects
This commit is contained in:
		
							parent
							
								
									9c4e5f4e27
								
							
						
					
					
						commit
						6e0c279bc1
					
				
					 7 changed files with 56 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -121,6 +121,13 @@ static void *create_object(void *_data,
 | 
			
		|||
 | 
			
		||||
	pw_properties_setf(properties, PW_KEY_FACTORY_ID, "%d", d->this->global->id);
 | 
			
		||||
 | 
			
		||||
	client = resource ? pw_resource_get_client(resource): NULL;
 | 
			
		||||
 | 
			
		||||
	if (client) {
 | 
			
		||||
		pw_properties_setf(properties, PW_KEY_CLIENT_ID, "%d",
 | 
			
		||||
				client->global->id);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	slave = NULL;
 | 
			
		||||
	str = pw_properties_get(properties, "adapt.slave.node");
 | 
			
		||||
	if (str != NULL) {
 | 
			
		||||
| 
						 | 
				
			
			@ -164,8 +171,6 @@ static void *create_object(void *_data,
 | 
			
		|||
 | 
			
		||||
	pw_node_add_listener(adapter, &nd->adapter_listener, &node_events, nd);
 | 
			
		||||
 | 
			
		||||
	client = resource ? pw_resource_get_client(resource): NULL;
 | 
			
		||||
 | 
			
		||||
	pw_node_register(adapter, NULL);
 | 
			
		||||
 | 
			
		||||
	if (client) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,6 +63,8 @@ static void *create_object(void *_data,
 | 
			
		|||
			   struct pw_properties *properties,
 | 
			
		||||
			   uint32_t new_id)
 | 
			
		||||
{
 | 
			
		||||
	struct factory_data *data = _data;
 | 
			
		||||
	struct pw_factory *this = data->this;
 | 
			
		||||
	void *result;
 | 
			
		||||
	struct pw_resource *device_resource;
 | 
			
		||||
	struct pw_client *client = pw_resource_get_client(resource);
 | 
			
		||||
| 
						 | 
				
			
			@ -74,18 +76,33 @@ static void *create_object(void *_data,
 | 
			
		|||
		goto error_resource;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (properties == NULL)
 | 
			
		||||
		properties = pw_properties_new(NULL, NULL);
 | 
			
		||||
	if (properties == NULL) {
 | 
			
		||||
		res = -errno;
 | 
			
		||||
		goto error_properties;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pw_properties_setf(properties, PW_KEY_FACTORY_ID, "%d",
 | 
			
		||||
			pw_global_get_id(pw_factory_get_global(this)));
 | 
			
		||||
	pw_properties_setf(properties, PW_KEY_CLIENT_ID, "%d",
 | 
			
		||||
			pw_global_get_id(pw_client_get_global(client)));
 | 
			
		||||
 | 
			
		||||
	result = pw_client_device_new(device_resource, properties);
 | 
			
		||||
	if (result == NULL) {
 | 
			
		||||
		res = -errno;
 | 
			
		||||
		goto error_device;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return result;
 | 
			
		||||
 | 
			
		||||
error_resource:
 | 
			
		||||
	pw_log_error("can't create resource: %s", spa_strerror(res));
 | 
			
		||||
	pw_resource_error(resource, res, "can't create resource: %s", spa_strerror(res));
 | 
			
		||||
	goto error_exit;
 | 
			
		||||
error_properties:
 | 
			
		||||
	pw_log_error("can't create properties: %s", spa_strerror(res));
 | 
			
		||||
	pw_resource_error(resource, res, "can't create properties: %s", spa_strerror(res));
 | 
			
		||||
	goto error_exit_free;
 | 
			
		||||
error_device:
 | 
			
		||||
	pw_log_error("can't create device: %s", spa_strerror(res));
 | 
			
		||||
	pw_resource_error(resource, res, "can't create device: %s", spa_strerror(res));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,6 +85,7 @@ static void *create_object(void *_data,
 | 
			
		|||
	struct pw_device *device;
 | 
			
		||||
	const char *factory_name;
 | 
			
		||||
	struct device_data *nd;
 | 
			
		||||
	struct pw_client *client;
 | 
			
		||||
	int res;
 | 
			
		||||
 | 
			
		||||
	if (properties == NULL)
 | 
			
		||||
| 
						 | 
				
			
			@ -94,6 +95,16 @@ static void *create_object(void *_data,
 | 
			
		|||
	if (factory_name == NULL)
 | 
			
		||||
		goto error_properties;
 | 
			
		||||
 | 
			
		||||
	pw_properties_setf(properties, PW_KEY_FACTORY_ID, "%d",
 | 
			
		||||
			pw_global_get_id(pw_factory_get_global(data->this)));
 | 
			
		||||
 | 
			
		||||
	client = resource ? pw_resource_get_client(resource) : NULL;
 | 
			
		||||
 | 
			
		||||
	if (client) {
 | 
			
		||||
		pw_properties_setf(properties, PW_KEY_CLIENT_ID, "%d",
 | 
			
		||||
			pw_global_get_id(pw_client_get_global(client)));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	device = pw_spa_device_load(core,
 | 
			
		||||
				factory_name,
 | 
			
		||||
				0,
 | 
			
		||||
| 
						 | 
				
			
			@ -110,12 +121,12 @@ static void *create_object(void *_data,
 | 
			
		|||
 | 
			
		||||
	pw_device_add_listener(device, &nd->device_listener, &device_events, nd);
 | 
			
		||||
 | 
			
		||||
	if (resource)
 | 
			
		||||
	if (client) {
 | 
			
		||||
		pw_global_bind(pw_device_get_global(device),
 | 
			
		||||
			       pw_resource_get_client(resource),
 | 
			
		||||
			       PW_PERM_RWX,
 | 
			
		||||
			       version, new_id);
 | 
			
		||||
 | 
			
		||||
				client,
 | 
			
		||||
				PW_PERM_RWX, version,
 | 
			
		||||
				new_id);
 | 
			
		||||
	}
 | 
			
		||||
	return device;
 | 
			
		||||
 | 
			
		||||
error_properties:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -104,6 +104,7 @@ static void *create_object(void *_data,
 | 
			
		|||
	const char *factory_name;
 | 
			
		||||
	struct node_data *nd;
 | 
			
		||||
	int res;
 | 
			
		||||
	struct pw_client *client;
 | 
			
		||||
 | 
			
		||||
	if (properties == NULL)
 | 
			
		||||
		goto error_properties;
 | 
			
		||||
| 
						 | 
				
			
			@ -112,9 +113,16 @@ static void *create_object(void *_data,
 | 
			
		|||
	if (factory_name == NULL)
 | 
			
		||||
		goto error_properties;
 | 
			
		||||
 | 
			
		||||
	client = resource ? pw_resource_get_client(resource) : NULL;
 | 
			
		||||
 | 
			
		||||
	pw_properties_setf(properties, PW_KEY_FACTORY_ID, "%d",
 | 
			
		||||
			pw_global_get_id(pw_factory_get_global(data->this)));
 | 
			
		||||
 | 
			
		||||
	if (client) {
 | 
			
		||||
		pw_properties_setf(properties, PW_KEY_CLIENT_ID, "%d",
 | 
			
		||||
			pw_global_get_id(pw_client_get_global(client)));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	node = pw_spa_node_load(core,
 | 
			
		||||
				factory_name,
 | 
			
		||||
				PW_SPA_NODE_FLAG_ACTIVATE,
 | 
			
		||||
| 
						 | 
				
			
			@ -130,9 +138,8 @@ static void *create_object(void *_data,
 | 
			
		|||
 | 
			
		||||
	pw_node_add_listener(node, &nd->node_listener, &node_events, nd);
 | 
			
		||||
 | 
			
		||||
	if (resource) {
 | 
			
		||||
	if (client) {
 | 
			
		||||
		struct pw_resource *bound_resource;
 | 
			
		||||
		struct pw_client *client = pw_resource_get_client(resource);
 | 
			
		||||
 | 
			
		||||
		res = pw_global_bind(pw_node_get_global(node),
 | 
			
		||||
			       client,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -407,7 +407,9 @@ int pw_device_register(struct pw_device *device,
 | 
			
		|||
	struct pw_core *core = device->core;
 | 
			
		||||
	struct object_data *od;
 | 
			
		||||
	const char *keys[] = {
 | 
			
		||||
		PW_KEY_OBJECT_PATH,
 | 
			
		||||
		PW_KEY_MODULE_ID,
 | 
			
		||||
		PW_KEY_FACTORY_ID,
 | 
			
		||||
		PW_KEY_CLIENT_ID,
 | 
			
		||||
		PW_KEY_DEVICE_DESCRIPTION,
 | 
			
		||||
		PW_KEY_DEVICE_NAME,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1207,6 +1207,8 @@ int pw_link_register(struct pw_link *link,
 | 
			
		|||
	struct pw_core *core = link->core;
 | 
			
		||||
	struct pw_node *output_node, *input_node;
 | 
			
		||||
	const char *keys[] = {
 | 
			
		||||
		PW_KEY_OBJECT_PATH,
 | 
			
		||||
		PW_KEY_MODULE_ID,
 | 
			
		||||
		PW_KEY_FACTORY_ID,
 | 
			
		||||
		PW_KEY_CLIENT_ID,
 | 
			
		||||
		NULL
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -550,6 +550,8 @@ int pw_node_register(struct pw_node *this,
 | 
			
		|||
	struct pw_port *port;
 | 
			
		||||
	const char *keys[] = {
 | 
			
		||||
		PW_KEY_OBJECT_PATH,
 | 
			
		||||
		PW_KEY_MODULE_ID,
 | 
			
		||||
		PW_KEY_FACTORY_ID,
 | 
			
		||||
		PW_KEY_CLIENT_ID,
 | 
			
		||||
		PW_KEY_DEVICE_ID,
 | 
			
		||||
		PW_KEY_NODE_DESCRIPTION,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue