mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	pw_node -> pw_impl_node
This commit is contained in:
		
							parent
							
								
									f62d1cb357
								
							
						
					
					
						commit
						898e870997
					
				
					 23 changed files with 335 additions and 335 deletions
				
			
		| 
						 | 
				
			
			@ -51,7 +51,7 @@ struct bluez5_node {
 | 
			
		|||
 | 
			
		||||
	struct pw_properties *props;
 | 
			
		||||
 | 
			
		||||
	struct pw_node *adapter;
 | 
			
		||||
	struct pw_impl_node *adapter;
 | 
			
		||||
	struct pw_proxy *proxy;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -182,7 +182,7 @@ static void bluez5_remove_node(struct bluez5_object *obj, struct bluez5_node *no
 | 
			
		|||
{
 | 
			
		||||
	pw_log_debug("remove node %u", node->id);
 | 
			
		||||
	spa_list_remove(&node->link);
 | 
			
		||||
	pw_node_destroy(node->adapter);
 | 
			
		||||
	pw_impl_node_destroy(node->adapter);
 | 
			
		||||
	pw_properties_free(node->props);
 | 
			
		||||
	free(node);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,8 +63,8 @@ struct factory_data {
 | 
			
		|||
struct node_data {
 | 
			
		||||
	struct factory_data *data;
 | 
			
		||||
	struct spa_list link;
 | 
			
		||||
	struct pw_node *adapter;
 | 
			
		||||
	struct pw_node *slave;
 | 
			
		||||
	struct pw_impl_node *adapter;
 | 
			
		||||
	struct pw_impl_node *slave;
 | 
			
		||||
	struct spa_hook adapter_listener;
 | 
			
		||||
	struct pw_resource *resource;
 | 
			
		||||
	struct spa_hook resource_listener;
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +77,7 @@ static void resource_destroy(void *data)
 | 
			
		|||
 | 
			
		||||
	spa_hook_remove(&nd->resource_listener);
 | 
			
		||||
	if (nd->adapter)
 | 
			
		||||
		pw_node_destroy(nd->adapter);
 | 
			
		||||
		pw_impl_node_destroy(nd->adapter);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_resource_events resource_events = {
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +95,7 @@ static void node_destroy(void *data)
 | 
			
		|||
static void node_free(void *data)
 | 
			
		||||
{
 | 
			
		||||
	struct node_data *nd = data;
 | 
			
		||||
	pw_node_destroy(nd->slave);
 | 
			
		||||
	pw_impl_node_destroy(nd->slave);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void node_initialized(void *data)
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +110,7 @@ static void node_initialized(void *data)
 | 
			
		|||
		return;
 | 
			
		||||
 | 
			
		||||
	client = pw_resource_get_client(nd->resource);
 | 
			
		||||
	global = pw_node_get_global(nd->adapter);
 | 
			
		||||
	global = pw_impl_node_get_global(nd->adapter);
 | 
			
		||||
 | 
			
		||||
	res = pw_global_bind(global, client,
 | 
			
		||||
			PW_PERM_RWX, PW_VERSION_NODE_PROXY, nd->new_id);
 | 
			
		||||
| 
						 | 
				
			
			@ -129,8 +129,8 @@ error_bind:
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static const struct pw_node_events node_events = {
 | 
			
		||||
	PW_VERSION_NODE_EVENTS,
 | 
			
		||||
static const struct pw_impl_node_events node_events = {
 | 
			
		||||
	PW_VERSION_IMPL_NODE_EVENTS,
 | 
			
		||||
	.destroy = node_destroy,
 | 
			
		||||
	.free = node_free,
 | 
			
		||||
	.initialized = node_initialized,
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +145,7 @@ static void *create_object(void *_data,
 | 
			
		|||
{
 | 
			
		||||
	struct factory_data *d = _data;
 | 
			
		||||
	struct pw_impl_client *client;
 | 
			
		||||
	struct pw_node *adapter, *slave;
 | 
			
		||||
	struct pw_impl_node *adapter, *slave;
 | 
			
		||||
	const char *str, *factory_name;
 | 
			
		||||
	int res;
 | 
			
		||||
	struct node_data *nd;
 | 
			
		||||
| 
						 | 
				
			
			@ -205,11 +205,11 @@ static void *create_object(void *_data,
 | 
			
		|||
	nd->new_id = new_id;
 | 
			
		||||
	spa_list_append(&d->node_list, &nd->link);
 | 
			
		||||
 | 
			
		||||
	pw_node_add_listener(adapter, &nd->adapter_listener, &node_events, nd);
 | 
			
		||||
	pw_impl_node_add_listener(adapter, &nd->adapter_listener, &node_events, nd);
 | 
			
		||||
 | 
			
		||||
	pw_node_register(adapter, NULL);
 | 
			
		||||
	pw_impl_node_register(adapter, NULL);
 | 
			
		||||
 | 
			
		||||
	pw_node_set_active(adapter, true);
 | 
			
		||||
	pw_impl_node_set_active(adapter, true);
 | 
			
		||||
 | 
			
		||||
	return adapter;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -251,7 +251,7 @@ static void module_destroy(void *data)
 | 
			
		|||
	spa_hook_remove(&d->module_listener);
 | 
			
		||||
 | 
			
		||||
	spa_list_for_each_safe(nd, t, &d->node_list, link)
 | 
			
		||||
		pw_node_destroy(nd->adapter);
 | 
			
		||||
		pw_impl_node_destroy(nd->adapter);
 | 
			
		||||
 | 
			
		||||
	pw_impl_factory_destroy(d->this);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,10 +58,10 @@ struct buffer {
 | 
			
		|||
struct node {
 | 
			
		||||
	struct pw_context *context;
 | 
			
		||||
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
	struct spa_hook node_listener;
 | 
			
		||||
 | 
			
		||||
	struct pw_node *slave;
 | 
			
		||||
	struct pw_impl_node *slave;
 | 
			
		||||
 | 
			
		||||
	void *user_data;
 | 
			
		||||
	enum pw_direction direction;
 | 
			
		||||
| 
						 | 
				
			
			@ -149,14 +149,14 @@ static void node_port_init(void *data, struct pw_impl_port *port)
 | 
			
		|||
	pw_properties_free(new);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_node_events node_events = {
 | 
			
		||||
	PW_VERSION_NODE_EVENTS,
 | 
			
		||||
static const struct pw_impl_node_events node_events = {
 | 
			
		||||
	PW_VERSION_IMPL_NODE_EVENTS,
 | 
			
		||||
	.free = node_free,
 | 
			
		||||
	.port_init = node_port_init,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int find_format(struct pw_node *node, enum pw_direction direction,
 | 
			
		||||
static int find_format(struct pw_impl_node *node, enum pw_direction direction,
 | 
			
		||||
		uint32_t *media_type, uint32_t *media_subtype)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t state = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -186,12 +186,12 @@ static int find_format(struct pw_node *node, enum pw_direction direction,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct pw_node *pw_adapter_new(struct pw_context *context,
 | 
			
		||||
		struct pw_node *slave,
 | 
			
		||||
struct pw_impl_node *pw_adapter_new(struct pw_context *context,
 | 
			
		||||
		struct pw_impl_node *slave,
 | 
			
		||||
		struct pw_properties *props,
 | 
			
		||||
		size_t user_data_size)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
	struct node *n;
 | 
			
		||||
	const char *str, *factory_name;
 | 
			
		||||
	const struct pw_node_info *info;
 | 
			
		||||
| 
						 | 
				
			
			@ -199,7 +199,7 @@ struct pw_node *pw_adapter_new(struct pw_context *context,
 | 
			
		|||
	int res;
 | 
			
		||||
	uint32_t media_type, media_subtype;
 | 
			
		||||
 | 
			
		||||
	info = pw_node_get_info(slave);
 | 
			
		||||
	info = pw_impl_node_get_info(slave);
 | 
			
		||||
	if (info == NULL) {
 | 
			
		||||
		res = -EINVAL;
 | 
			
		||||
		goto error;
 | 
			
		||||
| 
						 | 
				
			
			@ -279,7 +279,7 @@ struct pw_node *pw_adapter_new(struct pw_context *context,
 | 
			
		|||
	if (user_data_size > 0)
 | 
			
		||||
		n->user_data = SPA_MEMBER(n, sizeof(struct node), void);
 | 
			
		||||
 | 
			
		||||
	pw_node_add_listener(node, &n->node_listener, &node_events, n);
 | 
			
		||||
	pw_impl_node_add_listener(node, &n->node_listener, &node_events, n);
 | 
			
		||||
 | 
			
		||||
	return node;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -290,7 +290,7 @@ error:
 | 
			
		|||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void *pw_adapter_get_user_data(struct pw_node *node)
 | 
			
		||||
void *pw_adapter_get_user_data(struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	struct node *n = pw_spa_node_get_user_data(node);
 | 
			
		||||
	return n->user_data;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,13 +33,13 @@ extern "C" {
 | 
			
		|||
 | 
			
		||||
#define ADAPTER_USAGE	PW_KEY_NODE_NAME"=<string> "
 | 
			
		||||
 | 
			
		||||
struct pw_node *
 | 
			
		||||
struct pw_impl_node *
 | 
			
		||||
pw_adapter_new(struct pw_context *context,
 | 
			
		||||
		struct pw_node *slave,
 | 
			
		||||
		struct pw_impl_node *slave,
 | 
			
		||||
		struct pw_properties *properties,
 | 
			
		||||
		size_t user_data_size);
 | 
			
		||||
 | 
			
		||||
void *pw_adapter_get_user_data(struct pw_node *node);
 | 
			
		||||
void *pw_adapter_get_user_data(struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -862,7 +862,7 @@ static int impl_node_process(void *object)
 | 
			
		|||
{
 | 
			
		||||
	struct node *this = object;
 | 
			
		||||
	struct impl *impl = this->impl;
 | 
			
		||||
	struct pw_node *n = impl->this.node;
 | 
			
		||||
	struct pw_impl_node *n = impl->this.node;
 | 
			
		||||
	struct timespec ts;
 | 
			
		||||
 | 
			
		||||
	spa_log_trace_fp(this->log, "%p: send process driver:%p", this, impl->this.node->driver_node);
 | 
			
		||||
| 
						 | 
				
			
			@ -971,7 +971,7 @@ client_node_port_update(void *data,
 | 
			
		|||
static int client_node_set_active(void *data, bool active)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = data;
 | 
			
		||||
	return pw_node_set_active(impl->this.node, active);
 | 
			
		||||
	return pw_impl_node_set_active(impl->this.node, active);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int client_node_event(void *data, const struct spa_event *event)
 | 
			
		||||
| 
						 | 
				
			
			@ -1173,7 +1173,7 @@ static void client_node_resource_destroy(void *data)
 | 
			
		|||
				&node->data_source);
 | 
			
		||||
	}
 | 
			
		||||
	if (this->node)
 | 
			
		||||
		pw_node_destroy(this->node);
 | 
			
		||||
		pw_impl_node_destroy(this->node);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void client_node_resource_error(void *data, int seq, int res, const char *message)
 | 
			
		||||
| 
						 | 
				
			
			@ -1199,7 +1199,7 @@ static void client_node_resource_pong(void *data, int seq)
 | 
			
		|||
void pw_client_node_registered(struct pw_client_node *this, struct pw_global *global)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = SPA_CONTAINER_OF(this, struct impl, this);
 | 
			
		||||
	struct pw_node *node = this->node;
 | 
			
		||||
	struct pw_impl_node *node = this->node;
 | 
			
		||||
	struct pw_impl_client *client = impl->node.client;
 | 
			
		||||
	uint32_t node_id = global->id;
 | 
			
		||||
	struct pw_memblock *m;
 | 
			
		||||
| 
						 | 
				
			
			@ -1262,7 +1262,7 @@ static void node_initialized(void *data)
 | 
			
		|||
 | 
			
		||||
	pw_log_debug(NAME " %p: io areas %p", node, impl->io_areas->map->ptr);
 | 
			
		||||
 | 
			
		||||
	if ((global = pw_node_get_global(this->node)) != NULL)
 | 
			
		||||
	if ((global = pw_impl_node_get_global(this->node)) != NULL)
 | 
			
		||||
		pw_client_node_registered(this, global);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1505,7 +1505,7 @@ static void node_port_removed(void *data, struct pw_impl_port *port)
 | 
			
		|||
	clear_port(this, p);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void node_peer_added(void *data, struct pw_node *peer)
 | 
			
		||||
static void node_peer_added(void *data, struct pw_impl_node *peer)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = data;
 | 
			
		||||
	struct node *this = &impl->node;
 | 
			
		||||
| 
						 | 
				
			
			@ -1533,7 +1533,7 @@ static void node_peer_added(void *data, struct pw_node *peer)
 | 
			
		|||
					  sizeof(struct pw_node_activation));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void node_peer_removed(void *data, struct pw_node *peer)
 | 
			
		||||
static void node_peer_removed(void *data, struct pw_impl_node *peer)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = data;
 | 
			
		||||
	struct node *this = &impl->node;
 | 
			
		||||
| 
						 | 
				
			
			@ -1563,7 +1563,7 @@ static void node_peer_removed(void *data, struct pw_node *peer)
 | 
			
		|||
	pw_memblock_unref(m);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void node_driver_changed(void *data, struct pw_node *old, struct pw_node *driver)
 | 
			
		||||
static void node_driver_changed(void *data, struct pw_impl_node *old, struct pw_impl_node *driver)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = data;
 | 
			
		||||
	struct node *this = &impl->node;
 | 
			
		||||
| 
						 | 
				
			
			@ -1574,8 +1574,8 @@ static void node_driver_changed(void *data, struct pw_node *old, struct pw_node
 | 
			
		|||
	node_peer_added(data, driver);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_node_events node_events = {
 | 
			
		||||
	PW_VERSION_NODE_EVENTS,
 | 
			
		||||
static const struct pw_impl_node_events node_events = {
 | 
			
		||||
	PW_VERSION_IMPL_NODE_EVENTS,
 | 
			
		||||
	.free = node_free,
 | 
			
		||||
	.initialized = node_initialized,
 | 
			
		||||
	.port_init = node_port_init,
 | 
			
		||||
| 
						 | 
				
			
			@ -1608,7 +1608,7 @@ static int process_node(void *data)
 | 
			
		|||
 * \param properties extra properties
 | 
			
		||||
 * \return a newly allocated client node
 | 
			
		||||
 *
 | 
			
		||||
 * Create a new \ref pw_node.
 | 
			
		||||
 * Create a new \ref pw_impl_node.
 | 
			
		||||
 *
 | 
			
		||||
 * \memberof pw_client_node
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -1682,7 +1682,7 @@ struct pw_client_node *pw_client_node_new(struct pw_resource *resource,
 | 
			
		|||
 | 
			
		||||
	this->node->port_user_data_size = sizeof(struct port);
 | 
			
		||||
 | 
			
		||||
	pw_node_add_listener(this->node, &impl->node_listener, &node_events, impl);
 | 
			
		||||
	pw_impl_node_add_listener(this->node, &impl->node_listener, &node_events, impl);
 | 
			
		||||
 | 
			
		||||
	return this;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ extern "C" {
 | 
			
		|||
 * PipeWire client node interface
 | 
			
		||||
 */
 | 
			
		||||
struct pw_client_node {
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
 | 
			
		||||
	struct pw_resource *resource;
 | 
			
		||||
	uint32_t flags;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,7 +80,7 @@ struct node_data {
 | 
			
		|||
	struct spa_list mix[2];
 | 
			
		||||
	struct spa_list free_mix;
 | 
			
		||||
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
	struct spa_hook node_listener;
 | 
			
		||||
	int do_free:1;
 | 
			
		||||
	int have_transport:1;
 | 
			
		||||
| 
						 | 
				
			
			@ -222,7 +222,7 @@ static struct mix *ensure_mix(struct node_data *data,
 | 
			
		|||
	if (spa_list_is_empty(&data->free_mix))
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	port = pw_node_find_port(data->node, direction, port_id);
 | 
			
		||||
	port = pw_impl_node_find_port(data->node, direction, port_id);
 | 
			
		||||
	if (port == NULL)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -271,7 +271,7 @@ static int client_node_transport(void *object,
 | 
			
		|||
static int add_node_update(struct pw_proxy *proxy, uint32_t change_mask)
 | 
			
		||||
{
 | 
			
		||||
	struct node_data *data = proxy->user_data;
 | 
			
		||||
	struct pw_node *node = data->node;
 | 
			
		||||
	struct pw_impl_node *node = data->node;
 | 
			
		||||
	struct spa_node_info ni = SPA_NODE_INFO_INIT();
 | 
			
		||||
	uint32_t n_params = 0;
 | 
			
		||||
	struct spa_pod **params = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -458,7 +458,7 @@ static int client_node_command(void *object, const struct spa_command *command)
 | 
			
		|||
	case SPA_NODE_COMMAND_Pause:
 | 
			
		||||
		pw_log_debug("node %p: pause", proxy);
 | 
			
		||||
 | 
			
		||||
		if ((res = pw_node_set_state(data->node, PW_NODE_STATE_IDLE)) < 0) {
 | 
			
		||||
		if ((res = pw_impl_node_set_state(data->node, PW_NODE_STATE_IDLE)) < 0) {
 | 
			
		||||
			pw_log_warn("node %p: pause failed", proxy);
 | 
			
		||||
			pw_proxy_error(proxy, res, "pause failed");
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -467,7 +467,7 @@ static int client_node_command(void *object, const struct spa_command *command)
 | 
			
		|||
	case SPA_NODE_COMMAND_Start:
 | 
			
		||||
		pw_log_debug("node %p: start", proxy);
 | 
			
		||||
 | 
			
		||||
		if ((res = pw_node_set_state(data->node, PW_NODE_STATE_RUNNING)) < 0) {
 | 
			
		||||
		if ((res = pw_impl_node_set_state(data->node, PW_NODE_STATE_RUNNING)) < 0) {
 | 
			
		||||
			pw_log_warn("node %p: start failed", proxy);
 | 
			
		||||
			pw_proxy_error(proxy, res, "start failed");
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -475,7 +475,7 @@ static int client_node_command(void *object, const struct spa_command *command)
 | 
			
		|||
 | 
			
		||||
	case SPA_NODE_COMMAND_Suspend:
 | 
			
		||||
		pw_log_debug("node %p: suspend", proxy);
 | 
			
		||||
		if ((res = pw_node_set_state(data->node, PW_NODE_STATE_SUSPENDED)) < 0) {
 | 
			
		||||
		if ((res = pw_impl_node_set_state(data->node, PW_NODE_STATE_SUSPENDED)) < 0) {
 | 
			
		||||
			pw_log_warn("node %p: suspend failed", proxy);
 | 
			
		||||
			pw_proxy_error(proxy, res, "suspend failed");
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -542,7 +542,7 @@ client_node_port_set_param(void *object,
 | 
			
		|||
	struct pw_impl_port *port;
 | 
			
		||||
	int res;
 | 
			
		||||
 | 
			
		||||
	port = pw_node_find_port(data->node, direction, port_id);
 | 
			
		||||
	port = pw_impl_node_find_port(data->node, direction, port_id);
 | 
			
		||||
	if (port == NULL) {
 | 
			
		||||
		res = -EINVAL;
 | 
			
		||||
		goto error_exit;
 | 
			
		||||
| 
						 | 
				
			
			@ -804,7 +804,7 @@ client_node_set_activation(void *object,
 | 
			
		|||
{
 | 
			
		||||
	struct pw_proxy *proxy = object;
 | 
			
		||||
	struct node_data *data = proxy->user_data;
 | 
			
		||||
	struct pw_node *node = data->node;
 | 
			
		||||
	struct pw_impl_node *node = data->node;
 | 
			
		||||
	struct pw_memmap *mm;
 | 
			
		||||
	void *ptr;
 | 
			
		||||
	struct link *link;
 | 
			
		||||
| 
						 | 
				
			
			@ -992,8 +992,8 @@ static void node_active_changed(void *data, bool active)
 | 
			
		|||
	pw_client_node_proxy_set_active(d->client_node, active);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_node_events node_events = {
 | 
			
		||||
	PW_VERSION_NODE_EVENTS,
 | 
			
		||||
static const struct pw_impl_node_events node_events = {
 | 
			
		||||
	PW_VERSION_IMPL_NODE_EVENTS,
 | 
			
		||||
	.destroy = node_destroy,
 | 
			
		||||
	.free = node_free,
 | 
			
		||||
	.info_changed = node_info_changed,
 | 
			
		||||
| 
						 | 
				
			
			@ -1017,7 +1017,7 @@ static void client_node_proxy_destroy(void *_data)
 | 
			
		|||
		pw_proxy_destroy(data->proxy);
 | 
			
		||||
 | 
			
		||||
	if (data->do_free)
 | 
			
		||||
		pw_node_destroy(data->node);
 | 
			
		||||
		pw_impl_node_destroy(data->node);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void client_node_proxy_bound(void *_data, uint32_t global_id)
 | 
			
		||||
| 
						 | 
				
			
			@ -1054,7 +1054,7 @@ static const struct pw_proxy_events proxy_events = {
 | 
			
		|||
static int node_ready(void *d, int status)
 | 
			
		||||
{
 | 
			
		||||
	struct node_data *data = d;
 | 
			
		||||
	struct pw_node *node = data->node;
 | 
			
		||||
	struct pw_impl_node *node = data->node;
 | 
			
		||||
	struct pw_node_activation *a = node->rt.activation;
 | 
			
		||||
	struct timespec ts;
 | 
			
		||||
	struct pw_impl_port *p;
 | 
			
		||||
| 
						 | 
				
			
			@ -1086,7 +1086,7 @@ static int node_reuse_buffer(void *data, uint32_t port_id, uint32_t buffer_id)
 | 
			
		|||
static int node_xrun(void *d, uint64_t trigger, uint64_t delay, struct spa_pod *info)
 | 
			
		||||
{
 | 
			
		||||
	struct node_data *data = d;
 | 
			
		||||
	struct pw_node *node = data->node;
 | 
			
		||||
	struct pw_impl_node *node = data->node;
 | 
			
		||||
	struct pw_node_activation *a = node->rt.activation;
 | 
			
		||||
 | 
			
		||||
	a->xrun_count++;
 | 
			
		||||
| 
						 | 
				
			
			@ -1110,7 +1110,7 @@ static const struct spa_node_callbacks node_callbacks = {
 | 
			
		|||
static struct pw_proxy *node_export(struct pw_core *core, void *object, bool do_free,
 | 
			
		||||
		size_t user_data_size)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node = object;
 | 
			
		||||
	struct pw_impl_node *node = object;
 | 
			
		||||
	struct pw_proxy *client_node;
 | 
			
		||||
	struct node_data *data;
 | 
			
		||||
	int i;
 | 
			
		||||
| 
						 | 
				
			
			@ -1128,7 +1128,7 @@ static struct pw_proxy *node_export(struct pw_core *core, void *object, bool do_
 | 
			
		|||
	data->pool = pw_core_get_mempool(core);
 | 
			
		||||
	data->node = node;
 | 
			
		||||
	data->do_free = do_free;
 | 
			
		||||
	data->context = pw_node_get_context(node);
 | 
			
		||||
	data->context = pw_impl_node_get_context(node);
 | 
			
		||||
	data->client_node = (struct pw_client_node_proxy *)client_node;
 | 
			
		||||
	data->remote_id = SPA_ID_INVALID;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1148,7 +1148,7 @@ static struct pw_proxy *node_export(struct pw_core *core, void *object, bool do_
 | 
			
		|||
			&client_node_proxy_events, data);
 | 
			
		||||
 | 
			
		||||
	spa_node_set_callbacks(node->node, &node_callbacks, data);
 | 
			
		||||
	pw_node_add_listener(node, &data->node_listener, &node_events, data);
 | 
			
		||||
	pw_impl_node_add_listener(node, &data->node_listener, &node_events, data);
 | 
			
		||||
 | 
			
		||||
        pw_client_node_proxy_add_listener(data->client_node,
 | 
			
		||||
					  &data->client_node_listener,
 | 
			
		||||
| 
						 | 
				
			
			@ -1168,10 +1168,10 @@ struct pw_proxy *pw_core_node_export(struct pw_core *core,
 | 
			
		|||
		uint32_t type, struct pw_properties *props, void *object,
 | 
			
		||||
		size_t user_data_size)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node = object;
 | 
			
		||||
	struct pw_impl_node *node = object;
 | 
			
		||||
 | 
			
		||||
	if (props) {
 | 
			
		||||
		pw_node_update_properties(node, &props->dict);
 | 
			
		||||
		pw_impl_node_update_properties(node, &props->dict);
 | 
			
		||||
		pw_properties_free(props);
 | 
			
		||||
	}
 | 
			
		||||
	return node_export(core, object, false, user_data_size);
 | 
			
		||||
| 
						 | 
				
			
			@ -1181,15 +1181,15 @@ struct pw_proxy *pw_core_spa_node_export(struct pw_core *core,
 | 
			
		|||
		uint32_t type, struct pw_properties *props, void *object,
 | 
			
		||||
		size_t user_data_size)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
 | 
			
		||||
	node = pw_node_new(pw_core_get_context(core), props, 0);
 | 
			
		||||
	node = pw_impl_node_new(pw_core_get_context(core), props, 0);
 | 
			
		||||
	if (node == NULL)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	pw_node_set_implementation(node, (struct spa_node*)object);
 | 
			
		||||
	pw_node_register(node, NULL);
 | 
			
		||||
	pw_node_set_active(node, true);
 | 
			
		||||
	pw_impl_node_set_implementation(node, (struct spa_node*)object);
 | 
			
		||||
	pw_impl_node_register(node, NULL);
 | 
			
		||||
	pw_impl_node_set_active(node, true);
 | 
			
		||||
 | 
			
		||||
	return node_export(core, node, true, user_data_size);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -846,7 +846,7 @@ static int impl_node_process(void *object)
 | 
			
		|||
{
 | 
			
		||||
	struct node *this = object;
 | 
			
		||||
	struct impl *impl = this->impl;
 | 
			
		||||
	struct pw_node *n = impl->this.node;
 | 
			
		||||
	struct pw_impl_node *n = impl->this.node;
 | 
			
		||||
 | 
			
		||||
	return impl_node_process_input(n->node);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1001,7 +1001,7 @@ client_node0_port_update(void *data,
 | 
			
		|||
static void client_node0_set_active(void *data, bool active)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = data;
 | 
			
		||||
	pw_node_set_active(impl->this.node, active);
 | 
			
		||||
	pw_impl_node_set_active(impl->this.node, active);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void client_node0_event(void *data, struct spa_event *event)
 | 
			
		||||
| 
						 | 
				
			
			@ -1158,14 +1158,14 @@ static void client_node0_resource_destroy(void *data)
 | 
			
		|||
				true,
 | 
			
		||||
				&node->data_source);
 | 
			
		||||
	}
 | 
			
		||||
	pw_node_destroy(this->node);
 | 
			
		||||
	pw_impl_node_destroy(this->node);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void node_initialized(void *data)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = data;
 | 
			
		||||
	struct pw_client_node0 *this = &impl->this;
 | 
			
		||||
	struct pw_node *node = this->node;
 | 
			
		||||
	struct pw_impl_node *node = this->node;
 | 
			
		||||
	struct spa_system *data_system = impl->node.data_system;
 | 
			
		||||
 | 
			
		||||
	if (this->resource == NULL)
 | 
			
		||||
| 
						 | 
				
			
			@ -1182,7 +1182,7 @@ static void node_initialized(void *data)
 | 
			
		|||
	pw_log_debug("client-node %p: transport fd %d %d", node, impl->fds[0], impl->fds[1]);
 | 
			
		||||
 | 
			
		||||
	pw_client_node0_resource_transport(this->resource,
 | 
			
		||||
					  pw_global_get_id(pw_node_get_global(node)),
 | 
			
		||||
					  pw_global_get_id(pw_impl_node_get_global(node)),
 | 
			
		||||
					  impl->other_fds[0],
 | 
			
		||||
					  impl->other_fds[1],
 | 
			
		||||
					  impl->transport);
 | 
			
		||||
| 
						 | 
				
			
			@ -1210,8 +1210,8 @@ static void node_free(void *data)
 | 
			
		|||
	free(impl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_node_events node_events = {
 | 
			
		||||
	PW_VERSION_NODE_EVENTS,
 | 
			
		||||
static const struct pw_impl_node_events node_events = {
 | 
			
		||||
	PW_VERSION_IMPL_NODE_EVENTS,
 | 
			
		||||
	.free = node_free,
 | 
			
		||||
	.initialized = node_initialized,
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -1246,7 +1246,7 @@ static void convert_properties(struct pw_properties *properties)
 | 
			
		|||
 * \param properties extra properties
 | 
			
		||||
 * \return a newly allocated client node
 | 
			
		||||
 *
 | 
			
		||||
 * Create a new \ref pw_node.
 | 
			
		||||
 * Create a new \ref pw_impl_node.
 | 
			
		||||
 *
 | 
			
		||||
 * \memberof pw_client_node
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -1320,7 +1320,7 @@ struct pw_client_node0 *pw_client_node0_new(struct pw_resource *resource,
 | 
			
		|||
				impl);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	pw_node_add_listener(this->node, &impl->node_listener, &node_events, impl);
 | 
			
		||||
	pw_impl_node_add_listener(this->node, &impl->node_listener, &node_events, impl);
 | 
			
		||||
 | 
			
		||||
	return this;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ extern "C" {
 | 
			
		|||
 * PipeWire client node interface
 | 
			
		||||
 */
 | 
			
		||||
struct pw_client_node0 {
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
 | 
			
		||||
	struct pw_resource *resource;
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -142,17 +142,17 @@ static const struct pw_impl_link_events link_events = {
 | 
			
		|||
	.initialized = link_initialized
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct pw_impl_port *get_port(struct pw_node *node, enum spa_direction direction)
 | 
			
		||||
static struct pw_impl_port *get_port(struct pw_impl_node *node, enum spa_direction direction)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_impl_port *p;
 | 
			
		||||
	int res;
 | 
			
		||||
 | 
			
		||||
	p = pw_node_find_port(node, direction, SPA_ID_INVALID);
 | 
			
		||||
	p = pw_impl_node_find_port(node, direction, SPA_ID_INVALID);
 | 
			
		||||
 | 
			
		||||
	if (p == NULL || pw_impl_port_is_linked(p)) {
 | 
			
		||||
		uint32_t port_id;
 | 
			
		||||
 | 
			
		||||
		port_id = pw_node_get_free_port_id(node, direction);
 | 
			
		||||
		port_id = pw_impl_node_get_free_port_id(node, direction);
 | 
			
		||||
		if (port_id == SPA_ID_INVALID)
 | 
			
		||||
			return NULL;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +179,7 @@ static void *create_object(void *_data,
 | 
			
		|||
{
 | 
			
		||||
	struct factory_data *d = _data;
 | 
			
		||||
	struct pw_impl_client *client = NULL;
 | 
			
		||||
	struct pw_node *output_node, *input_node;
 | 
			
		||||
	struct pw_impl_node *output_node, *input_node;
 | 
			
		||||
	struct pw_impl_port *outport, *inport;
 | 
			
		||||
	struct pw_context *context;
 | 
			
		||||
	struct pw_global *global;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ struct factory_data {
 | 
			
		|||
struct node_data {
 | 
			
		||||
	struct factory_data *data;
 | 
			
		||||
	struct spa_list link;
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
	struct spa_hook node_listener;
 | 
			
		||||
	struct spa_hook resource_listener;
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@ static void resource_destroy(void *data)
 | 
			
		|||
	pw_log_debug("node %p", nd);
 | 
			
		||||
	spa_hook_remove(&nd->resource_listener);
 | 
			
		||||
	if (nd->node)
 | 
			
		||||
		pw_node_destroy(nd->node);
 | 
			
		||||
		pw_impl_node_destroy(nd->node);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_resource_events resource_events = {
 | 
			
		||||
| 
						 | 
				
			
			@ -88,8 +88,8 @@ static void node_destroy(void *data)
 | 
			
		|||
	nd->node = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_node_events node_events = {
 | 
			
		||||
	PW_VERSION_NODE_EVENTS,
 | 
			
		||||
static const struct pw_impl_node_events node_events = {
 | 
			
		||||
	PW_VERSION_IMPL_NODE_EVENTS,
 | 
			
		||||
	.destroy = node_destroy,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -102,7 +102,7 @@ static void *create_object(void *_data,
 | 
			
		|||
{
 | 
			
		||||
	struct factory_data *data = _data;
 | 
			
		||||
	struct pw_context *context = data->context;
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
	const char *factory_name;
 | 
			
		||||
	struct node_data *nd;
 | 
			
		||||
	int res;
 | 
			
		||||
| 
						 | 
				
			
			@ -138,12 +138,12 @@ static void *create_object(void *_data,
 | 
			
		|||
	nd->node = node;
 | 
			
		||||
	spa_list_append(&data->node_list, &nd->link);
 | 
			
		||||
 | 
			
		||||
	pw_node_add_listener(node, &nd->node_listener, &node_events, nd);
 | 
			
		||||
	pw_impl_node_add_listener(node, &nd->node_listener, &node_events, nd);
 | 
			
		||||
 | 
			
		||||
	if (client) {
 | 
			
		||||
		struct pw_resource *bound_resource;
 | 
			
		||||
 | 
			
		||||
		res = pw_global_bind(pw_node_get_global(node),
 | 
			
		||||
		res = pw_global_bind(pw_impl_node_get_global(node),
 | 
			
		||||
			       client,
 | 
			
		||||
			       PW_PERM_RWX,
 | 
			
		||||
			       version, new_id);
 | 
			
		||||
| 
						 | 
				
			
			@ -194,7 +194,7 @@ static void factory_destroy(void *_data)
 | 
			
		|||
	spa_hook_remove(&data->module_listener);
 | 
			
		||||
 | 
			
		||||
	spa_list_consume(nd, &data->node_list, link)
 | 
			
		||||
		pw_node_destroy(nd->node);
 | 
			
		||||
		pw_impl_node_destroy(nd->node);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_impl_factory_events factory_events = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,7 +45,7 @@ static const struct spa_dict_item module_props[] = {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
struct node_data {
 | 
			
		||||
	struct pw_node *this;
 | 
			
		||||
	struct pw_impl_node *this;
 | 
			
		||||
	struct pw_context *context;
 | 
			
		||||
	struct pw_properties *properties;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -56,7 +56,7 @@ static void module_destroy(void *_data)
 | 
			
		|||
{
 | 
			
		||||
	struct node_data *data = _data;
 | 
			
		||||
	spa_hook_remove(&data->module_listener);
 | 
			
		||||
	pw_node_destroy(data->this);
 | 
			
		||||
	pw_impl_node_destroy(data->this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_impl_module_events module_events = {
 | 
			
		||||
| 
						 | 
				
			
			@ -71,7 +71,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
 | 
			
		|||
	char **argv = NULL;
 | 
			
		||||
	int n_tokens, res;
 | 
			
		||||
	struct pw_context *context = pw_impl_module_get_context(module);
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
        struct node_data *data;
 | 
			
		||||
 | 
			
		||||
	if (args == NULL)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,7 +40,7 @@
 | 
			
		|||
#include "pipewire/private.h"
 | 
			
		||||
 | 
			
		||||
struct impl {
 | 
			
		||||
	struct pw_node *this;
 | 
			
		||||
	struct pw_impl_node *this;
 | 
			
		||||
 | 
			
		||||
	enum pw_spa_node_flags flags;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ struct impl {
 | 
			
		|||
static void spa_node_free(void *data)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = data;
 | 
			
		||||
	struct pw_node *node = impl->this;
 | 
			
		||||
	struct pw_impl_node *node = impl->this;
 | 
			
		||||
 | 
			
		||||
	pw_log_debug("spa-node %p: free", node);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -71,23 +71,23 @@ static void spa_node_free(void *data)
 | 
			
		|||
 | 
			
		||||
static void complete_init(struct impl *impl)
 | 
			
		||||
{
 | 
			
		||||
        struct pw_node *this = impl->this;
 | 
			
		||||
        struct pw_impl_node *this = impl->this;
 | 
			
		||||
 | 
			
		||||
	impl->init_pending = SPA_ID_INVALID;
 | 
			
		||||
 | 
			
		||||
	if (SPA_FLAG_IS_SET(impl->flags, PW_SPA_NODE_FLAG_ACTIVATE))
 | 
			
		||||
		pw_node_set_active(this, true);
 | 
			
		||||
		pw_impl_node_set_active(this, true);
 | 
			
		||||
 | 
			
		||||
	if (!SPA_FLAG_IS_SET(impl->flags, PW_SPA_NODE_FLAG_NO_REGISTER))
 | 
			
		||||
		pw_node_register(this, NULL);
 | 
			
		||||
		pw_impl_node_register(this, NULL);
 | 
			
		||||
	else
 | 
			
		||||
		pw_node_initialized(this);
 | 
			
		||||
		pw_impl_node_initialized(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void spa_node_result(void *data, int seq, int res, uint32_t type, const void *result)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = data;
 | 
			
		||||
	struct pw_node *node = impl->this;
 | 
			
		||||
	struct pw_impl_node *node = impl->this;
 | 
			
		||||
 | 
			
		||||
	if (seq == impl->init_pending) {
 | 
			
		||||
		pw_log_debug("spa-node %p: init complete event %d %d", node, seq, res);
 | 
			
		||||
| 
						 | 
				
			
			@ -95,13 +95,13 @@ static void spa_node_result(void *data, int seq, int res, uint32_t type, const v
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_node_events node_events = {
 | 
			
		||||
	PW_VERSION_NODE_EVENTS,
 | 
			
		||||
static const struct pw_impl_node_events node_events = {
 | 
			
		||||
	PW_VERSION_IMPL_NODE_EVENTS,
 | 
			
		||||
	.free = spa_node_free,
 | 
			
		||||
	.result = spa_node_result,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct pw_node *
 | 
			
		||||
struct pw_impl_node *
 | 
			
		||||
pw_spa_node_new(struct pw_context *context,
 | 
			
		||||
		enum pw_spa_node_flags flags,
 | 
			
		||||
		struct spa_node *node,
 | 
			
		||||
| 
						 | 
				
			
			@ -109,11 +109,11 @@ pw_spa_node_new(struct pw_context *context,
 | 
			
		|||
		struct pw_properties *properties,
 | 
			
		||||
		size_t user_data_size)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *this;
 | 
			
		||||
	struct pw_impl_node *this;
 | 
			
		||||
	struct impl *impl;
 | 
			
		||||
	int res;
 | 
			
		||||
 | 
			
		||||
	this = pw_node_new(context, properties, sizeof(struct impl) + user_data_size);
 | 
			
		||||
	this = pw_impl_node_new(context, properties, sizeof(struct impl) + user_data_size);
 | 
			
		||||
	if (this == NULL) {
 | 
			
		||||
		res = -errno;
 | 
			
		||||
		goto error_exit;
 | 
			
		||||
| 
						 | 
				
			
			@ -128,8 +128,8 @@ pw_spa_node_new(struct pw_context *context,
 | 
			
		|||
	if (user_data_size > 0)
 | 
			
		||||
                impl->user_data = SPA_MEMBER(impl, sizeof(struct impl), void);
 | 
			
		||||
 | 
			
		||||
	pw_node_add_listener(this, &impl->node_listener, &node_events, impl);
 | 
			
		||||
	if ((res = pw_node_set_implementation(this, impl->node)) < 0)
 | 
			
		||||
	pw_impl_node_add_listener(this, &impl->node_listener, &node_events, impl);
 | 
			
		||||
	if ((res = pw_impl_node_set_implementation(this, impl->node)) < 0)
 | 
			
		||||
		goto error_exit_clean_node;
 | 
			
		||||
 | 
			
		||||
	if (flags & PW_SPA_NODE_FLAG_ASYNC) {
 | 
			
		||||
| 
						 | 
				
			
			@ -140,7 +140,7 @@ pw_spa_node_new(struct pw_context *context,
 | 
			
		|||
	return this;
 | 
			
		||||
 | 
			
		||||
error_exit_clean_node:
 | 
			
		||||
	pw_node_destroy(this);
 | 
			
		||||
	pw_impl_node_destroy(this);
 | 
			
		||||
	handle = NULL;
 | 
			
		||||
error_exit:
 | 
			
		||||
	if (handle)
 | 
			
		||||
| 
						 | 
				
			
			@ -150,7 +150,7 @@ error_exit:
 | 
			
		|||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void *pw_spa_node_get_user_data(struct pw_node *node)
 | 
			
		||||
void *pw_spa_node_get_user_data(struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = node->user_data;
 | 
			
		||||
	return impl->user_data;
 | 
			
		||||
| 
						 | 
				
			
			@ -230,13 +230,13 @@ setup_props(struct pw_context *context, struct spa_node *spa_node, struct pw_pro
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct pw_node *pw_spa_node_load(struct pw_context *context,
 | 
			
		||||
struct pw_impl_node *pw_spa_node_load(struct pw_context *context,
 | 
			
		||||
				 const char *factory_name,
 | 
			
		||||
				 enum pw_spa_node_flags flags,
 | 
			
		||||
				 struct pw_properties *properties,
 | 
			
		||||
				 size_t user_data_size)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *this;
 | 
			
		||||
	struct pw_impl_node *this;
 | 
			
		||||
	struct impl *impl;
 | 
			
		||||
	struct spa_node *spa_node;
 | 
			
		||||
	int res;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,7 @@ enum pw_spa_node_flags {
 | 
			
		|||
	PW_SPA_NODE_FLAG_ASYNC		= (1 << 2),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct pw_node *
 | 
			
		||||
struct pw_impl_node *
 | 
			
		||||
pw_spa_node_new(struct pw_context *context,
 | 
			
		||||
		enum pw_spa_node_flags flags,
 | 
			
		||||
		struct spa_node *node,
 | 
			
		||||
| 
						 | 
				
			
			@ -47,14 +47,14 @@ pw_spa_node_new(struct pw_context *context,
 | 
			
		|||
		struct pw_properties *properties,
 | 
			
		||||
		size_t user_data_size);
 | 
			
		||||
 | 
			
		||||
struct pw_node *
 | 
			
		||||
struct pw_impl_node *
 | 
			
		||||
pw_spa_node_load(struct pw_context *context,
 | 
			
		||||
		 const char *factory_name,
 | 
			
		||||
		 enum pw_spa_node_flags flags,
 | 
			
		||||
		 struct pw_properties *properties,
 | 
			
		||||
		 size_t user_data_size);
 | 
			
		||||
 | 
			
		||||
void *pw_spa_node_get_user_data(struct pw_node *node);
 | 
			
		||||
void *pw_spa_node_get_user_data(struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -653,7 +653,7 @@ void pw_context_destroy(struct pw_context *context)
 | 
			
		|||
	struct pw_impl_device *device;
 | 
			
		||||
	struct pw_core *core;
 | 
			
		||||
	struct pw_resource *resource;
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
	struct factory_entry *entry;
 | 
			
		||||
 | 
			
		||||
	pw_log_debug(NAME" %p: destroy", context);
 | 
			
		||||
| 
						 | 
				
			
			@ -668,7 +668,7 @@ void pw_context_destroy(struct pw_context *context)
 | 
			
		|||
		pw_impl_module_destroy(module);
 | 
			
		||||
 | 
			
		||||
	spa_list_consume(node, &context->node_list, link)
 | 
			
		||||
		pw_node_destroy(node);
 | 
			
		||||
		pw_impl_node_destroy(node);
 | 
			
		||||
 | 
			
		||||
	spa_list_consume(device, &context->device_list, link)
 | 
			
		||||
		pw_impl_device_destroy(device);
 | 
			
		||||
| 
						 | 
				
			
			@ -844,7 +844,7 @@ struct pw_impl_port *pw_context_find_port(struct pw_context *context,
 | 
			
		|||
{
 | 
			
		||||
	struct pw_impl_port *best = NULL;
 | 
			
		||||
	bool have_id;
 | 
			
		||||
	struct pw_node *n;
 | 
			
		||||
	struct pw_impl_node *n;
 | 
			
		||||
 | 
			
		||||
	have_id = id != SPA_ID_INVALID;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -868,7 +868,7 @@ struct pw_impl_port *pw_context_find_port(struct pw_context *context,
 | 
			
		|||
				pw_log_debug(NAME" %p: id:%u matches node %p", context, id, n);
 | 
			
		||||
 | 
			
		||||
				best =
 | 
			
		||||
				    pw_node_find_port(n,
 | 
			
		||||
				    pw_impl_node_find_port(n,
 | 
			
		||||
						pw_direction_reverse(other_port->direction),
 | 
			
		||||
						SPA_ID_INVALID);
 | 
			
		||||
				if (best)
 | 
			
		||||
| 
						 | 
				
			
			@ -880,7 +880,7 @@ struct pw_impl_port *pw_context_find_port(struct pw_context *context,
 | 
			
		|||
			struct spa_pod_builder b = SPA_POD_BUILDER_INIT(buf, sizeof(buf));
 | 
			
		||||
			struct spa_pod *dummy;
 | 
			
		||||
 | 
			
		||||
			p = pw_node_find_port(n,
 | 
			
		||||
			p = pw_impl_node_find_port(n,
 | 
			
		||||
					pw_direction_reverse(other_port->direction),
 | 
			
		||||
					SPA_ID_INVALID);
 | 
			
		||||
			if (p == NULL)
 | 
			
		||||
| 
						 | 
				
			
			@ -1090,10 +1090,10 @@ struct pw_impl_factory *pw_context_find_factory(struct pw_context *context,
 | 
			
		|||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int collect_nodes(struct pw_node *driver)
 | 
			
		||||
static int collect_nodes(struct pw_impl_node *driver)
 | 
			
		||||
{
 | 
			
		||||
	struct spa_list queue;
 | 
			
		||||
	struct pw_node *n, *t;
 | 
			
		||||
	struct pw_impl_node *n, *t;
 | 
			
		||||
	struct pw_impl_port *p;
 | 
			
		||||
	struct pw_impl_link *l;
 | 
			
		||||
	uint32_t max_quantum = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -1113,7 +1113,7 @@ static int collect_nodes(struct pw_node *driver)
 | 
			
		|||
 | 
			
		||||
	spa_list_consume(n, &queue, sort_link) {
 | 
			
		||||
		spa_list_remove(&n->sort_link);
 | 
			
		||||
		pw_node_set_driver(n, driver);
 | 
			
		||||
		pw_impl_node_set_driver(n, driver);
 | 
			
		||||
 | 
			
		||||
		if (n->quantum_size > 0) {
 | 
			
		||||
			if (min_quantum == 0 || n->quantum_size < min_quantum)
 | 
			
		||||
| 
						 | 
				
			
			@ -1155,7 +1155,7 @@ static int collect_nodes(struct pw_node *driver)
 | 
			
		|||
 | 
			
		||||
int pw_context_recalc_graph(struct pw_context *context)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *n, *s, *target;
 | 
			
		||||
	struct pw_impl_node *n, *s, *target;
 | 
			
		||||
 | 
			
		||||
	/* start from all drivers and group all nodes that are linked
 | 
			
		||||
	 * to it. Some nodes are not (yet) linked to anything and they
 | 
			
		||||
| 
						 | 
				
			
			@ -1209,8 +1209,8 @@ int pw_context_recalc_graph(struct pw_context *context)
 | 
			
		|||
				if (n->quantum_size > 0 && n->quantum_size < target->quantum_current)
 | 
			
		||||
					target->quantum_current = SPA_MAX(MIN_QUANTUM, n->quantum_size);
 | 
			
		||||
			}
 | 
			
		||||
			pw_node_set_driver(n, target);
 | 
			
		||||
			pw_node_set_state(n, target && n->active ?
 | 
			
		||||
			pw_impl_node_set_driver(n, target);
 | 
			
		||||
			pw_impl_node_set_state(n, target && n->active ?
 | 
			
		||||
					PW_NODE_STATE_RUNNING : PW_NODE_STATE_IDLE);
 | 
			
		||||
		}
 | 
			
		||||
		n->visited = false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ static void object_destroy(struct object_data *od)
 | 
			
		|||
{
 | 
			
		||||
	switch (od->type) {
 | 
			
		||||
	case SPA_TYPE_INTERFACE_Node:
 | 
			
		||||
		pw_node_destroy(od->object);
 | 
			
		||||
		pw_impl_node_destroy(od->object);
 | 
			
		||||
		break;
 | 
			
		||||
	case SPA_TYPE_INTERFACE_Device:
 | 
			
		||||
		pw_impl_device_destroy(od->object);
 | 
			
		||||
| 
						 | 
				
			
			@ -86,7 +86,7 @@ static void object_update(struct object_data *od, const struct spa_dict *props)
 | 
			
		|||
{
 | 
			
		||||
	switch (od->type) {
 | 
			
		||||
	case SPA_TYPE_INTERFACE_Node:
 | 
			
		||||
		pw_node_update_properties(od->object, props);
 | 
			
		||||
		pw_impl_node_update_properties(od->object, props);
 | 
			
		||||
		break;
 | 
			
		||||
	case SPA_TYPE_INTERFACE_Device:
 | 
			
		||||
		pw_impl_device_update_properties(od->object, props);
 | 
			
		||||
| 
						 | 
				
			
			@ -98,8 +98,8 @@ static void object_register(struct object_data *od)
 | 
			
		|||
{
 | 
			
		||||
	switch (od->type) {
 | 
			
		||||
	case SPA_TYPE_INTERFACE_Node:
 | 
			
		||||
		pw_node_register(od->object, NULL);
 | 
			
		||||
		pw_node_set_active(od->object, true);
 | 
			
		||||
		pw_impl_node_register(od->object, NULL);
 | 
			
		||||
		pw_impl_node_set_active(od->object, true);
 | 
			
		||||
		break;
 | 
			
		||||
	case SPA_TYPE_INTERFACE_Device:
 | 
			
		||||
		pw_impl_device_register(od->object, NULL);
 | 
			
		||||
| 
						 | 
				
			
			@ -470,8 +470,8 @@ static void on_object_free(void *data)
 | 
			
		|||
	pw_unload_spa_handle(od->handle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_node_events node_object_events = {
 | 
			
		||||
	PW_VERSION_NODE_EVENTS,
 | 
			
		||||
static const struct pw_impl_node_events node_object_events = {
 | 
			
		||||
	PW_VERSION_IMPL_NODE_EVENTS,
 | 
			
		||||
	.destroy = on_object_destroy,
 | 
			
		||||
	.free = on_object_free,
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -562,13 +562,13 @@ static void device_add_object(struct pw_impl_device *device, uint32_t id,
 | 
			
		|||
	switch (info->type) {
 | 
			
		||||
	case SPA_TYPE_INTERFACE_Node:
 | 
			
		||||
	{
 | 
			
		||||
		struct pw_node *node;
 | 
			
		||||
		node = pw_node_new(context, props, sizeof(struct object_data));
 | 
			
		||||
		struct pw_impl_node *node;
 | 
			
		||||
		node = pw_impl_node_new(context, props, sizeof(struct object_data));
 | 
			
		||||
 | 
			
		||||
		od = pw_node_get_user_data(node);
 | 
			
		||||
		od = pw_impl_node_get_user_data(node);
 | 
			
		||||
		od->object = node;
 | 
			
		||||
		pw_node_add_listener(node, &od->listener, &node_object_events, od);
 | 
			
		||||
		pw_node_set_implementation(node, iface);
 | 
			
		||||
		pw_impl_node_add_listener(node, &od->listener, &node_object_events, od);
 | 
			
		||||
		pw_impl_node_set_implementation(node, iface);
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
	case SPA_TYPE_INTERFACE_Device:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,7 +66,7 @@ struct impl {
 | 
			
		|||
 | 
			
		||||
	struct spa_io_buffers io;
 | 
			
		||||
 | 
			
		||||
	struct pw_node *inode, *onode;
 | 
			
		||||
	struct pw_impl_node *inode, *onode;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct resource_data {
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +77,7 @@ struct resource_data {
 | 
			
		|||
 | 
			
		||||
static void debug_link(struct pw_impl_link *link)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *in = link->input->node, *out = link->output->node;
 | 
			
		||||
	struct pw_impl_node *in = link->input->node, *out = link->output->node;
 | 
			
		||||
 | 
			
		||||
	pw_log_debug(NAME" %p: %d %d %d out %d %d %d , %d %d %d in %d %d %d", link,
 | 
			
		||||
			out->n_used_input_links,
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +110,7 @@ static void info_changed(struct pw_impl_link *link)
 | 
			
		|||
static void pw_impl_link_update_state(struct pw_impl_link *link, enum pw_link_state state, char *error)
 | 
			
		||||
{
 | 
			
		||||
	enum pw_link_state old = link->info.state;
 | 
			
		||||
	struct pw_node *in = link->input->node, *out = link->output->node;
 | 
			
		||||
	struct pw_impl_node *in = link->input->node, *out = link->output->node;
 | 
			
		||||
 | 
			
		||||
	if (state == old)
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			@ -137,19 +137,19 @@ static void pw_impl_link_update_state(struct pw_impl_link *link, enum pw_link_st
 | 
			
		|||
	if (old != PW_LINK_STATE_PAUSED && state == PW_LINK_STATE_PAUSED) {
 | 
			
		||||
		if (++out->n_ready_output_links == out->n_used_output_links &&
 | 
			
		||||
		    out->n_ready_input_links == out->n_used_input_links)
 | 
			
		||||
			pw_node_set_state(out, PW_NODE_STATE_RUNNING);
 | 
			
		||||
			pw_impl_node_set_state(out, PW_NODE_STATE_RUNNING);
 | 
			
		||||
		if (++in->n_ready_input_links == in->n_used_input_links &&
 | 
			
		||||
		    in->n_ready_output_links == in->n_used_output_links)
 | 
			
		||||
			pw_node_set_state(in, PW_NODE_STATE_RUNNING);
 | 
			
		||||
			pw_impl_node_set_state(in, PW_NODE_STATE_RUNNING);
 | 
			
		||||
		pw_impl_link_activate(link);
 | 
			
		||||
	}
 | 
			
		||||
	else if (old == PW_LINK_STATE_PAUSED && state < PW_LINK_STATE_PAUSED) {
 | 
			
		||||
		if (--out->n_ready_output_links == 0 &&
 | 
			
		||||
		    out->n_ready_input_links == 0)
 | 
			
		||||
			pw_node_set_state(out, PW_NODE_STATE_IDLE);
 | 
			
		||||
			pw_impl_node_set_state(out, PW_NODE_STATE_IDLE);
 | 
			
		||||
		if (--in->n_ready_input_links == 0 &&
 | 
			
		||||
		    in->n_ready_output_links == 0)
 | 
			
		||||
			pw_node_set_state(in, PW_NODE_STATE_IDLE);
 | 
			
		||||
			pw_impl_node_set_state(in, PW_NODE_STATE_IDLE);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -260,7 +260,7 @@ static int do_negotiate(struct pw_impl_link *this)
 | 
			
		|||
					spa_debug_pod(2, NULL, current);
 | 
			
		||||
				spa_debug_pod(2, NULL, format);
 | 
			
		||||
			}
 | 
			
		||||
			pw_node_set_state(output->node, PW_NODE_STATE_SUSPENDED);
 | 
			
		||||
			pw_impl_node_set_state(output->node, PW_NODE_STATE_SUSPENDED);
 | 
			
		||||
			out_state = PW_IMPL_PORT_STATE_CONFIGURE;
 | 
			
		||||
		}
 | 
			
		||||
		else {
 | 
			
		||||
| 
						 | 
				
			
			@ -296,7 +296,7 @@ static int do_negotiate(struct pw_impl_link *this)
 | 
			
		|||
					spa_debug_pod(2, NULL, current);
 | 
			
		||||
				spa_debug_pod(2, NULL, format);
 | 
			
		||||
			}
 | 
			
		||||
			pw_node_set_state(input->node, PW_NODE_STATE_SUSPENDED);
 | 
			
		||||
			pw_impl_node_set_state(input->node, PW_NODE_STATE_SUSPENDED);
 | 
			
		||||
			in_state = PW_IMPL_PORT_STATE_CONFIGURE;
 | 
			
		||||
		}
 | 
			
		||||
		else {
 | 
			
		||||
| 
						 | 
				
			
			@ -736,7 +736,7 @@ do_deactivate_link(struct spa_loop *loop,
 | 
			
		|||
int pw_impl_link_deactivate(struct pw_impl_link *this)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = SPA_CONTAINER_OF(this, struct impl, this);
 | 
			
		||||
	struct pw_node *input_node, *output_node;
 | 
			
		||||
	struct pw_impl_node *input_node, *output_node;
 | 
			
		||||
 | 
			
		||||
	pw_log_debug(NAME" %p: deactivate %d %d", this, impl->prepare, impl->activated);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -771,7 +771,7 @@ int pw_impl_link_deactivate(struct pw_impl_link *this)
 | 
			
		|||
	if (input_node->n_used_input_links <= input_node->idle_used_input_links &&
 | 
			
		||||
	    input_node->n_used_output_links <= input_node->idle_used_output_links &&
 | 
			
		||||
	    input_node->info.state > PW_NODE_STATE_IDLE) {
 | 
			
		||||
		pw_node_set_state(input_node, PW_NODE_STATE_IDLE);
 | 
			
		||||
		pw_impl_node_set_state(input_node, PW_NODE_STATE_IDLE);
 | 
			
		||||
		pw_log_debug(NAME" %p: input port %p state %d -> %d", this,
 | 
			
		||||
				this->input, this->input->state, PW_IMPL_PORT_STATE_PAUSED);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -779,7 +779,7 @@ int pw_impl_link_deactivate(struct pw_impl_link *this)
 | 
			
		|||
	if (output_node->n_used_input_links <= output_node->idle_used_input_links &&
 | 
			
		||||
	    output_node->n_used_output_links <= output_node->idle_used_output_links &&
 | 
			
		||||
	    output_node->info.state > PW_NODE_STATE_IDLE) {
 | 
			
		||||
		pw_node_set_state(output_node, PW_NODE_STATE_IDLE);
 | 
			
		||||
		pw_impl_node_set_state(output_node, PW_NODE_STATE_IDLE);
 | 
			
		||||
		pw_log_debug(NAME" %p: output port %p state %d -> %d", this,
 | 
			
		||||
				this->output, this->output->state, PW_IMPL_PORT_STATE_PAUSED);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -898,17 +898,17 @@ static void output_node_result(void *data, int seq, int res, uint32_t type, cons
 | 
			
		|||
	node_result(impl, port, seq, res, type, result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_node_events input_node_events = {
 | 
			
		||||
	PW_VERSION_NODE_EVENTS,
 | 
			
		||||
static const struct pw_impl_node_events input_node_events = {
 | 
			
		||||
	PW_VERSION_IMPL_NODE_EVENTS,
 | 
			
		||||
	.result = input_node_result,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const struct pw_node_events output_node_events = {
 | 
			
		||||
	PW_VERSION_NODE_EVENTS,
 | 
			
		||||
static const struct pw_impl_node_events output_node_events = {
 | 
			
		||||
	PW_VERSION_IMPL_NODE_EVENTS,
 | 
			
		||||
	.result = output_node_result,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static bool pw_node_can_reach(struct pw_node *output, struct pw_node *input)
 | 
			
		||||
static bool pw_impl_node_can_reach(struct pw_impl_node *output, struct pw_impl_node *input)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_impl_port *p;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -927,7 +927,7 @@ static bool pw_node_can_reach(struct pw_node *output, struct pw_node *input)
 | 
			
		|||
		spa_list_for_each(l, &p->links, output_link) {
 | 
			
		||||
			if (l->feedback)
 | 
			
		||||
				continue;
 | 
			
		||||
			if (pw_node_can_reach(l->input->node, input))
 | 
			
		||||
			if (pw_impl_node_can_reach(l->input->node, input))
 | 
			
		||||
				return true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1041,7 +1041,7 @@ struct pw_impl_link *pw_impl_link_new(struct pw_context *context,
 | 
			
		|||
{
 | 
			
		||||
	struct impl *impl;
 | 
			
		||||
	struct pw_impl_link *this;
 | 
			
		||||
	struct pw_node *input_node, *output_node;
 | 
			
		||||
	struct pw_impl_node *input_node, *output_node;
 | 
			
		||||
	const char *str;
 | 
			
		||||
	int res;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1071,7 +1071,7 @@ struct pw_impl_link *pw_impl_link_new(struct pw_context *context,
 | 
			
		|||
		goto error_no_mem;
 | 
			
		||||
 | 
			
		||||
	this = &impl->this;
 | 
			
		||||
	this->feedback = pw_node_can_reach(input_node, output_node);
 | 
			
		||||
	this->feedback = pw_impl_node_can_reach(input_node, output_node);
 | 
			
		||||
	pw_log_debug(NAME" %p: new out-port:%p -> in-port:%p", this, output, input);
 | 
			
		||||
 | 
			
		||||
	if (user_data_size > 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -1095,10 +1095,10 @@ struct pw_impl_link *pw_impl_link_new(struct pw_context *context,
 | 
			
		|||
	impl->format_filter = format_filter;
 | 
			
		||||
 | 
			
		||||
	pw_impl_port_add_listener(input, &impl->input_port_listener, &input_port_events, impl);
 | 
			
		||||
	pw_node_add_listener(input_node, &impl->input_node_listener, &input_node_events, impl);
 | 
			
		||||
	pw_impl_node_add_listener(input_node, &impl->input_node_listener, &input_node_events, impl);
 | 
			
		||||
	pw_global_add_listener(input->global, &impl->input_global_listener, &input_global_events, impl);
 | 
			
		||||
	pw_impl_port_add_listener(output, &impl->output_port_listener, &output_port_events, impl);
 | 
			
		||||
	pw_node_add_listener(output_node, &impl->output_node_listener, &output_node_events, impl);
 | 
			
		||||
	pw_impl_node_add_listener(output_node, &impl->output_node_listener, &output_node_events, impl);
 | 
			
		||||
	pw_global_add_listener(output->global, &impl->output_global_listener, &output_global_events, impl);
 | 
			
		||||
 | 
			
		||||
	input_node->live = output_node->live;
 | 
			
		||||
| 
						 | 
				
			
			@ -1142,7 +1142,7 @@ struct pw_impl_link *pw_impl_link_new(struct pw_context *context,
 | 
			
		|||
 | 
			
		||||
	try_link_controls(impl, output, input);
 | 
			
		||||
 | 
			
		||||
	pw_node_emit_peer_added(output_node, input_node);
 | 
			
		||||
	pw_impl_node_emit_peer_added(output_node, input_node);
 | 
			
		||||
 | 
			
		||||
	pw_context_recalc_graph(context);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1198,7 +1198,7 @@ int pw_impl_link_register(struct pw_impl_link *link,
 | 
			
		|||
		     struct pw_properties *properties)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_context *context = link->context;
 | 
			
		||||
	struct pw_node *output_node, *input_node;
 | 
			
		||||
	struct pw_impl_node *output_node, *input_node;
 | 
			
		||||
	const char *keys[] = {
 | 
			
		||||
		PW_KEY_OBJECT_PATH,
 | 
			
		||||
		PW_KEY_MODULE_ID,
 | 
			
		||||
| 
						 | 
				
			
			@ -1277,7 +1277,7 @@ void pw_impl_link_destroy(struct pw_impl_link *link)
 | 
			
		|||
	if (link->registered)
 | 
			
		||||
		spa_list_remove(&link->link);
 | 
			
		||||
 | 
			
		||||
	pw_node_emit_peer_removed(link->output->node, link->input->node);
 | 
			
		||||
	pw_impl_node_emit_peer_removed(link->output->node, link->input->node);
 | 
			
		||||
 | 
			
		||||
	try_unlink_controls(impl, link->output, link->input);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,7 +41,7 @@
 | 
			
		|||
 | 
			
		||||
/** \cond */
 | 
			
		||||
struct impl {
 | 
			
		||||
	struct pw_node this;
 | 
			
		||||
	struct pw_impl_node this;
 | 
			
		||||
 | 
			
		||||
	struct pw_work_queue *work;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -55,7 +55,7 @@ struct impl {
 | 
			
		|||
#define pw_node_resource_param(r,...)	pw_node_resource(r,param,0,__VA_ARGS__)
 | 
			
		||||
 | 
			
		||||
struct resource_data {
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
	struct pw_resource *resource;
 | 
			
		||||
 | 
			
		||||
	struct spa_hook resource_listener;
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +72,7 @@ struct resource_data {
 | 
			
		|||
 | 
			
		||||
/** \endcond */
 | 
			
		||||
 | 
			
		||||
static void node_deactivate(struct pw_node *this)
 | 
			
		||||
static void node_deactivate(struct pw_impl_node *this)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_impl_port *port;
 | 
			
		||||
	struct pw_impl_link *link;
 | 
			
		||||
| 
						 | 
				
			
			@ -88,7 +88,7 @@ static void node_deactivate(struct pw_node *this)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void add_node(struct pw_node *this, struct pw_node *driver)
 | 
			
		||||
static void add_node(struct pw_impl_node *this, struct pw_impl_node *driver)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t rdriver, rnode;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +110,7 @@ static void add_node(struct pw_node *this, struct pw_node *driver)
 | 
			
		|||
	pw_log_trace(NAME" %p: required driver:%d node:%d", this, rdriver, rnode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void remove_node(struct pw_node *this)
 | 
			
		||||
static void remove_node(struct pw_impl_node *this)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t rdriver, rnode;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -134,7 +134,7 @@ static int
 | 
			
		|||
do_node_remove(struct spa_loop *loop,
 | 
			
		||||
	       bool async, uint32_t seq, const void *data, size_t size, void *user_data)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *this = user_data;
 | 
			
		||||
	struct pw_impl_node *this = user_data;
 | 
			
		||||
	if (this->source.loop != NULL) {
 | 
			
		||||
		spa_loop_remove_source(loop, &this->source);
 | 
			
		||||
		remove_node(this);
 | 
			
		||||
| 
						 | 
				
			
			@ -142,7 +142,7 @@ do_node_remove(struct spa_loop *loop,
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int pause_node(struct pw_node *this)
 | 
			
		||||
static int pause_node(struct pw_impl_node *this)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = SPA_CONTAINER_OF(this, struct impl, this);
 | 
			
		||||
	int res = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -169,8 +169,8 @@ static int
 | 
			
		|||
do_node_add(struct spa_loop *loop,
 | 
			
		||||
	    bool async, uint32_t seq, const void *data, size_t size, void *user_data)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *this = user_data;
 | 
			
		||||
	struct pw_node *driver = this->driver_node;
 | 
			
		||||
	struct pw_impl_node *this = user_data;
 | 
			
		||||
	struct pw_impl_node *driver = this->driver_node;
 | 
			
		||||
 | 
			
		||||
	if (this->source.loop == NULL) {
 | 
			
		||||
		spa_loop_add_source(loop, &this->source);
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +179,7 @@ do_node_add(struct spa_loop *loop,
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int start_node(struct pw_node *this)
 | 
			
		||||
static int start_node(struct pw_impl_node *this)
 | 
			
		||||
{
 | 
			
		||||
	int res = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -204,14 +204,14 @@ static int start_node(struct pw_node *this)
 | 
			
		|||
	return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void emit_info_changed(struct pw_node *node)
 | 
			
		||||
static void emit_info_changed(struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_resource *resource;
 | 
			
		||||
 | 
			
		||||
	if (node->info.change_mask == 0)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	pw_node_emit_info_changed(node, &node->info);
 | 
			
		||||
	pw_impl_node_emit_info_changed(node, &node->info);
 | 
			
		||||
 | 
			
		||||
	if (node->global)
 | 
			
		||||
		spa_list_for_each(resource, &node->global->resource_list, link)
 | 
			
		||||
| 
						 | 
				
			
			@ -235,7 +235,7 @@ static int resource_is_subscribed(struct pw_resource *resource, uint32_t id)
 | 
			
		|||
static int notify_param(void *data, int seq, uint32_t id,
 | 
			
		||||
		uint32_t index, uint32_t next, struct spa_pod *param)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node = data;
 | 
			
		||||
	struct pw_impl_node *node = data;
 | 
			
		||||
	struct pw_resource *resource;
 | 
			
		||||
 | 
			
		||||
	spa_list_for_each(resource, &node->global->resource_list, link) {
 | 
			
		||||
| 
						 | 
				
			
			@ -248,7 +248,7 @@ static int notify_param(void *data, int seq, uint32_t id,
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void emit_params(struct pw_node *node, uint32_t *changed_ids, uint32_t n_changed_ids)
 | 
			
		||||
static void emit_params(struct pw_impl_node *node, uint32_t *changed_ids, uint32_t n_changed_ids)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t i;
 | 
			
		||||
	int res;
 | 
			
		||||
| 
						 | 
				
			
			@ -270,14 +270,14 @@ static void emit_params(struct pw_node *node, uint32_t *changed_ids, uint32_t n_
 | 
			
		|||
		if (!subscribed)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		if ((res = pw_node_for_each_param(node, 1, changed_ids[i], 0, UINT32_MAX,
 | 
			
		||||
		if ((res = pw_impl_node_for_each_param(node, 1, changed_ids[i], 0, UINT32_MAX,
 | 
			
		||||
					NULL, notify_param, node)) < 0) {
 | 
			
		||||
			pw_log_error(NAME" %p: error %d (%s)", node, res, spa_strerror(res));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void node_update_state(struct pw_node *node, enum pw_node_state state, char *error)
 | 
			
		||||
static void node_update_state(struct pw_impl_node *node, enum pw_node_state state, char *error)
 | 
			
		||||
{
 | 
			
		||||
	enum pw_node_state old;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -305,13 +305,13 @@ static void node_update_state(struct pw_node *node, enum pw_node_state state, ch
 | 
			
		|||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pw_node_emit_state_changed(node, old, state, error);
 | 
			
		||||
	pw_impl_node_emit_state_changed(node, old, state, error);
 | 
			
		||||
 | 
			
		||||
	node->info.change_mask |= PW_NODE_CHANGE_MASK_STATE;
 | 
			
		||||
	emit_info_changed(node);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int suspend_node(struct pw_node *this)
 | 
			
		||||
static int suspend_node(struct pw_impl_node *this)
 | 
			
		||||
{
 | 
			
		||||
	int res = 0;
 | 
			
		||||
	struct pw_impl_port *p;
 | 
			
		||||
| 
						 | 
				
			
			@ -353,7 +353,7 @@ static void node_unbind_func(void *data)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
clear_info(struct pw_node *this)
 | 
			
		||||
clear_info(struct pw_impl_node *this)
 | 
			
		||||
{
 | 
			
		||||
	free(this->name);
 | 
			
		||||
	free((char*)this->info.error);
 | 
			
		||||
| 
						 | 
				
			
			@ -378,7 +378,7 @@ static int node_enum_params(void *object, int seq, uint32_t id,
 | 
			
		|||
{
 | 
			
		||||
	struct pw_resource *resource = object;
 | 
			
		||||
	struct resource_data *data = pw_resource_get_user_data(resource);
 | 
			
		||||
	struct pw_node *node = data->node;
 | 
			
		||||
	struct pw_impl_node *node = data->node;
 | 
			
		||||
	struct pw_impl_client *client = resource->client;
 | 
			
		||||
	int res;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -386,7 +386,7 @@ static int node_enum_params(void *object, int seq, uint32_t id,
 | 
			
		|||
			node, resource, seq,
 | 
			
		||||
			spa_debug_type_find_name(spa_type_param, id), index, num);
 | 
			
		||||
 | 
			
		||||
	if ((res = pw_node_for_each_param(node, seq, id, index, num,
 | 
			
		||||
	if ((res = pw_impl_node_for_each_param(node, seq, id, index, num,
 | 
			
		||||
				filter, reply_param, data)) < 0) {
 | 
			
		||||
		pw_log_error(NAME" %p: resource %p %d error %d (%s)", node,
 | 
			
		||||
				resource, resource->id, res, spa_strerror(res));
 | 
			
		||||
| 
						 | 
				
			
			@ -434,7 +434,7 @@ static int node_set_param(void *object, uint32_t id, uint32_t flags,
 | 
			
		|||
{
 | 
			
		||||
	struct pw_resource *resource = object;
 | 
			
		||||
	struct resource_data *data = pw_resource_get_user_data(resource);
 | 
			
		||||
	struct pw_node *node = data->node;
 | 
			
		||||
	struct pw_impl_node *node = data->node;
 | 
			
		||||
	struct pw_impl_client *client = resource->client;
 | 
			
		||||
	int res;
 | 
			
		||||
	static const struct spa_node_events node_events = {
 | 
			
		||||
| 
						 | 
				
			
			@ -466,7 +466,7 @@ static int node_send_command(void *object, const struct spa_command *command)
 | 
			
		|||
{
 | 
			
		||||
	struct pw_resource *resource = object;
 | 
			
		||||
	struct resource_data *data = pw_resource_get_user_data(resource);
 | 
			
		||||
	struct pw_node *node = data->node;
 | 
			
		||||
	struct pw_impl_node *node = data->node;
 | 
			
		||||
 | 
			
		||||
	switch (SPA_NODE_COMMAND_ID(command)) {
 | 
			
		||||
	case SPA_NODE_COMMAND_Suspend:
 | 
			
		||||
| 
						 | 
				
			
			@ -491,7 +491,7 @@ static int
 | 
			
		|||
global_bind(void *_data, struct pw_impl_client *client, uint32_t permissions,
 | 
			
		||||
	    uint32_t version, uint32_t id)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *this = _data;
 | 
			
		||||
	struct pw_impl_node *this = _data;
 | 
			
		||||
	struct pw_global *global = this->global;
 | 
			
		||||
	struct pw_resource *resource;
 | 
			
		||||
	struct resource_data *data;
 | 
			
		||||
| 
						 | 
				
			
			@ -530,10 +530,10 @@ error_resource:
 | 
			
		|||
 | 
			
		||||
static void global_destroy(void *data)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *this = data;
 | 
			
		||||
	struct pw_impl_node *this = data;
 | 
			
		||||
	spa_hook_remove(&this->global_listener);
 | 
			
		||||
	this->global = NULL;
 | 
			
		||||
	pw_node_destroy(this);
 | 
			
		||||
	pw_impl_node_destroy(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_global_events global_events = {
 | 
			
		||||
| 
						 | 
				
			
			@ -541,9 +541,9 @@ static const struct pw_global_events global_events = {
 | 
			
		|||
	.destroy = global_destroy,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static inline void insert_driver(struct pw_context *context, struct pw_node *node)
 | 
			
		||||
static inline void insert_driver(struct pw_context *context, struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *n, *t;
 | 
			
		||||
	struct pw_impl_node *n, *t;
 | 
			
		||||
 | 
			
		||||
	spa_list_for_each_safe(n, t, &context->driver_list, driver_link) {
 | 
			
		||||
		if (n->priority_master < node->priority_master)
 | 
			
		||||
| 
						 | 
				
			
			@ -553,7 +553,7 @@ static inline void insert_driver(struct pw_context *context, struct pw_node *nod
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
int pw_node_register(struct pw_node *this,
 | 
			
		||||
int pw_impl_node_register(struct pw_impl_node *this,
 | 
			
		||||
		     struct pw_properties *properties)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_context *context = this->context;
 | 
			
		||||
| 
						 | 
				
			
			@ -607,7 +607,7 @@ int pw_node_register(struct pw_node *this,
 | 
			
		|||
	pw_properties_setf(this->properties, PW_KEY_OBJECT_ID, "%d", this->info.id);
 | 
			
		||||
	this->info.props = &this->properties->dict;
 | 
			
		||||
 | 
			
		||||
	pw_node_initialized(this);
 | 
			
		||||
	pw_impl_node_initialized(this);
 | 
			
		||||
 | 
			
		||||
	pw_global_add_listener(this->global, &this->global_listener, &global_events, this);
 | 
			
		||||
	pw_global_register(this->global);
 | 
			
		||||
| 
						 | 
				
			
			@ -628,10 +628,10 @@ error_existed:
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
int pw_node_initialized(struct pw_node *this)
 | 
			
		||||
int pw_impl_node_initialized(struct pw_impl_node *this)
 | 
			
		||||
{
 | 
			
		||||
	pw_log_debug(NAME" %p initialized", this);
 | 
			
		||||
	pw_node_emit_initialized(this);
 | 
			
		||||
	pw_impl_node_emit_initialized(this);
 | 
			
		||||
	node_update_state(this, PW_NODE_STATE_SUSPENDED, NULL);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -641,8 +641,8 @@ do_move_nodes(struct spa_loop *loop,
 | 
			
		|||
		bool async, uint32_t seq, const void *data, size_t size, void *user_data)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *src = user_data;
 | 
			
		||||
	struct pw_node *driver = *(struct pw_node **)data;
 | 
			
		||||
	struct pw_node *this = &src->this;
 | 
			
		||||
	struct pw_impl_node *driver = *(struct pw_impl_node **)data;
 | 
			
		||||
	struct pw_impl_node *this = &src->this;
 | 
			
		||||
 | 
			
		||||
	pw_log_trace(NAME" %p: driver:%p->%p", this, this->driver_node, driver);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -653,7 +653,7 @@ do_move_nodes(struct spa_loop *loop,
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void remove_segment_master(struct pw_node *driver, uint32_t node_id)
 | 
			
		||||
static void remove_segment_master(struct pw_impl_node *driver, uint32_t node_id)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node_activation *a = driver->rt.activation;
 | 
			
		||||
	ATOMIC_CAS(a->segment_owner[0], node_id, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -661,10 +661,10 @@ static void remove_segment_master(struct pw_node *driver, uint32_t node_id)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
int pw_node_set_driver(struct pw_node *node, struct pw_node *driver)
 | 
			
		||||
int pw_impl_node_set_driver(struct pw_impl_node *node, struct pw_impl_node *driver)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this);
 | 
			
		||||
	struct pw_node *old = node->driver_node;
 | 
			
		||||
	struct pw_impl_node *old = node->driver_node;
 | 
			
		||||
	int res;
 | 
			
		||||
 | 
			
		||||
	if (driver == NULL)
 | 
			
		||||
| 
						 | 
				
			
			@ -683,7 +683,7 @@ int pw_node_set_driver(struct pw_node *node, struct pw_node *driver)
 | 
			
		|||
 | 
			
		||||
	node->driver_node = driver;
 | 
			
		||||
 | 
			
		||||
	pw_node_emit_driver_changed(node, old, driver);
 | 
			
		||||
	pw_impl_node_emit_driver_changed(node, old, driver);
 | 
			
		||||
 | 
			
		||||
	if ((res = spa_node_set_io(node->node,
 | 
			
		||||
		    SPA_IO_Position,
 | 
			
		||||
| 
						 | 
				
			
			@ -696,7 +696,7 @@ int pw_node_set_driver(struct pw_node *node, struct pw_node *driver)
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	pw_loop_invoke(node->data_loop,
 | 
			
		||||
		       do_move_nodes, SPA_ID_INVALID, &driver, sizeof(struct pw_node *),
 | 
			
		||||
		       do_move_nodes, SPA_ID_INVALID, &driver, sizeof(struct pw_impl_node *),
 | 
			
		||||
		       true, impl);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -711,7 +711,7 @@ static uint32_t flp2(uint32_t x)
 | 
			
		|||
	return x - (x >> 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void check_properties(struct pw_node *node)
 | 
			
		||||
static void check_properties(struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this);
 | 
			
		||||
	const char *str;
 | 
			
		||||
| 
						 | 
				
			
			@ -775,7 +775,7 @@ static void check_properties(struct pw_node *node)
 | 
			
		|||
		pw_context_recalc_graph(node->context);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void dump_states(struct pw_node *driver)
 | 
			
		||||
static void dump_states(struct pw_impl_node *driver)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node_target *t;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -796,7 +796,7 @@ static void dump_states(struct pw_node *driver)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int resume_node(struct pw_node *this, int status)
 | 
			
		||||
static inline int resume_node(struct pw_impl_node *this, int status)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node_target *t;
 | 
			
		||||
	struct timespec ts;
 | 
			
		||||
| 
						 | 
				
			
			@ -828,7 +828,7 @@ static inline int resume_node(struct pw_node *this, int status)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void calculate_stats(struct pw_node *this,  struct pw_node_activation *a)
 | 
			
		||||
static inline void calculate_stats(struct pw_impl_node *this,  struct pw_node_activation *a)
 | 
			
		||||
{
 | 
			
		||||
	if (a->signal_time > a->prev_signal_time) {
 | 
			
		||||
		uint64_t process_time = a->finish_time - a->signal_time;
 | 
			
		||||
| 
						 | 
				
			
			@ -842,7 +842,7 @@ static inline void calculate_stats(struct pw_node *this,  struct pw_node_activat
 | 
			
		|||
 | 
			
		||||
static inline int process_node(void *data)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *this = data;
 | 
			
		||||
	struct pw_impl_node *this = data;
 | 
			
		||||
	struct timespec ts;
 | 
			
		||||
        struct pw_impl_port *p;
 | 
			
		||||
	struct pw_node_activation *a = this->rt.activation;
 | 
			
		||||
| 
						 | 
				
			
			@ -897,7 +897,7 @@ static inline int process_node(void *data)
 | 
			
		|||
 | 
			
		||||
static void node_on_fd_events(struct spa_source *source)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *this = source->data;
 | 
			
		||||
	struct pw_impl_node *this = source->data;
 | 
			
		||||
	struct spa_system *data_system = this->context->data_system;
 | 
			
		||||
 | 
			
		||||
	if (source->rmask & (SPA_IO_ERR | SPA_IO_HUP)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -936,12 +936,12 @@ static void reset_position(struct spa_io_position *pos)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
struct pw_node *pw_node_new(struct pw_context *context,
 | 
			
		||||
struct pw_impl_node *pw_impl_node_new(struct pw_context *context,
 | 
			
		||||
			    struct pw_properties *properties,
 | 
			
		||||
			    size_t user_data_size)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl;
 | 
			
		||||
	struct pw_node *this;
 | 
			
		||||
	struct pw_impl_node *this;
 | 
			
		||||
	size_t size;
 | 
			
		||||
	struct spa_system *data_system = context->data_system;
 | 
			
		||||
	int res;
 | 
			
		||||
| 
						 | 
				
			
			@ -1048,36 +1048,36 @@ error_exit:
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
const struct pw_node_info *pw_node_get_info(struct pw_node *node)
 | 
			
		||||
const struct pw_node_info *pw_impl_node_get_info(struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	return &node->info;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
void * pw_node_get_user_data(struct pw_node *node)
 | 
			
		||||
void * pw_impl_node_get_user_data(struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	return node->user_data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
struct pw_context * pw_node_get_context(struct pw_node *node)
 | 
			
		||||
struct pw_context * pw_impl_node_get_context(struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	return node->context;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
struct pw_global *pw_node_get_global(struct pw_node *node)
 | 
			
		||||
struct pw_global *pw_impl_node_get_global(struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	return node->global;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
const struct pw_properties *pw_node_get_properties(struct pw_node *node)
 | 
			
		||||
const struct pw_properties *pw_impl_node_get_properties(struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	return node->properties;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int update_properties(struct pw_node *node, const struct spa_dict *dict)
 | 
			
		||||
static int update_properties(struct pw_impl_node *node, const struct spa_dict *dict)
 | 
			
		||||
{
 | 
			
		||||
	int changed;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1094,7 +1094,7 @@ static int update_properties(struct pw_node *node, const struct spa_dict *dict)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
int pw_node_update_properties(struct pw_node *node, const struct spa_dict *dict)
 | 
			
		||||
int pw_impl_node_update_properties(struct pw_impl_node *node, const struct spa_dict *dict)
 | 
			
		||||
{
 | 
			
		||||
	int changed = update_properties(node, dict);
 | 
			
		||||
	emit_info_changed(node);
 | 
			
		||||
| 
						 | 
				
			
			@ -1103,7 +1103,7 @@ int pw_node_update_properties(struct pw_node *node, const struct spa_dict *dict)
 | 
			
		|||
 | 
			
		||||
static void node_info(void *data, const struct spa_node_info *info)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node = data;
 | 
			
		||||
	struct pw_impl_node *node = data;
 | 
			
		||||
	uint32_t changed_ids[MAX_PARAMS], n_changed_ids = 0;
 | 
			
		||||
 | 
			
		||||
	node->info.max_input_ports = info->max_input_ports;
 | 
			
		||||
| 
						 | 
				
			
			@ -1149,8 +1149,8 @@ static void node_info(void *data, const struct spa_node_info *info)
 | 
			
		|||
static void node_port_info(void *data, enum spa_direction direction, uint32_t port_id,
 | 
			
		||||
		const struct spa_port_info *info)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node = data;
 | 
			
		||||
	struct pw_impl_port *port = pw_node_find_port(node, direction, port_id);
 | 
			
		||||
	struct pw_impl_node *node = data;
 | 
			
		||||
	struct pw_impl_port *port = pw_impl_node_find_port(node, direction, port_id);
 | 
			
		||||
 | 
			
		||||
	if (info == NULL) {
 | 
			
		||||
		if (port) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1184,7 +1184,7 @@ static void node_port_info(void *data, enum spa_direction direction, uint32_t po
 | 
			
		|||
 | 
			
		||||
static void node_result(void *data, int seq, int res, uint32_t type, const void *result)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node = data;
 | 
			
		||||
	struct pw_impl_node *node = data;
 | 
			
		||||
	struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this);
 | 
			
		||||
 | 
			
		||||
	pw_log_trace(NAME" %p: result seq:%d res:%d type:%u", node, seq, res, type);
 | 
			
		||||
| 
						 | 
				
			
			@ -1193,12 +1193,12 @@ static void node_result(void *data, int seq, int res, uint32_t type, const void
 | 
			
		|||
	if (SPA_RESULT_IS_ASYNC(seq))
 | 
			
		||||
	        pw_work_queue_complete(impl->work, &impl->this, SPA_RESULT_ASYNC_SEQ(seq), res);
 | 
			
		||||
 | 
			
		||||
	pw_node_emit_result(node, seq, res, type, result);
 | 
			
		||||
	pw_impl_node_emit_result(node, seq, res, type, result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void node_event(void *data, const struct spa_event *event)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node = data;
 | 
			
		||||
	struct pw_impl_node *node = data;
 | 
			
		||||
	struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this);
 | 
			
		||||
 | 
			
		||||
	pw_log_trace(NAME" %p: event %d", node, SPA_EVENT_TYPE(event));
 | 
			
		||||
| 
						 | 
				
			
			@ -1211,7 +1211,7 @@ static void node_event(void *data, const struct spa_event *event)
 | 
			
		|||
	default:
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
	pw_node_emit_event(node, event);
 | 
			
		||||
	pw_impl_node_emit_event(node, event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct spa_node_events node_events = {
 | 
			
		||||
| 
						 | 
				
			
			@ -1226,7 +1226,7 @@ static const struct spa_node_events node_events = {
 | 
			
		|||
#define SYNC_START	1
 | 
			
		||||
#define SYNC_STOP	2
 | 
			
		||||
 | 
			
		||||
static int check_updates(struct pw_node *node, uint32_t *reposition_owner)
 | 
			
		||||
static int check_updates(struct pw_impl_node *node, uint32_t *reposition_owner)
 | 
			
		||||
{
 | 
			
		||||
	int res = SYNC_CHECK;
 | 
			
		||||
	struct pw_node_activation *a = node->rt.activation;
 | 
			
		||||
| 
						 | 
				
			
			@ -1261,7 +1261,7 @@ static int check_updates(struct pw_node *node, uint32_t *reposition_owner)
 | 
			
		|||
	return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void do_reposition(struct pw_node *driver, struct pw_node *node)
 | 
			
		||||
static void do_reposition(struct pw_impl_node *driver, struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node_activation *a = driver->rt.activation;
 | 
			
		||||
	struct spa_io_segment *dst, *src;
 | 
			
		||||
| 
						 | 
				
			
			@ -1285,7 +1285,7 @@ static void do_reposition(struct pw_node *driver, struct pw_node *node)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void update_position(struct pw_node *node, int all_ready)
 | 
			
		||||
static void update_position(struct pw_impl_node *node, int all_ready)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node_activation *a = node->rt.activation;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1304,8 +1304,8 @@ static void update_position(struct pw_node *node, int all_ready)
 | 
			
		|||
 | 
			
		||||
static int node_ready(void *data, int status)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node = data, *reposition_node = NULL;
 | 
			
		||||
	struct pw_node *driver = node->driver_node;
 | 
			
		||||
	struct pw_impl_node *node = data, *reposition_node = NULL;
 | 
			
		||||
	struct pw_impl_node *driver = node->driver_node;
 | 
			
		||||
	struct pw_node_target *t;
 | 
			
		||||
	struct pw_impl_port *p;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1377,7 +1377,7 @@ static int node_ready(void *data, int status)
 | 
			
		|||
 | 
			
		||||
static int node_reuse_buffer(void *data, uint32_t port_id, uint32_t buffer_id)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node = data;
 | 
			
		||||
	struct pw_impl_node *node = data;
 | 
			
		||||
	struct pw_impl_port *p;
 | 
			
		||||
 | 
			
		||||
	spa_list_for_each(p, &node->rt.input_mix, rt.node_link) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1392,7 +1392,7 @@ static int node_reuse_buffer(void *data, uint32_t port_id, uint32_t buffer_id)
 | 
			
		|||
 | 
			
		||||
static int node_xrun(void *data, uint64_t trigger, uint64_t delay, struct spa_pod *info)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *this = data;
 | 
			
		||||
	struct pw_impl_node *this = data;
 | 
			
		||||
	struct pw_node_activation *a = this->rt.activation;
 | 
			
		||||
 | 
			
		||||
	a->xrun_count++;
 | 
			
		||||
| 
						 | 
				
			
			@ -1414,7 +1414,7 @@ static const struct spa_node_callbacks node_callbacks = {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
int pw_node_set_implementation(struct pw_node *node,
 | 
			
		||||
int pw_impl_node_set_implementation(struct pw_impl_node *node,
 | 
			
		||||
			struct spa_node *spa_node)
 | 
			
		||||
{
 | 
			
		||||
	int res;
 | 
			
		||||
| 
						 | 
				
			
			@ -1450,15 +1450,15 @@ int pw_node_set_implementation(struct pw_node *node,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
struct spa_node *pw_node_get_implementation(struct pw_node *node)
 | 
			
		||||
struct spa_node *pw_impl_node_get_implementation(struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	return node->node;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
void pw_node_add_listener(struct pw_node *node,
 | 
			
		||||
void pw_impl_node_add_listener(struct pw_impl_node *node,
 | 
			
		||||
			   struct spa_hook *listener,
 | 
			
		||||
			   const struct pw_node_events *events,
 | 
			
		||||
			   const struct pw_impl_node_events *events,
 | 
			
		||||
			   void *data)
 | 
			
		||||
{
 | 
			
		||||
	spa_hook_list_append(&node->listener_list, listener, events, data);
 | 
			
		||||
| 
						 | 
				
			
			@ -1470,19 +1470,19 @@ void pw_node_add_listener(struct pw_node *node,
 | 
			
		|||
 * Remove \a node. This will stop the transfer on the node and
 | 
			
		||||
 * free the resources allocated by \a node.
 | 
			
		||||
 *
 | 
			
		||||
 * \memberof pw_node
 | 
			
		||||
 * \memberof pw_impl_node
 | 
			
		||||
 */
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
void pw_node_destroy(struct pw_node *node)
 | 
			
		||||
void pw_impl_node_destroy(struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this);
 | 
			
		||||
	struct pw_impl_port *port;
 | 
			
		||||
	struct pw_node *slave;
 | 
			
		||||
	struct pw_impl_node *slave;
 | 
			
		||||
 | 
			
		||||
	node->active = false;
 | 
			
		||||
 | 
			
		||||
	pw_log_debug(NAME" %p: destroy", impl);
 | 
			
		||||
	pw_node_emit_destroy(node);
 | 
			
		||||
	pw_impl_node_emit_destroy(node);
 | 
			
		||||
 | 
			
		||||
	suspend_node(node);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1494,7 +1494,7 @@ void pw_node_destroy(struct pw_node *node)
 | 
			
		|||
 | 
			
		||||
	spa_list_consume(slave, &node->slave_list, slave_link) {
 | 
			
		||||
		pw_log_debug(NAME" %p: reslave %p", impl, slave);
 | 
			
		||||
		pw_node_set_driver(slave, NULL);
 | 
			
		||||
		pw_impl_node_set_driver(slave, NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (node->registered) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1528,7 +1528,7 @@ void pw_node_destroy(struct pw_node *node)
 | 
			
		|||
	pw_context_recalc_graph(node->context);
 | 
			
		||||
 | 
			
		||||
	pw_log_debug(NAME" %p: free", node);
 | 
			
		||||
	pw_node_emit_free(node);
 | 
			
		||||
	pw_impl_node_emit_free(node);
 | 
			
		||||
 | 
			
		||||
	pw_memblock_unref(node->activation);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1546,7 +1546,7 @@ void pw_node_destroy(struct pw_node *node)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
int pw_node_for_each_port(struct pw_node *node,
 | 
			
		||||
int pw_impl_node_for_each_port(struct pw_impl_node *node,
 | 
			
		||||
			  enum pw_direction direction,
 | 
			
		||||
			  int (*callback) (void *data, struct pw_impl_port *port),
 | 
			
		||||
			  void *data)
 | 
			
		||||
| 
						 | 
				
			
			@ -1591,7 +1591,7 @@ static void result_node_params(void *data, int seq, int res, uint32_t type, cons
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
int pw_node_for_each_param(struct pw_node *node,
 | 
			
		||||
int pw_impl_node_for_each_param(struct pw_impl_node *node,
 | 
			
		||||
			   int seq, uint32_t param_id,
 | 
			
		||||
			   uint32_t index, uint32_t max,
 | 
			
		||||
			   const struct spa_pod *filter,
 | 
			
		||||
| 
						 | 
				
			
			@ -1626,7 +1626,7 @@ int pw_node_for_each_param(struct pw_node *node,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
int pw_node_set_param(struct pw_node *node,
 | 
			
		||||
int pw_impl_node_set_param(struct pw_impl_node *node,
 | 
			
		||||
		uint32_t id, uint32_t flags, const struct spa_pod *param)
 | 
			
		||||
{
 | 
			
		||||
	pw_log_debug(NAME" %p: set_param %s flags:%08x param:%p", node,
 | 
			
		||||
| 
						 | 
				
			
			@ -1636,7 +1636,7 @@ int pw_node_set_param(struct pw_node *node,
 | 
			
		|||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
struct pw_impl_port *
 | 
			
		||||
pw_node_find_port(struct pw_node *node, enum pw_direction direction, uint32_t port_id)
 | 
			
		||||
pw_impl_node_find_port(struct pw_impl_node *node, enum pw_direction direction, uint32_t port_id)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_impl_port *port, *p;
 | 
			
		||||
	struct pw_map *portmap;
 | 
			
		||||
| 
						 | 
				
			
			@ -1671,7 +1671,7 @@ pw_node_find_port(struct pw_node *node, enum pw_direction direction, uint32_t po
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
uint32_t pw_node_get_free_port_id(struct pw_node *node, enum pw_direction direction)
 | 
			
		||||
uint32_t pw_impl_node_get_free_port_id(struct pw_impl_node *node, enum pw_direction direction)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t n_ports, max_ports;
 | 
			
		||||
	struct pw_map *portmap;
 | 
			
		||||
| 
						 | 
				
			
			@ -1716,7 +1716,7 @@ error:
 | 
			
		|||
 | 
			
		||||
static void on_state_complete(void *obj, void *data, int res, uint32_t seq)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node = obj;
 | 
			
		||||
	struct pw_impl_node *node = obj;
 | 
			
		||||
	enum pw_node_state state = SPA_PTR_TO_INT(data);
 | 
			
		||||
	char *error = NULL;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1728,7 +1728,7 @@ static void on_state_complete(void *obj, void *data, int res, uint32_t seq)
 | 
			
		|||
	node_update_state(node, state, error);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void node_activate(struct pw_node *this)
 | 
			
		||||
static void node_activate(struct pw_impl_node *this)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_impl_port *port;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1746,16 +1746,16 @@ static void node_activate(struct pw_node *this)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
/** Set the node state
 | 
			
		||||
 * \param node a \ref pw_node
 | 
			
		||||
 * \param node a \ref pw_impl_node
 | 
			
		||||
 * \param state a \ref pw_node_state
 | 
			
		||||
 * \return 0 on success < 0 on error
 | 
			
		||||
 *
 | 
			
		||||
 * Set the state of \a node to \a state.
 | 
			
		||||
 *
 | 
			
		||||
 * \memberof pw_node
 | 
			
		||||
 * \memberof pw_impl_node
 | 
			
		||||
 */
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
int pw_node_set_state(struct pw_node *node, enum pw_node_state state)
 | 
			
		||||
int pw_impl_node_set_state(struct pw_impl_node *node, enum pw_node_state state)
 | 
			
		||||
{
 | 
			
		||||
	int res = 0;
 | 
			
		||||
	struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this);
 | 
			
		||||
| 
						 | 
				
			
			@ -1769,7 +1769,7 @@ int pw_node_set_state(struct pw_node *node, enum pw_node_state state)
 | 
			
		|||
	if (old == state)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	pw_node_emit_state_request(node, state);
 | 
			
		||||
	pw_impl_node_emit_state_request(node, state);
 | 
			
		||||
 | 
			
		||||
	switch (state) {
 | 
			
		||||
	case PW_NODE_STATE_CREATING:
 | 
			
		||||
| 
						 | 
				
			
			@ -1807,7 +1807,7 @@ int pw_node_set_state(struct pw_node *node, enum pw_node_state state)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
int pw_node_set_active(struct pw_node *node, bool active)
 | 
			
		||||
int pw_impl_node_set_active(struct pw_impl_node *node, bool active)
 | 
			
		||||
{
 | 
			
		||||
	bool old = node->active;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1815,10 +1815,10 @@ int pw_node_set_active(struct pw_node *node, bool active)
 | 
			
		|||
		pw_log_debug(NAME" %p: %s", node, active ? "activate" : "deactivate");
 | 
			
		||||
 | 
			
		||||
		if (!active)
 | 
			
		||||
			pw_node_set_state(node, PW_NODE_STATE_IDLE);
 | 
			
		||||
			pw_impl_node_set_state(node, PW_NODE_STATE_IDLE);
 | 
			
		||||
 | 
			
		||||
		node->active = active;
 | 
			
		||||
		pw_node_emit_active_changed(node, active);
 | 
			
		||||
		pw_impl_node_emit_active_changed(node, active);
 | 
			
		||||
 | 
			
		||||
		if (active)
 | 
			
		||||
			node_activate(node);
 | 
			
		||||
| 
						 | 
				
			
			@ -1830,7 +1830,7 @@ int pw_node_set_active(struct pw_node *node, bool active)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
bool pw_node_is_active(struct pw_node *node)
 | 
			
		||||
bool pw_impl_node_is_active(struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	return node->active;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,11 +37,11 @@ extern "C" {
 | 
			
		|||
 * input and output ports (\ref page_port) on which it
 | 
			
		||||
 * will receive and send out buffers respectively.
 | 
			
		||||
 */
 | 
			
		||||
/** \class pw_node
 | 
			
		||||
/** \class pw_impl_node
 | 
			
		||||
 *
 | 
			
		||||
 * PipeWire node class.
 | 
			
		||||
 */
 | 
			
		||||
struct pw_node;
 | 
			
		||||
struct pw_impl_node;
 | 
			
		||||
struct pw_impl_port;
 | 
			
		||||
 | 
			
		||||
#include <spa/node/node.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -49,9 +49,9 @@ struct pw_impl_port;
 | 
			
		|||
 | 
			
		||||
#include <pipewire/impl.h>
 | 
			
		||||
 | 
			
		||||
/** Node events, listen to them with \ref pw_node_add_listener */
 | 
			
		||||
struct pw_node_events {
 | 
			
		||||
#define PW_VERSION_NODE_EVENTS	0
 | 
			
		||||
/** Node events, listen to them with \ref pw_impl_node_add_listener */
 | 
			
		||||
struct pw_impl_node_events {
 | 
			
		||||
#define PW_VERSION_IMPL_NODE_EVENTS	0
 | 
			
		||||
	uint32_t version;
 | 
			
		||||
 | 
			
		||||
	/** the node is destroyed */
 | 
			
		||||
| 
						 | 
				
			
			@ -89,67 +89,67 @@ struct pw_node_events {
 | 
			
		|||
	void (*event) (void *data, const struct spa_event *event);
 | 
			
		||||
 | 
			
		||||
	/** the driver of the node changed */
 | 
			
		||||
	void (*driver_changed) (void *data, struct pw_node *old, struct pw_node *driver);
 | 
			
		||||
	void (*driver_changed) (void *data, struct pw_impl_node *old, struct pw_impl_node *driver);
 | 
			
		||||
 | 
			
		||||
	/** a peer was added */
 | 
			
		||||
	void (*peer_added) (void *data, struct pw_node *peer);
 | 
			
		||||
	void (*peer_added) (void *data, struct pw_impl_node *peer);
 | 
			
		||||
	/** a peer was removed */
 | 
			
		||||
	void (*peer_removed) (void *data, struct pw_node *peer);
 | 
			
		||||
	void (*peer_removed) (void *data, struct pw_impl_node *peer);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/** Create a new node \memberof pw_node */
 | 
			
		||||
struct pw_node *
 | 
			
		||||
pw_node_new(struct pw_context *context,		/**< the context */
 | 
			
		||||
/** Create a new node \memberof pw_impl_node */
 | 
			
		||||
struct pw_impl_node *
 | 
			
		||||
pw_impl_node_new(struct pw_context *context,		/**< the context */
 | 
			
		||||
	    struct pw_properties *properties,	/**< extra properties */
 | 
			
		||||
	    size_t user_data_size		/**< user data size */);
 | 
			
		||||
 | 
			
		||||
/** Complete initialization of the node and register */
 | 
			
		||||
int pw_node_register(struct pw_node *node,		/**< node to register */
 | 
			
		||||
int pw_impl_node_register(struct pw_impl_node *node,		/**< node to register */
 | 
			
		||||
		     struct pw_properties *properties	/**< extra properties */);
 | 
			
		||||
 | 
			
		||||
/** Destroy a node */
 | 
			
		||||
void pw_node_destroy(struct pw_node *node);
 | 
			
		||||
void pw_impl_node_destroy(struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
/** Get the node info */
 | 
			
		||||
const struct pw_node_info *pw_node_get_info(struct pw_node *node);
 | 
			
		||||
const struct pw_node_info *pw_impl_node_get_info(struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
/** Get node user_data. The size of the memory was given in \ref pw_node_new */
 | 
			
		||||
void * pw_node_get_user_data(struct pw_node *node);
 | 
			
		||||
/** Get node user_data. The size of the memory was given in \ref pw_impl_node_new */
 | 
			
		||||
void * pw_impl_node_get_user_data(struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
/** Get the context of this node */
 | 
			
		||||
struct pw_context *pw_node_get_context(struct pw_node *node);
 | 
			
		||||
struct pw_context *pw_impl_node_get_context(struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
/** Get the global of this node */
 | 
			
		||||
struct pw_global *pw_node_get_global(struct pw_node *node);
 | 
			
		||||
struct pw_global *pw_impl_node_get_global(struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
/** Get the node properties */
 | 
			
		||||
const struct pw_properties *pw_node_get_properties(struct pw_node *node);
 | 
			
		||||
const struct pw_properties *pw_impl_node_get_properties(struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
/** Update the node properties */
 | 
			
		||||
int pw_node_update_properties(struct pw_node *node, const struct spa_dict *dict);
 | 
			
		||||
int pw_impl_node_update_properties(struct pw_impl_node *node, const struct spa_dict *dict);
 | 
			
		||||
 | 
			
		||||
/** Set the node implementation */
 | 
			
		||||
int pw_node_set_implementation(struct pw_node *node, struct spa_node *spa_node);
 | 
			
		||||
int pw_impl_node_set_implementation(struct pw_impl_node *node, struct spa_node *spa_node);
 | 
			
		||||
 | 
			
		||||
/** Get the node implementation */
 | 
			
		||||
struct spa_node *pw_node_get_implementation(struct pw_node *node);
 | 
			
		||||
struct spa_node *pw_impl_node_get_implementation(struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
/** Add an event listener */
 | 
			
		||||
void pw_node_add_listener(struct pw_node *node,
 | 
			
		||||
void pw_impl_node_add_listener(struct pw_impl_node *node,
 | 
			
		||||
			  struct spa_hook *listener,
 | 
			
		||||
			  const struct pw_node_events *events,
 | 
			
		||||
			  const struct pw_impl_node_events *events,
 | 
			
		||||
			  void *data);
 | 
			
		||||
 | 
			
		||||
/** Iterate the ports in the given direction. The callback should return
 | 
			
		||||
 * 0 to fetch the next item, any other value stops the iteration and returns
 | 
			
		||||
 * the value. When all callbacks return 0, this function returns 0 when all
 | 
			
		||||
 * items are iterated. */
 | 
			
		||||
int pw_node_for_each_port(struct pw_node *node,
 | 
			
		||||
int pw_impl_node_for_each_port(struct pw_impl_node *node,
 | 
			
		||||
			  enum pw_direction direction,
 | 
			
		||||
			  int (*callback) (void *data, struct pw_impl_port *port),
 | 
			
		||||
			  void *data);
 | 
			
		||||
 | 
			
		||||
int pw_node_for_each_param(struct pw_node *node,
 | 
			
		||||
int pw_impl_node_for_each_param(struct pw_impl_node *node,
 | 
			
		||||
			   int seq, uint32_t param_id,
 | 
			
		||||
			   uint32_t index, uint32_t max,
 | 
			
		||||
			   const struct spa_pod *filter,
 | 
			
		||||
| 
						 | 
				
			
			@ -161,17 +161,17 @@ int pw_node_for_each_param(struct pw_node *node,
 | 
			
		|||
/** Find the port with direction and port_id or NULL when not found. Passing
 | 
			
		||||
 * SPA_ID_INVALID for port_id will return any port, preferably an unlinked one. */
 | 
			
		||||
struct pw_impl_port *
 | 
			
		||||
pw_node_find_port(struct pw_node *node, enum pw_direction direction, uint32_t port_id);
 | 
			
		||||
pw_impl_node_find_port(struct pw_impl_node *node, enum pw_direction direction, uint32_t port_id);
 | 
			
		||||
 | 
			
		||||
/** Get a free unused port_id from the node */
 | 
			
		||||
uint32_t pw_node_get_free_port_id(struct pw_node *node, enum pw_direction direction);
 | 
			
		||||
uint32_t pw_impl_node_get_free_port_id(struct pw_impl_node *node, enum pw_direction direction);
 | 
			
		||||
 | 
			
		||||
/** Set a node active. This will start negotiation with all linked active
 | 
			
		||||
  * nodes and start data transport */
 | 
			
		||||
int pw_node_set_active(struct pw_node *node, bool active);
 | 
			
		||||
int pw_impl_node_set_active(struct pw_impl_node *node, bool active);
 | 
			
		||||
 | 
			
		||||
/** Check if a node is active */
 | 
			
		||||
bool pw_node_is_active(struct pw_node *node);
 | 
			
		||||
bool pw_impl_node_is_active(struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,7 +69,7 @@ static void emit_info_changed(struct pw_impl_port *port)
 | 
			
		|||
 | 
			
		||||
	pw_impl_port_emit_info_changed(port, &port->info);
 | 
			
		||||
	if (port->node)
 | 
			
		||||
		pw_node_emit_port_info_changed(port->node, port, &port->info);
 | 
			
		||||
		pw_impl_node_emit_port_info_changed(port->node, port, &port->info);
 | 
			
		||||
 | 
			
		||||
	if (port->global)
 | 
			
		||||
		spa_list_for_each(resource, &port->global->resource_list, link)
 | 
			
		||||
| 
						 | 
				
			
			@ -590,7 +590,7 @@ void pw_impl_port_update_info(struct pw_impl_port *port, const struct spa_port_i
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
struct pw_node *pw_impl_port_get_node(struct pw_impl_port *port)
 | 
			
		||||
struct pw_impl_node *pw_impl_port_get_node(struct pw_impl_port *port)
 | 
			
		||||
{
 | 
			
		||||
	return port->node;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -627,7 +627,7 @@ static int check_param_io(void *data, int seq, uint32_t id,
 | 
			
		|||
		uint32_t index, uint32_t next, struct spa_pod *param)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_impl_port *port = data;
 | 
			
		||||
	struct pw_node *node = port->node;
 | 
			
		||||
	struct pw_impl_node *node = port->node;
 | 
			
		||||
	uint32_t pid, psize;
 | 
			
		||||
 | 
			
		||||
	if (spa_pod_parse_object(param,
 | 
			
		||||
| 
						 | 
				
			
			@ -777,7 +777,7 @@ static const struct pw_global_events global_events = {
 | 
			
		|||
int pw_impl_port_register(struct pw_impl_port *port,
 | 
			
		||||
		     struct pw_properties *properties)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node = port->node;
 | 
			
		||||
	struct pw_impl_node *node = port->node;
 | 
			
		||||
	const char *keys[] = {
 | 
			
		||||
		PW_KEY_OBJECT_PATH,
 | 
			
		||||
		PW_KEY_FORMAT_DSP,
 | 
			
		||||
| 
						 | 
				
			
			@ -823,7 +823,7 @@ int pw_impl_port_register(struct pw_impl_port *port,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
SPA_EXPORT
 | 
			
		||||
int pw_impl_port_add(struct pw_impl_port *port, struct pw_node *node)
 | 
			
		||||
int pw_impl_port_add(struct pw_impl_port *port, struct pw_impl_node *node)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t port_id = port->port_id;
 | 
			
		||||
	struct spa_list *ports;
 | 
			
		||||
| 
						 | 
				
			
			@ -853,7 +853,7 @@ int pw_impl_port_add(struct pw_impl_port *port, struct pw_node *node)
 | 
			
		|||
 | 
			
		||||
	port->node = node;
 | 
			
		||||
 | 
			
		||||
	pw_node_emit_port_init(node, port);
 | 
			
		||||
	pw_impl_node_emit_port_init(node, port);
 | 
			
		||||
 | 
			
		||||
	pw_impl_port_for_each_param(port, 0, SPA_PARAM_IO, 0, 0, NULL, check_param_io, port);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -913,7 +913,7 @@ int pw_impl_port_add(struct pw_impl_port *port, struct pw_node *node)
 | 
			
		|||
	if (port->state <= PW_IMPL_PORT_STATE_INIT)
 | 
			
		||||
		pw_impl_port_update_state(port, PW_IMPL_PORT_STATE_CONFIGURE, NULL);
 | 
			
		||||
 | 
			
		||||
	pw_node_emit_port_added(node, port);
 | 
			
		||||
	pw_impl_node_emit_port_added(node, port);
 | 
			
		||||
	emit_info_changed(port);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -942,7 +942,7 @@ static int do_remove_port(struct spa_loop *loop,
 | 
			
		|||
 | 
			
		||||
static void pw_impl_port_remove(struct pw_impl_port *port)
 | 
			
		||||
{
 | 
			
		||||
	struct pw_node *node = port->node;
 | 
			
		||||
	struct pw_impl_node *node = port->node;
 | 
			
		||||
	int res;
 | 
			
		||||
 | 
			
		||||
	if (node == NULL)
 | 
			
		||||
| 
						 | 
				
			
			@ -969,7 +969,7 @@ static void pw_impl_port_remove(struct pw_impl_port *port)
 | 
			
		|||
	pw_impl_port_set_mix(port, NULL, 0);
 | 
			
		||||
 | 
			
		||||
	spa_list_remove(&port->link);
 | 
			
		||||
	pw_node_emit_port_removed(node, port);
 | 
			
		||||
	pw_impl_node_emit_port_removed(node, port);
 | 
			
		||||
	port->node = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1043,7 +1043,7 @@ int pw_impl_port_for_each_param(struct pw_impl_port *port,
 | 
			
		|||
			   void *data)
 | 
			
		||||
{
 | 
			
		||||
	int res;
 | 
			
		||||
	struct pw_node *node = port->node;
 | 
			
		||||
	struct pw_impl_node *node = port->node;
 | 
			
		||||
	struct result_port_params_data user_data = { data, callback, seq };
 | 
			
		||||
	struct spa_hook listener;
 | 
			
		||||
	static const struct spa_node_events node_events = {
 | 
			
		||||
| 
						 | 
				
			
			@ -1142,7 +1142,7 @@ int pw_impl_port_set_param(struct pw_impl_port *port, uint32_t id, uint32_t flag
 | 
			
		|||
		      const struct spa_pod *param)
 | 
			
		||||
{
 | 
			
		||||
	int res;
 | 
			
		||||
	struct pw_node *node = port->node;
 | 
			
		||||
	struct pw_impl_node *node = port->node;
 | 
			
		||||
 | 
			
		||||
	pw_log_debug(NAME" %p: %d set param %d %p", port, port->state, id, param);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1196,7 +1196,7 @@ static int negotiate_mixer_buffers(struct pw_impl_port *port, uint32_t flags,
 | 
			
		|||
                struct spa_buffer **buffers, uint32_t n_buffers)
 | 
			
		||||
{
 | 
			
		||||
	int res;
 | 
			
		||||
	struct pw_node *node = port->node;
 | 
			
		||||
	struct pw_impl_node *node = port->node;
 | 
			
		||||
 | 
			
		||||
	if (SPA_FLAG_IS_SET(port->mix_flags, PW_IMPL_PORT_MIX_FLAG_MIX_ONLY))
 | 
			
		||||
		return 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -102,7 +102,7 @@ int pw_impl_port_update_properties(struct pw_impl_port *port, const struct spa_d
 | 
			
		|||
uint32_t pw_impl_port_get_id(struct pw_impl_port *port);
 | 
			
		||||
 | 
			
		||||
/** Get the port parent node or NULL when not yet set */
 | 
			
		||||
struct pw_node *pw_impl_port_get_node(struct pw_impl_port *port);
 | 
			
		||||
struct pw_impl_node *pw_impl_port_get_node(struct pw_impl_port *port);
 | 
			
		||||
 | 
			
		||||
/** Add an event listener on the port */
 | 
			
		||||
void pw_impl_port_add_listener(struct pw_impl_port *port,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -335,7 +335,7 @@ static inline void pw_node_activation_state_reset(struct pw_node_activation_stat
 | 
			
		|||
 | 
			
		||||
struct pw_node_target {
 | 
			
		||||
	struct spa_list link;
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
	struct pw_node_activation *activation;
 | 
			
		||||
	int (*signal) (void *data);
 | 
			
		||||
	void *data;
 | 
			
		||||
| 
						 | 
				
			
			@ -412,26 +412,26 @@ struct pw_node_activation {
 | 
			
		|||
#define SEQ_READ(s)			ATOMIC_LOAD(s)
 | 
			
		||||
#define SEQ_READ_SUCCESS(s1,s2)		((s1) == (s2) && ((s2) & 1) == 0)
 | 
			
		||||
 | 
			
		||||
#define pw_node_emit(o,m,v,...) spa_hook_list_call(&o->listener_list, struct pw_node_events, m, v, ##__VA_ARGS__)
 | 
			
		||||
#define pw_node_emit_destroy(n)			pw_node_emit(n, destroy, 0)
 | 
			
		||||
#define pw_node_emit_free(n)			pw_node_emit(n, free, 0)
 | 
			
		||||
#define pw_node_emit_initialized(n)		pw_node_emit(n, initialized, 0)
 | 
			
		||||
#define pw_node_emit_port_init(n,p)		pw_node_emit(n, port_init, 0, p)
 | 
			
		||||
#define pw_node_emit_port_added(n,p)		pw_node_emit(n, port_added, 0, p)
 | 
			
		||||
#define pw_node_emit_port_removed(n,p)		pw_node_emit(n, port_removed, 0, p)
 | 
			
		||||
#define pw_node_emit_info_changed(n,i)		pw_node_emit(n, info_changed, 0, i)
 | 
			
		||||
#define pw_node_emit_port_info_changed(n,p,i)	pw_node_emit(n, port_info_changed, 0, p, i)
 | 
			
		||||
#define pw_node_emit_active_changed(n,a)	pw_node_emit(n, active_changed, 0, a)
 | 
			
		||||
#define pw_node_emit_state_request(n,s)		pw_node_emit(n, state_request, 0, s)
 | 
			
		||||
#define pw_node_emit_state_changed(n,o,s,e)	pw_node_emit(n, state_changed, 0, o, s, e)
 | 
			
		||||
#define pw_node_emit_async_complete(n,s,r)	pw_node_emit(n, async_complete, 0, s, r)
 | 
			
		||||
#define pw_node_emit_result(n,s,r,t,result)	pw_node_emit(n, result, 0, s, r, t, result)
 | 
			
		||||
#define pw_node_emit_event(n,e)			pw_node_emit(n, event, 0, e)
 | 
			
		||||
#define pw_node_emit_driver_changed(n,o,d)	pw_node_emit(n, driver_changed, 0, o, d)
 | 
			
		||||
#define pw_node_emit_peer_added(n,p)		pw_node_emit(n, peer_added, 0, p)
 | 
			
		||||
#define pw_node_emit_peer_removed(n,p)		pw_node_emit(n, peer_removed, 0, p)
 | 
			
		||||
#define pw_impl_node_emit(o,m,v,...) spa_hook_list_call(&o->listener_list, struct pw_impl_node_events, m, v, ##__VA_ARGS__)
 | 
			
		||||
#define pw_impl_node_emit_destroy(n)			pw_impl_node_emit(n, destroy, 0)
 | 
			
		||||
#define pw_impl_node_emit_free(n)			pw_impl_node_emit(n, free, 0)
 | 
			
		||||
#define pw_impl_node_emit_initialized(n)		pw_impl_node_emit(n, initialized, 0)
 | 
			
		||||
#define pw_impl_node_emit_port_init(n,p)		pw_impl_node_emit(n, port_init, 0, p)
 | 
			
		||||
#define pw_impl_node_emit_port_added(n,p)		pw_impl_node_emit(n, port_added, 0, p)
 | 
			
		||||
#define pw_impl_node_emit_port_removed(n,p)		pw_impl_node_emit(n, port_removed, 0, p)
 | 
			
		||||
#define pw_impl_node_emit_info_changed(n,i)		pw_impl_node_emit(n, info_changed, 0, i)
 | 
			
		||||
#define pw_impl_node_emit_port_info_changed(n,p,i)	pw_impl_node_emit(n, port_info_changed, 0, p, i)
 | 
			
		||||
#define pw_impl_node_emit_active_changed(n,a)		pw_impl_node_emit(n, active_changed, 0, a)
 | 
			
		||||
#define pw_impl_node_emit_state_request(n,s)		pw_impl_node_emit(n, state_request, 0, s)
 | 
			
		||||
#define pw_impl_node_emit_state_changed(n,o,s,e)	pw_impl_node_emit(n, state_changed, 0, o, s, e)
 | 
			
		||||
#define pw_impl_node_emit_async_complete(n,s,r)		pw_impl_node_emit(n, async_complete, 0, s, r)
 | 
			
		||||
#define pw_impl_node_emit_result(n,s,r,t,result)	pw_impl_node_emit(n, result, 0, s, r, t, result)
 | 
			
		||||
#define pw_impl_node_emit_event(n,e)			pw_impl_node_emit(n, event, 0, e)
 | 
			
		||||
#define pw_impl_node_emit_driver_changed(n,o,d)		pw_impl_node_emit(n, driver_changed, 0, o, d)
 | 
			
		||||
#define pw_impl_node_emit_peer_added(n,p)		pw_impl_node_emit(n, peer_added, 0, p)
 | 
			
		||||
#define pw_impl_node_emit_peer_removed(n,p)		pw_impl_node_emit(n, peer_removed, 0, p)
 | 
			
		||||
 | 
			
		||||
struct pw_node {
 | 
			
		||||
struct pw_impl_node {
 | 
			
		||||
	struct pw_context *context;		/**< context object */
 | 
			
		||||
	struct spa_list link;		/**< link in context node_list */
 | 
			
		||||
	struct pw_global *global;	/**< global for this node */
 | 
			
		||||
| 
						 | 
				
			
			@ -461,7 +461,7 @@ struct pw_node {
 | 
			
		|||
	uint32_t port_user_data_size;	/**< extra size for port user data */
 | 
			
		||||
 | 
			
		||||
	struct spa_list driver_link;
 | 
			
		||||
	struct pw_node *driver_node;
 | 
			
		||||
	struct pw_impl_node *driver_node;
 | 
			
		||||
	struct spa_list slave_list;
 | 
			
		||||
	struct spa_list slave_link;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -560,7 +560,7 @@ struct pw_impl_port_implementation {
 | 
			
		|||
struct pw_impl_port {
 | 
			
		||||
	struct spa_list link;		/**< link in node port_list */
 | 
			
		||||
 | 
			
		||||
	struct pw_node *node;		/**< owner node */
 | 
			
		||||
	struct pw_impl_node *node;		/**< owner node */
 | 
			
		||||
	struct pw_global *global;	/**< global for this port */
 | 
			
		||||
	struct spa_hook global_listener;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -925,7 +925,7 @@ void * pw_impl_port_get_user_data(struct pw_impl_port *port);
 | 
			
		|||
int pw_impl_port_set_mix(struct pw_impl_port *port, struct spa_node *node, uint32_t flags);
 | 
			
		||||
 | 
			
		||||
/** Add a port to a node \memberof pw_impl_port */
 | 
			
		||||
int pw_impl_port_add(struct pw_impl_port *port, struct pw_node *node);
 | 
			
		||||
int pw_impl_port_add(struct pw_impl_port *port, struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
int pw_impl_port_init_mix(struct pw_impl_port *port, struct pw_impl_port_mix *mix);
 | 
			
		||||
int pw_impl_port_release_mix(struct pw_impl_port *port, struct pw_impl_port_mix *mix);
 | 
			
		||||
| 
						 | 
				
			
			@ -982,16 +982,16 @@ int pw_impl_port_use_buffers(struct pw_impl_port *port, struct pw_impl_port_mix
 | 
			
		|||
		struct spa_buffer **buffers, uint32_t n_buffers);
 | 
			
		||||
 | 
			
		||||
/** Change the state of the node */
 | 
			
		||||
int pw_node_set_state(struct pw_node *node, enum pw_node_state state);
 | 
			
		||||
int pw_impl_node_set_state(struct pw_impl_node *node, enum pw_node_state state);
 | 
			
		||||
 | 
			
		||||
int pw_node_set_param(struct pw_node *node,
 | 
			
		||||
int pw_impl_node_set_param(struct pw_impl_node *node,
 | 
			
		||||
		uint32_t id, uint32_t flags, const struct spa_pod *param);
 | 
			
		||||
 | 
			
		||||
int pw_node_update_ports(struct pw_node *node);
 | 
			
		||||
int pw_impl_node_update_ports(struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
int pw_node_initialized(struct pw_node *node);
 | 
			
		||||
int pw_impl_node_initialized(struct pw_impl_node *node);
 | 
			
		||||
 | 
			
		||||
int pw_node_set_driver(struct pw_node *node, struct pw_node *driver);
 | 
			
		||||
int pw_impl_node_set_driver(struct pw_impl_node *node, struct pw_impl_node *driver);
 | 
			
		||||
 | 
			
		||||
/** Prepare a link \memberof pw_impl_link
 | 
			
		||||
  * Starts the negotiation of formats and buffers on \a link */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -96,7 +96,7 @@ struct stream {
 | 
			
		|||
	enum spa_direction direction;
 | 
			
		||||
	enum pw_stream_flags flags;
 | 
			
		||||
 | 
			
		||||
	struct pw_node *node;
 | 
			
		||||
	struct pw_impl_node *node;
 | 
			
		||||
 | 
			
		||||
	struct spa_node impl_node;
 | 
			
		||||
	struct spa_node_methods node_methods;
 | 
			
		||||
| 
						 | 
				
			
			@ -979,7 +979,7 @@ static void node_event_info(void *object, const struct pw_node_info *info)
 | 
			
		|||
			switch (info->params[i].id) {
 | 
			
		||||
			case SPA_PARAM_PropInfo:
 | 
			
		||||
			case SPA_PARAM_Props:
 | 
			
		||||
				pw_node_for_each_param(impl->node,
 | 
			
		||||
				pw_impl_node_for_each_param(impl->node,
 | 
			
		||||
						0, info->params[i].id,
 | 
			
		||||
						0, UINT32_MAX,
 | 
			
		||||
						NULL,
 | 
			
		||||
| 
						 | 
				
			
			@ -993,8 +993,8 @@ static void node_event_info(void *object, const struct pw_node_info *info)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pw_node_events node_events = {
 | 
			
		||||
	PW_VERSION_NODE_EVENTS,
 | 
			
		||||
static const struct pw_impl_node_events node_events = {
 | 
			
		||||
	PW_VERSION_IMPL_NODE_EVENTS,
 | 
			
		||||
	.info_changed = node_event_info,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1238,7 +1238,7 @@ int pw_stream_update_properties(struct pw_stream *stream, const struct spa_dict
 | 
			
		|||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (impl->node)
 | 
			
		||||
		res = pw_node_update_properties(impl->node, dict);
 | 
			
		||||
		res = pw_impl_node_update_properties(impl->node, dict);
 | 
			
		||||
 | 
			
		||||
	return res;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1320,7 +1320,7 @@ pw_stream_connect(struct pw_stream *stream,
 | 
			
		|||
	struct stream *impl = SPA_CONTAINER_OF(stream, struct stream, this);
 | 
			
		||||
	struct pw_impl_factory *factory;
 | 
			
		||||
	struct pw_properties *props;
 | 
			
		||||
	struct pw_node *slave;
 | 
			
		||||
	struct pw_impl_node *slave;
 | 
			
		||||
	const char *str;
 | 
			
		||||
	uint32_t i;
 | 
			
		||||
	int res;
 | 
			
		||||
| 
						 | 
				
			
			@ -1406,16 +1406,16 @@ pw_stream_connect(struct pw_stream *stream,
 | 
			
		|||
		pw_properties_set(props, "resample.peaks", "1");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	slave = pw_node_new(impl->context, pw_properties_copy(props), 0);
 | 
			
		||||
	slave = pw_impl_node_new(impl->context, pw_properties_copy(props), 0);
 | 
			
		||||
	if (slave == NULL) {
 | 
			
		||||
		res = -errno;
 | 
			
		||||
		goto error_node;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pw_node_set_implementation(slave, &impl->impl_node);
 | 
			
		||||
	pw_impl_node_set_implementation(slave, &impl->impl_node);
 | 
			
		||||
 | 
			
		||||
	if (!SPA_FLAG_IS_SET(impl->flags, PW_STREAM_FLAG_INACTIVE))
 | 
			
		||||
		pw_node_set_active(slave, true);
 | 
			
		||||
		pw_impl_node_set_active(slave, true);
 | 
			
		||||
 | 
			
		||||
	if (impl->media_type == SPA_MEDIA_TYPE_audio &&
 | 
			
		||||
	    impl->media_subtype == SPA_MEDIA_SUBTYPE_raw) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1451,7 +1451,7 @@ pw_stream_connect(struct pw_stream *stream,
 | 
			
		|||
	pw_proxy_add_listener(stream->proxy, &stream->proxy_listener, &proxy_events, stream);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	pw_node_add_listener(impl->node, &stream->node_listener, &node_events, stream);
 | 
			
		||||
	pw_impl_node_add_listener(impl->node, &stream->node_listener, &node_events, stream);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1481,13 +1481,13 @@ int pw_stream_disconnect(struct pw_stream *stream)
 | 
			
		|||
	impl->disconnecting = true;
 | 
			
		||||
 | 
			
		||||
	if (impl->node)
 | 
			
		||||
		pw_node_set_active(impl->node, false);
 | 
			
		||||
		pw_impl_node_set_active(impl->node, false);
 | 
			
		||||
 | 
			
		||||
	if (stream->proxy)
 | 
			
		||||
		pw_proxy_destroy(stream->proxy);
 | 
			
		||||
 | 
			
		||||
	if (impl->node) {
 | 
			
		||||
		pw_node_destroy(impl->node);
 | 
			
		||||
		pw_impl_node_destroy(impl->node);
 | 
			
		||||
		impl->node = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	if (impl->free_proxy) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1583,7 +1583,7 @@ int pw_stream_set_control(struct pw_stream *stream, uint32_t id, uint32_t n_valu
 | 
			
		|||
	}
 | 
			
		||||
	pod = spa_pod_builder_pop(&b, &f[0]);
 | 
			
		||||
 | 
			
		||||
	pw_node_set_param(impl->node, SPA_PARAM_Props, 0, pod);
 | 
			
		||||
	pw_impl_node_set_param(impl->node, SPA_PARAM_Props, 0, pod);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1608,7 +1608,7 @@ int pw_stream_set_active(struct pw_stream *stream, bool active)
 | 
			
		|||
	struct stream *impl = SPA_CONTAINER_OF(stream, struct stream, this);
 | 
			
		||||
	pw_log_debug(NAME" %p: active:%d", stream, active);
 | 
			
		||||
	if (impl->node)
 | 
			
		||||
		pw_node_set_active(impl->node, active);
 | 
			
		||||
		pw_impl_node_set_active(impl->node, active);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue