mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-12-15 08:56:38 -05:00
introspect: improve node introspection
This commit is contained in:
parent
7cccede185
commit
4558073da6
3 changed files with 15 additions and 6 deletions
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
/** \cond */
|
||||
|
||||
#define MAX_BUFFER_SIZE 4096
|
||||
#define MAX_BUFFER_SIZE (1024 * 32)
|
||||
#define MAX_FDS 28
|
||||
|
||||
static bool debug_messages = 0;
|
||||
|
|
|
|||
|
|
@ -204,8 +204,10 @@ struct pw_node_info *pw_node_info_update(struct pw_node_info *info,
|
|||
free((void *) info->name);
|
||||
info->name = update->name ? strdup(update->name) : NULL;
|
||||
}
|
||||
if (update->change_mask & (1 << 1))
|
||||
if (update->change_mask & (1 << 1)) {
|
||||
info->max_input_ports = update->max_input_ports;
|
||||
info->n_input_ports = update->n_input_ports;
|
||||
}
|
||||
if (update->change_mask & (1 << 2)) {
|
||||
for (i = 0; i < info->n_input_formats; i++)
|
||||
free(info->input_formats[i]);
|
||||
|
|
@ -222,8 +224,10 @@ struct pw_node_info *pw_node_info_update(struct pw_node_info *info,
|
|||
info->input_formats[i] = spa_format_copy(update->input_formats[i]);
|
||||
}
|
||||
}
|
||||
if (update->change_mask & (1 << 3))
|
||||
if (update->change_mask & (1 << 3)) {
|
||||
info->max_output_ports = update->max_output_ports;
|
||||
info->n_output_ports = update->n_output_ports;
|
||||
}
|
||||
if (update->change_mask & (1 << 4)) {
|
||||
for (i = 0; i < info->n_output_formats; i++)
|
||||
free(info->output_formats[i]);
|
||||
|
|
|
|||
|
|
@ -383,6 +383,7 @@ node_bind_func(struct pw_global *global, struct pw_client *client, uint32_t vers
|
|||
|
||||
this->info.change_mask = ~0;
|
||||
pw_node_notify_info(resource, &this->info);
|
||||
this->info.change_mask = 0;
|
||||
|
||||
return SPA_RESULT_OK;
|
||||
|
||||
|
|
@ -592,6 +593,7 @@ void pw_node_destroy(struct pw_node *node)
|
|||
struct pw_port *pw_node_get_free_port(struct pw_node *node, enum pw_direction direction)
|
||||
{
|
||||
uint32_t *n_ports, max_ports;
|
||||
uint64_t change_mask;
|
||||
struct spa_list *ports;
|
||||
struct pw_port *port = NULL, *p, **portmap;
|
||||
int res;
|
||||
|
|
@ -602,11 +604,13 @@ struct pw_port *pw_node_get_free_port(struct pw_node *node, enum pw_direction di
|
|||
n_ports = &node->info.n_input_ports;
|
||||
ports = &node->input_ports;
|
||||
portmap = node->input_port_map;
|
||||
change_mask = 1 << 1;
|
||||
} else {
|
||||
max_ports = node->info.max_output_ports;
|
||||
n_ports = &node->info.n_output_ports;
|
||||
ports = &node->output_ports;
|
||||
portmap = node->output_port_map;
|
||||
change_mask = 1 << 3;
|
||||
}
|
||||
|
||||
pw_log_debug("node %p: direction %d max %u, n %u", node, direction, max_ports, *n_ports);
|
||||
|
|
@ -637,6 +641,7 @@ struct pw_port *pw_node_get_free_port(struct pw_node *node, enum pw_direction di
|
|||
spa_node_port_set_io(node->node, direction, i, &port->io);
|
||||
}
|
||||
(*n_ports)++;
|
||||
node->info.change_mask |= change_mask;
|
||||
portmap[i] = port;
|
||||
break;
|
||||
}
|
||||
|
|
@ -783,9 +788,9 @@ void pw_node_update_state(struct pw_node *node, enum pw_node_state state, char *
|
|||
|
||||
pw_signal_emit(&node->state_changed, node, old, state);
|
||||
|
||||
node->info.change_mask = 1 << 5;
|
||||
spa_list_for_each(resource, &node->resource_list, link) {
|
||||
node->info.change_mask |= 1 << 5;
|
||||
spa_list_for_each(resource, &node->resource_list, link)
|
||||
pw_node_notify_info(resource, &node->info);
|
||||
}
|
||||
node->info.change_mask = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue