client-node: handle port set_io

This commit is contained in:
Wim Taymans 2018-02-26 16:16:53 +01:00
parent bc669f5def
commit 760e046dcf

View file

@ -528,8 +528,9 @@ spa_proxy_node_port_set_io(struct spa_node *node,
void *data, size_t size) void *data, size_t size)
{ {
struct proxy *this; struct proxy *this;
struct port *port;
struct pw_type *t; struct pw_type *t;
struct pw_memblock *mem;
uint32_t memid, mem_offset, mem_size;
if (node == NULL) if (node == NULL)
return -EINVAL; return -EINVAL;
@ -543,23 +544,16 @@ spa_proxy_node_port_set_io(struct spa_node *node,
if (!CHECK_PORT(this, direction, port_id)) if (!CHECK_PORT(this, direction, port_id))
return -EINVAL; return -EINVAL;
port = GET_PORT(this, direction, port_id);
if (id == t->io.Buffers)
port->io = data;
else {
struct pw_memblock *mem;
uint32_t memid, offset, size;
if (data) { if (data) {
if ((mem = pw_memblock_find(data)) == NULL) if ((mem = pw_memblock_find(data)) == NULL)
return -EINVAL; return -EINVAL;
memid = this->membase++; memid = this->membase++;
offset = mem->offset; mem_offset = mem->offset;
size = mem->size; if (mem->size - mem_offset < size)
return -EINVAL;
mem_size = mem->size;
pw_client_node_resource_add_mem(this->resource, pw_client_node_resource_add_mem(this->resource,
memid, memid,
@ -568,7 +562,7 @@ spa_proxy_node_port_set_io(struct spa_node *node,
} }
else { else {
memid = SPA_ID_INVALID; memid = SPA_ID_INVALID;
offset = size = 0; mem_offset = mem_size = 0;
} }
pw_client_node_resource_port_set_io(this->resource, pw_client_node_resource_port_set_io(this->resource,
@ -576,9 +570,9 @@ spa_proxy_node_port_set_io(struct spa_node *node,
direction, port_id, direction, port_id,
id, id,
memid, memid,
offset, size); mem_offset, mem_size);
}
return 0; return SPA_RESULT_RETURN_ASYNC(this->seq++);
} }
static int 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_transport_add_message(impl->transport, (struct pw_client_node_message *)
&PW_CLIENT_NODE_MESSAGE_PORT_REUSE_BUFFER_INIT(port_id, buffer_id)); &PW_CLIENT_NODE_MESSAGE_PORT_REUSE_BUFFER_INIT(port_id, buffer_id));
do_flush(this);
return 0; return 0;
} }