mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
add node-update support
This commit is contained in:
parent
45ee7b4490
commit
55c3262a6a
2 changed files with 58 additions and 6 deletions
|
|
@ -394,6 +394,21 @@ parse_format (SpaMemory *mem, void *p, off_t offset)
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
iter_parse_node_update (struct stack_iter *si, SpaControlCmdNodeUpdate *nu)
|
||||||
|
{
|
||||||
|
void *p;
|
||||||
|
SpaMemory *mem;
|
||||||
|
|
||||||
|
memcpy (nu, si->data, sizeof (SpaControlCmdNodeUpdate));
|
||||||
|
|
||||||
|
mem = spa_memory_alloc_size (SPA_MEMORY_POOL_LOCAL, si->data, si->size);
|
||||||
|
p = spa_memory_ensure_ptr (mem);
|
||||||
|
|
||||||
|
if (nu->props)
|
||||||
|
nu->props = parse_props (mem, p, SPA_PTR_TO_INT (nu->props));
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
iter_parse_port_update (struct stack_iter *si, SpaControlCmdPortUpdate *pu)
|
iter_parse_port_update (struct stack_iter *si, SpaControlCmdPortUpdate *pu)
|
||||||
{
|
{
|
||||||
|
|
@ -447,7 +462,7 @@ spa_control_iter_parse_cmd (SpaControlIter *iter,
|
||||||
switch (si->cmd) {
|
switch (si->cmd) {
|
||||||
/* C -> S */
|
/* C -> S */
|
||||||
case SPA_CONTROL_CMD_NODE_UPDATE:
|
case SPA_CONTROL_CMD_NODE_UPDATE:
|
||||||
fprintf (stderr, "implement iter of %d\n", si->cmd);
|
iter_parse_node_update (si, command);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SPA_CONTROL_CMD_PORT_UPDATE:
|
case SPA_CONTROL_CMD_PORT_UPDATE:
|
||||||
|
|
@ -930,6 +945,30 @@ write_format (void *p, const SpaFormat *format)
|
||||||
return write_props (p, &format->props, sizeof (SpaFormat));
|
return write_props (p, &format->props, sizeof (SpaFormat));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
builder_add_node_update (struct stack_builder *sb, SpaControlCmdNodeUpdate *nu)
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
void *p, *base;
|
||||||
|
SpaControlCmdNodeUpdate *d;
|
||||||
|
|
||||||
|
/* calc len */
|
||||||
|
len = sizeof (SpaControlCmdNodeUpdate);
|
||||||
|
len += calc_props_len (nu->props);
|
||||||
|
|
||||||
|
base = builder_add_cmd (sb, SPA_CONTROL_CMD_NODE_UPDATE, len);
|
||||||
|
memcpy (base, nu, sizeof (SpaControlCmdNodeUpdate));
|
||||||
|
d = base;
|
||||||
|
|
||||||
|
p = SPA_MEMBER (d, sizeof (SpaControlCmdNodeUpdate), void);
|
||||||
|
if (nu->props) {
|
||||||
|
len = write_props (p, nu->props, sizeof (SpaProps));
|
||||||
|
d->props = SPA_INT_TO_PTR (SPA_PTRDIFF (p, base));
|
||||||
|
} else {
|
||||||
|
d->props = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
builder_add_port_update (struct stack_builder *sb, SpaControlCmdPortUpdate *pu)
|
builder_add_port_update (struct stack_builder *sb, SpaControlCmdPortUpdate *pu)
|
||||||
{
|
{
|
||||||
|
|
@ -974,7 +1013,6 @@ builder_add_port_update (struct stack_builder *sb, SpaControlCmdPortUpdate *pu)
|
||||||
|
|
||||||
/* FIXME add more things */
|
/* FIXME add more things */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
builder_add_set_format (struct stack_builder *sb, SpaControlCmdSetFormat *sf)
|
builder_add_set_format (struct stack_builder *sb, SpaControlCmdSetFormat *sf)
|
||||||
{
|
{
|
||||||
|
|
@ -1018,7 +1056,7 @@ spa_control_builder_add_cmd (SpaControlBuilder *builder,
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
/* C -> S */
|
/* C -> S */
|
||||||
case SPA_CONTROL_CMD_NODE_UPDATE:
|
case SPA_CONTROL_CMD_NODE_UPDATE:
|
||||||
fprintf (stderr, "implement builder of %d\n", cmd);
|
builder_add_node_update (sb, command);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SPA_CONTROL_CMD_PORT_UPDATE:
|
case SPA_CONTROL_CMD_PORT_UPDATE:
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,9 @@ struct _SpaProxy {
|
||||||
SpaPollFd fds[1];
|
SpaPollFd fds[1];
|
||||||
SpaPollItem poll;
|
SpaPollItem poll;
|
||||||
|
|
||||||
|
unsigned int max_inputs;
|
||||||
unsigned int n_inputs;
|
unsigned int n_inputs;
|
||||||
|
unsigned int max_outputs;
|
||||||
unsigned int n_outputs;
|
unsigned int n_outputs;
|
||||||
SpaProxyPort ports[MAX_PORTS];
|
SpaProxyPort ports[MAX_PORTS];
|
||||||
};
|
};
|
||||||
|
|
@ -293,9 +295,9 @@ spa_proxy_node_get_n_ports (SpaNode *node,
|
||||||
if (n_output_ports)
|
if (n_output_ports)
|
||||||
*n_output_ports = this->n_outputs;
|
*n_output_ports = this->n_outputs;
|
||||||
if (max_input_ports)
|
if (max_input_ports)
|
||||||
*max_input_ports = MAX_INPUTS;
|
*max_input_ports = this->max_inputs;
|
||||||
if (max_output_ports)
|
if (max_output_ports)
|
||||||
*max_output_ports = MAX_OUTPUTS;
|
*max_output_ports = this->max_outputs;
|
||||||
|
|
||||||
return SPA_RESULT_OK;
|
return SPA_RESULT_OK;
|
||||||
}
|
}
|
||||||
|
|
@ -914,11 +916,23 @@ parse_control (SpaProxy *this,
|
||||||
fprintf (stderr, "proxy %p: got unexpected control %d\n", this, cmd);
|
fprintf (stderr, "proxy %p: got unexpected control %d\n", this, cmd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SPA_CONTROL_CMD_NODE_UPDATE:
|
|
||||||
case SPA_CONTROL_CMD_PORT_REMOVED:
|
case SPA_CONTROL_CMD_PORT_REMOVED:
|
||||||
fprintf (stderr, "proxy %p: command not implemented %d\n", this, cmd);
|
fprintf (stderr, "proxy %p: command not implemented %d\n", this, cmd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SPA_CONTROL_CMD_NODE_UPDATE:
|
||||||
|
{
|
||||||
|
SpaControlCmdNodeUpdate nu;
|
||||||
|
|
||||||
|
fprintf (stderr, "proxy %p: got node update %d\n", this, cmd);
|
||||||
|
if (spa_control_iter_parse_cmd (&it, &nu) < 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
this->max_inputs = nu.max_input_ports;
|
||||||
|
this->max_outputs = nu.max_output_ports;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case SPA_CONTROL_CMD_PORT_UPDATE:
|
case SPA_CONTROL_CMD_PORT_UPDATE:
|
||||||
{
|
{
|
||||||
SpaControlCmdPortUpdate pu;
|
SpaControlCmdPortUpdate pu;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue