mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	client-node: handle port set_io
This commit is contained in:
		
							parent
							
								
									bc669f5def
								
							
						
					
					
						commit
						760e046dcf
					
				
					 1 changed files with 28 additions and 33 deletions
				
			
		| 
						 | 
				
			
			@ -528,8 +528,9 @@ spa_proxy_node_port_set_io(struct spa_node *node,
 | 
			
		|||
			   void *data, size_t size)
 | 
			
		||||
{
 | 
			
		||||
	struct proxy *this;
 | 
			
		||||
	struct port *port;
 | 
			
		||||
	struct pw_type *t;
 | 
			
		||||
	struct pw_memblock *mem;
 | 
			
		||||
	uint32_t memid, mem_offset, mem_size;
 | 
			
		||||
 | 
			
		||||
	if (node == NULL)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
| 
						 | 
				
			
			@ -543,42 +544,35 @@ spa_proxy_node_port_set_io(struct spa_node *node,
 | 
			
		|||
	if (!CHECK_PORT(this, direction, port_id))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	port = GET_PORT(this, direction, port_id);
 | 
			
		||||
	if (data) {
 | 
			
		||||
		if ((mem = pw_memblock_find(data)) == NULL)
 | 
			
		||||
			return -EINVAL;
 | 
			
		||||
 | 
			
		||||
		memid = this->membase++;
 | 
			
		||||
		mem_offset = mem->offset;
 | 
			
		||||
		if (mem->size - mem_offset < size)
 | 
			
		||||
			return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	if (id == t->io.Buffers)
 | 
			
		||||
		port->io = data;
 | 
			
		||||
	else {
 | 
			
		||||
		struct pw_memblock *mem;
 | 
			
		||||
		uint32_t memid, offset, size;
 | 
			
		||||
		mem_size = mem->size;
 | 
			
		||||
 | 
			
		||||
		if (data) {
 | 
			
		||||
 | 
			
		||||
			if ((mem = pw_memblock_find(data)) == NULL)
 | 
			
		||||
				return -EINVAL;
 | 
			
		||||
 | 
			
		||||
			memid = this->membase++;
 | 
			
		||||
			offset = mem->offset;
 | 
			
		||||
			size = mem->size;
 | 
			
		||||
 | 
			
		||||
			pw_client_node_resource_add_mem(this->resource,
 | 
			
		||||
							memid,
 | 
			
		||||
							t->data.MemFd,
 | 
			
		||||
							mem->fd, mem->flags);
 | 
			
		||||
		}
 | 
			
		||||
		else {
 | 
			
		||||
			memid = SPA_ID_INVALID;
 | 
			
		||||
			offset = size = 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		pw_client_node_resource_port_set_io(this->resource,
 | 
			
		||||
						    this->seq,
 | 
			
		||||
						    direction, port_id,
 | 
			
		||||
						    id,
 | 
			
		||||
						    memid,
 | 
			
		||||
						    offset, size);
 | 
			
		||||
		pw_client_node_resource_add_mem(this->resource,
 | 
			
		||||
						memid,
 | 
			
		||||
						t->data.MemFd,
 | 
			
		||||
						mem->fd, mem->flags);
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
	else {
 | 
			
		||||
		memid = SPA_ID_INVALID;
 | 
			
		||||
		mem_offset = mem_size = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pw_client_node_resource_port_set_io(this->resource,
 | 
			
		||||
					    this->seq,
 | 
			
		||||
					    direction, port_id,
 | 
			
		||||
					    id,
 | 
			
		||||
					    memid,
 | 
			
		||||
					    mem_offset, mem_size);
 | 
			
		||||
 | 
			
		||||
	return SPA_RESULT_RETURN_ASYNC(this->seq++);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
| 
						 | 
				
			
			@ -746,6 +740,7 @@ spa_proxy_node_port_reuse_buffer(struct spa_node *node, uint32_t port_id, uint32
 | 
			
		|||
 | 
			
		||||
	pw_client_node_transport_add_message(impl->transport, (struct pw_client_node_message *)
 | 
			
		||||
			&PW_CLIENT_NODE_MESSAGE_PORT_REUSE_BUFFER_INIT(port_id, buffer_id));
 | 
			
		||||
	do_flush(this);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue