mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -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)
|
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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue