mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	keys: add node.link-group property
The node.link-group property marks streams that are internally linked together in some way. It is used to relate the input and output streams of some of the module streams.
This commit is contained in:
		
							parent
							
								
									6a0cf77985
								
							
						
					
					
						commit
						c4971d17c4
					
				
					 5 changed files with 31 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -83,6 +83,7 @@
 | 
			
		|||
 * - \ref PW_KEY_NODE_NAME
 | 
			
		||||
 * - \ref PW_KEY_NODE_DESCRIPTION
 | 
			
		||||
 * - \ref PW_KEY_NODE_GROUP
 | 
			
		||||
 * - \ref PW_KEY_NODE_LINK_GROUP
 | 
			
		||||
 * - \ref PW_KEY_NODE_VIRTUAL
 | 
			
		||||
 * - \ref PW_KEY_NODE_LATENCY
 | 
			
		||||
 * - \ref PW_KEY_REMOTE_NAME
 | 
			
		||||
| 
						 | 
				
			
			@ -566,13 +567,16 @@ static int setup_streams(struct impl *impl)
 | 
			
		|||
	uint8_t buffer[1024];
 | 
			
		||||
	struct spa_pod_builder b;
 | 
			
		||||
	struct pw_properties *props;
 | 
			
		||||
	const char *str;
 | 
			
		||||
 | 
			
		||||
	props = pw_properties_new(
 | 
			
		||||
			PW_KEY_NODE_NAME, "echo-cancel-capture",
 | 
			
		||||
			PW_KEY_NODE_VIRTUAL, "true",
 | 
			
		||||
			NULL);
 | 
			
		||||
	pw_properties_setf(props,
 | 
			
		||||
			PW_KEY_NODE_GROUP, "echo-cancel-%u", impl->id);
 | 
			
		||||
	if ((str = pw_properties_get(impl->source_props, PW_KEY_NODE_GROUP)) != NULL)
 | 
			
		||||
		pw_properties_set(props, PW_KEY_NODE_GROUP, str);
 | 
			
		||||
	if ((str = pw_properties_get(impl->source_props, PW_KEY_NODE_LINK_GROUP)) != NULL)
 | 
			
		||||
		pw_properties_set(props, PW_KEY_NODE_LINK_GROUP, str);
 | 
			
		||||
	if (impl->aec_info->latency)
 | 
			
		||||
		pw_properties_set(props, PW_KEY_NODE_LATENCY, impl->aec_info->latency);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -595,22 +599,14 @@ static int setup_streams(struct impl *impl)
 | 
			
		|||
			&impl->source_listener,
 | 
			
		||||
			&source_events, impl);
 | 
			
		||||
 | 
			
		||||
	impl->sink = pw_stream_new(impl->core,
 | 
			
		||||
			"echo-cancel sink", impl->sink_props);
 | 
			
		||||
	impl->sink_props = NULL;
 | 
			
		||||
	if (impl->sink == NULL)
 | 
			
		||||
		return -errno;
 | 
			
		||||
 | 
			
		||||
	pw_stream_add_listener(impl->sink,
 | 
			
		||||
			&impl->sink_listener,
 | 
			
		||||
			&sink_events, impl);
 | 
			
		||||
 | 
			
		||||
	props = pw_properties_new(
 | 
			
		||||
			PW_KEY_NODE_NAME, "echo-cancel-playback",
 | 
			
		||||
			PW_KEY_NODE_VIRTUAL, "true",
 | 
			
		||||
			NULL);
 | 
			
		||||
	pw_properties_setf(props,
 | 
			
		||||
			PW_KEY_NODE_GROUP, "echo-cancel-%u", impl->id);
 | 
			
		||||
	if ((str = pw_properties_get(impl->sink_props, PW_KEY_NODE_GROUP)) != NULL)
 | 
			
		||||
		pw_properties_set(props, PW_KEY_NODE_GROUP, str);
 | 
			
		||||
	if ((str = pw_properties_get(impl->sink_props, PW_KEY_NODE_LINK_GROUP)) != NULL)
 | 
			
		||||
		pw_properties_set(props, PW_KEY_NODE_LINK_GROUP, str);
 | 
			
		||||
	if (impl->aec_info->latency)
 | 
			
		||||
		pw_properties_set(props, PW_KEY_NODE_LATENCY, impl->aec_info->latency);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -623,6 +619,16 @@ static int setup_streams(struct impl *impl)
 | 
			
		|||
			&impl->playback_listener,
 | 
			
		||||
			&playback_events, impl);
 | 
			
		||||
 | 
			
		||||
	impl->sink = pw_stream_new(impl->core,
 | 
			
		||||
			"echo-cancel sink", impl->sink_props);
 | 
			
		||||
	impl->sink_props = NULL;
 | 
			
		||||
	if (impl->sink == NULL)
 | 
			
		||||
		return -errno;
 | 
			
		||||
 | 
			
		||||
	pw_stream_add_listener(impl->sink,
 | 
			
		||||
			&impl->sink_listener,
 | 
			
		||||
			&sink_events, impl);
 | 
			
		||||
 | 
			
		||||
	n_params = 0;
 | 
			
		||||
	spa_pod_builder_init(&b, buffer, sizeof(buffer));
 | 
			
		||||
	params[n_params++] = spa_format_audio_raw_build(&b, SPA_PARAM_EnumFormat,
 | 
			
		||||
| 
						 | 
				
			
			@ -922,6 +928,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
 | 
			
		|||
	copy_props(impl, props, PW_KEY_NODE_NAME);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_GROUP);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_LINK_GROUP);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_VIRTUAL);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_LATENCY);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1758,6 +1758,8 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
 | 
			
		|||
 | 
			
		||||
	if (pw_properties_get(props, PW_KEY_NODE_GROUP) == NULL)
 | 
			
		||||
		pw_properties_setf(props, PW_KEY_NODE_GROUP, "filter-chain-%u", id);
 | 
			
		||||
	if (pw_properties_get(props, PW_KEY_NODE_LINK_GROUP) == NULL)
 | 
			
		||||
		pw_properties_setf(props, PW_KEY_NODE_LINK_GROUP, "filter-chain-%u", id);
 | 
			
		||||
	if (pw_properties_get(props, PW_KEY_NODE_VIRTUAL) == NULL)
 | 
			
		||||
		pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1772,6 +1774,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
 | 
			
		|||
	copy_props(impl, props, PW_KEY_NODE_NAME);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_GROUP);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_LINK_GROUP);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_LATENCY);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_VIRTUAL);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_MEDIA_NAME);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -426,6 +426,8 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
 | 
			
		|||
 | 
			
		||||
	if (pw_properties_get(props, PW_KEY_NODE_GROUP) == NULL)
 | 
			
		||||
		pw_properties_setf(props, PW_KEY_NODE_GROUP, "loopback-%u", id);
 | 
			
		||||
	if (pw_properties_get(props, PW_KEY_NODE_LINK_GROUP) == NULL)
 | 
			
		||||
		pw_properties_setf(props, PW_KEY_NODE_LINK_GROUP, "loopback-%u", id);
 | 
			
		||||
	if (pw_properties_get(props, PW_KEY_NODE_VIRTUAL) == NULL)
 | 
			
		||||
		pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -440,6 +442,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
 | 
			
		|||
	copy_props(impl, props, PW_KEY_NODE_NAME);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_GROUP);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_LINK_GROUP);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_LATENCY);
 | 
			
		||||
	copy_props(impl, props, PW_KEY_NODE_VIRTUAL);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -247,6 +247,7 @@ static void manager_added(void *d, struct pw_manager_object *o)
 | 
			
		|||
	props = pw_properties_new(NULL, NULL);
 | 
			
		||||
	pw_properties_set(props, PW_KEY_NODE_TARGET, sink_name);
 | 
			
		||||
	pw_properties_setf(props, PW_KEY_NODE_GROUP, "combine_sink-%u", data->module->idx);
 | 
			
		||||
	pw_properties_setf(props, PW_KEY_NODE_LINK_GROUP, "combine_sink-%u", data->module->idx);
 | 
			
		||||
	pw_properties_set(props, PW_KEY_NODE_DONT_RECONNECT, "true");
 | 
			
		||||
	pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true");
 | 
			
		||||
	pw_properties_set(props, PW_KEY_NODE_PASSIVE, "true");
 | 
			
		||||
| 
						 | 
				
			
			@ -330,6 +331,7 @@ static int module_combine_sink_load(struct client *client, struct module *module
 | 
			
		|||
	pw_properties_set(props, PW_KEY_NODE_DESCRIPTION, data->sink_name);
 | 
			
		||||
	pw_properties_set(props, PW_KEY_MEDIA_CLASS, "Audio/Sink");
 | 
			
		||||
	pw_properties_setf(props, PW_KEY_NODE_GROUP, "combine_sink-%u", data->module->idx);
 | 
			
		||||
	pw_properties_setf(props, PW_KEY_NODE_LINK_GROUP, "combine_sink-%u", data->module->idx);
 | 
			
		||||
	pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true");
 | 
			
		||||
 | 
			
		||||
	data->sink = pw_stream_new(data->core, data->sink_name, props);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -162,6 +162,8 @@ extern "C" {
 | 
			
		|||
#define PW_KEY_NODE_PASSIVE		"node.passive"		/**< indicate that a node wants passive links
 | 
			
		||||
								  *  on output/input/all ports when the value is
 | 
			
		||||
								  *  "out"/"in"/"true" respectively */
 | 
			
		||||
#define PW_KEY_NODE_LINK_GROUP		"node.link-group"	/**< the node is internally linked to
 | 
			
		||||
								  *  nodes with the same link-group */
 | 
			
		||||
 | 
			
		||||
/** Port keys */
 | 
			
		||||
#define PW_KEY_PORT_ID			"port.id"		/**< port id */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue