mirror of
https://gitlab.freedesktop.org/pipewire/pipewire
synced 2024-09-20 00:11:31 +00: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
|
@ -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…
Reference in a new issue