mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-05 13:30:02 -05:00
modules: support audio.layout where we can
This commit is contained in:
parent
8ba08f3029
commit
ff0bc22cb1
28 changed files with 116 additions and 7 deletions
|
|
@ -4274,10 +4274,18 @@ impl_init(const struct spa_handle_factory *factory,
|
||||||
this->direction = SPA_DIRECTION_INPUT;
|
this->direction = SPA_DIRECTION_INPUT;
|
||||||
}
|
}
|
||||||
else if (spa_streq(k, SPA_KEY_AUDIO_POSITION)) {
|
else if (spa_streq(k, SPA_KEY_AUDIO_POSITION)) {
|
||||||
if (s != NULL)
|
if (s == NULL)
|
||||||
spa_audio_parse_position_n(s, strlen(s),
|
continue;
|
||||||
this->props.channel_map, SPA_N_ELEMENTS(this->props.channel_map),
|
spa_audio_parse_position_n(s, strlen(s),
|
||||||
&this->props.n_channels);
|
this->props.channel_map, SPA_N_ELEMENTS(this->props.channel_map),
|
||||||
|
&this->props.n_channels);
|
||||||
|
}
|
||||||
|
else if (spa_streq(k, SPA_KEY_AUDIO_LAYOUT)) {
|
||||||
|
if (s == NULL)
|
||||||
|
continue;
|
||||||
|
spa_audio_parse_layout(s,
|
||||||
|
this->props.channel_map, SPA_N_ELEMENTS(this->props.channel_map),
|
||||||
|
&this->props.n_channels);
|
||||||
}
|
}
|
||||||
else if (spa_streq(k, SPA_KEY_PORT_IGNORE_LATENCY))
|
else if (spa_streq(k, SPA_KEY_PORT_IGNORE_LATENCY))
|
||||||
this->port_ignore_latency = spa_atob(s);
|
this->port_ignore_latency = spa_atob(s);
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,11 @@ static int avb_set_param(struct state *state, const char *k, const char *s)
|
||||||
SPA_N_ELEMENTS(state->default_pos.pos),
|
SPA_N_ELEMENTS(state->default_pos.pos),
|
||||||
&state->default_pos.channels);
|
&state->default_pos.channels);
|
||||||
fmt_change++;
|
fmt_change++;
|
||||||
|
} else if (spa_streq(k, SPA_KEY_AUDIO_LAYOUT)) {
|
||||||
|
spa_audio_parse_layout(s, state->default_pos.pos,
|
||||||
|
SPA_N_ELEMENTS(state->default_pos.pos),
|
||||||
|
&state->default_pos.channels);
|
||||||
|
fmt_change++;
|
||||||
} else if (spa_streq(k, SPA_KEY_AUDIO_ALLOWED_RATES)) {
|
} else if (spa_streq(k, SPA_KEY_AUDIO_ALLOWED_RATES)) {
|
||||||
state->n_allowed_rates = spa_avb_parse_rates(state->allowed_rates,
|
state->n_allowed_rates = spa_avb_parse_rates(state->allowed_rates,
|
||||||
MAX_RATES, s, strlen(s));
|
MAX_RATES, s, strlen(s));
|
||||||
|
|
|
||||||
|
|
@ -952,6 +952,9 @@ impl_init(const struct spa_handle_factory *factory,
|
||||||
} else if (spa_streq(k, SPA_KEY_AUDIO_POSITION)) {
|
} else if (spa_streq(k, SPA_KEY_AUDIO_POSITION)) {
|
||||||
spa_audio_parse_position_n(s, strlen(s), this->props.pos,
|
spa_audio_parse_position_n(s, strlen(s), this->props.pos,
|
||||||
SPA_N_ELEMENTS(this->props.pos), &this->props.channels);
|
SPA_N_ELEMENTS(this->props.pos), &this->props.channels);
|
||||||
|
} else if (spa_streq(k, SPA_KEY_AUDIO_LAYOUT)) {
|
||||||
|
spa_audio_parse_layout(s, this->props.pos,
|
||||||
|
SPA_N_ELEMENTS(this->props.pos), &this->props.channels);
|
||||||
} else if (spa_streq(k, "clock.name")) {
|
} else if (spa_streq(k, "clock.name")) {
|
||||||
spa_scnprintf(this->props.clock_name,
|
spa_scnprintf(this->props.clock_name,
|
||||||
sizeof(this->props.clock_name),
|
sizeof(this->props.clock_name),
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,7 @@
|
||||||
*
|
*
|
||||||
* - \ref PW_KEY_REMOTE_NAME
|
* - \ref PW_KEY_REMOTE_NAME
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_MEDIA_NAME
|
* - \ref PW_KEY_MEDIA_NAME
|
||||||
* - \ref PW_KEY_NODE_LATENCY
|
* - \ref PW_KEY_NODE_LATENCY
|
||||||
|
|
@ -76,9 +77,10 @@
|
||||||
* ## Stream options
|
* ## Stream options
|
||||||
*
|
*
|
||||||
* - `audio.position`: Set the stream channel map. By default this is the same channel
|
* - `audio.position`: Set the stream channel map. By default this is the same channel
|
||||||
* map as the combine stream.
|
* map as the combine stream. You can also use audio.layout
|
||||||
* - `combine.audio.position`: map the combine audio positions to the stream positions.
|
* - `combine.audio.position`: map the combine audio positions to the stream positions.
|
||||||
* combine input channels are mapped one-by-one to stream output channels.
|
* combine input channels are mapped one-by-one to stream output channels.
|
||||||
|
* You can also use combine.audio.layout.
|
||||||
*
|
*
|
||||||
* ## Example configuration
|
* ## Example configuration
|
||||||
*
|
*
|
||||||
|
|
@ -334,6 +336,7 @@ static int parse_audio_info(const struct pw_properties *props, struct spa_audio_
|
||||||
SPA_DICT_ITEM(SPA_KEY_AUDIO_POSITION, DEFAULT_POSITION)),
|
SPA_DICT_ITEM(SPA_KEY_AUDIO_POSITION, DEFAULT_POSITION)),
|
||||||
&props->dict,
|
&props->dict,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -868,6 +871,9 @@ static int create_stream(struct stream_info *info)
|
||||||
if ((str = pw_properties_get(info->stream_props, SPA_KEY_AUDIO_POSITION)) != NULL)
|
if ((str = pw_properties_get(info->stream_props, SPA_KEY_AUDIO_POSITION)) != NULL)
|
||||||
spa_audio_parse_position_n(str, strlen(str), s->info.position,
|
spa_audio_parse_position_n(str, strlen(str), s->info.position,
|
||||||
SPA_N_ELEMENTS(s->info.position), &s->info.channels);
|
SPA_N_ELEMENTS(s->info.position), &s->info.channels);
|
||||||
|
if ((str = pw_properties_get(info->stream_props, SPA_KEY_AUDIO_LAYOUT)) != NULL)
|
||||||
|
spa_audio_parse_layout(str, s->info.position,
|
||||||
|
SPA_N_ELEMENTS(s->info.position), &s->info.channels);
|
||||||
if (s->info.channels == 0)
|
if (s->info.channels == 0)
|
||||||
s->info = impl->info;
|
s->info = impl->info;
|
||||||
|
|
||||||
|
|
@ -875,6 +881,9 @@ static int create_stream(struct stream_info *info)
|
||||||
if ((str = pw_properties_get(info->stream_props, "combine.audio.position")) != NULL)
|
if ((str = pw_properties_get(info->stream_props, "combine.audio.position")) != NULL)
|
||||||
spa_audio_parse_position_n(str, strlen(str), remap_info.position,
|
spa_audio_parse_position_n(str, strlen(str), remap_info.position,
|
||||||
SPA_N_ELEMENTS(remap_info.position), &remap_info.channels);
|
SPA_N_ELEMENTS(remap_info.position), &remap_info.channels);
|
||||||
|
if ((str = pw_properties_get(info->stream_props, "combine.audio.layout")) != NULL)
|
||||||
|
spa_audio_parse_layout(str, remap_info.position,
|
||||||
|
SPA_N_ELEMENTS(remap_info.position), &remap_info.channels);
|
||||||
if (remap_info.channels == 0)
|
if (remap_info.channels == 0)
|
||||||
remap_info = s->info;
|
remap_info = s->info;
|
||||||
|
|
||||||
|
|
@ -1627,6 +1636,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
|
|
||||||
copy_props(props, impl->combine_props, PW_KEY_NODE_LOOP_NAME);
|
copy_props(props, impl->combine_props, PW_KEY_NODE_LOOP_NAME);
|
||||||
copy_props(props, impl->combine_props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(props, impl->combine_props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(props, impl->combine_props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(props, impl->combine_props, SPA_KEY_AUDIO_POSITION);
|
copy_props(props, impl->combine_props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(props, impl->combine_props, PW_KEY_NODE_NAME);
|
copy_props(props, impl->combine_props, PW_KEY_NODE_NAME);
|
||||||
copy_props(props, impl->combine_props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(props, impl->combine_props, PW_KEY_NODE_DESCRIPTION);
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,7 @@
|
||||||
*
|
*
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_MEDIA_CLASS
|
* - \ref PW_KEY_MEDIA_CLASS
|
||||||
* - \ref PW_KEY_NODE_LATENCY
|
* - \ref PW_KEY_NODE_LATENCY
|
||||||
|
|
@ -1278,6 +1279,7 @@ static int parse_audio_info(struct pw_properties *props, struct spa_audio_info_r
|
||||||
&props->dict,
|
&props->dict,
|
||||||
SPA_KEY_AUDIO_RATE,
|
SPA_KEY_AUDIO_RATE,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1416,6 +1418,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
copy_props(impl, props, PW_KEY_NODE_LINK_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_VIRTUAL);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, SPA_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, "resample.prefill");
|
copy_props(impl, props, "resample.prefill");
|
||||||
|
|
||||||
|
|
@ -1442,21 +1445,38 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
spa_audio_parse_position_n(str, strlen(str), impl->capture_info.position,
|
spa_audio_parse_position_n(str, strlen(str), impl->capture_info.position,
|
||||||
SPA_N_ELEMENTS(impl->capture_info.position), &impl->capture_info.channels);
|
SPA_N_ELEMENTS(impl->capture_info.position), &impl->capture_info.channels);
|
||||||
}
|
}
|
||||||
|
if ((str = pw_properties_get(impl->capture_props, SPA_KEY_AUDIO_LAYOUT)) != NULL) {
|
||||||
|
spa_audio_parse_layout(str, impl->capture_info.position,
|
||||||
|
SPA_N_ELEMENTS(impl->capture_info.position), &impl->capture_info.channels);
|
||||||
|
}
|
||||||
if ((str = pw_properties_get(impl->source_props, SPA_KEY_AUDIO_POSITION)) != NULL) {
|
if ((str = pw_properties_get(impl->source_props, SPA_KEY_AUDIO_POSITION)) != NULL) {
|
||||||
spa_audio_parse_position_n(str, strlen(str), impl->source_info.position,
|
spa_audio_parse_position_n(str, strlen(str), impl->source_info.position,
|
||||||
SPA_N_ELEMENTS(impl->source_info.position), &impl->source_info.channels);
|
SPA_N_ELEMENTS(impl->source_info.position), &impl->source_info.channels);
|
||||||
}
|
}
|
||||||
|
if ((str = pw_properties_get(impl->source_props, SPA_KEY_AUDIO_LAYOUT)) != NULL) {
|
||||||
|
spa_audio_parse_layout(str, impl->source_info.position,
|
||||||
|
SPA_N_ELEMENTS(impl->source_info.position), &impl->source_info.channels);
|
||||||
|
}
|
||||||
if ((str = pw_properties_get(impl->sink_props, SPA_KEY_AUDIO_POSITION)) != NULL) {
|
if ((str = pw_properties_get(impl->sink_props, SPA_KEY_AUDIO_POSITION)) != NULL) {
|
||||||
spa_audio_parse_position_n(str, strlen(str), impl->sink_info.position,
|
spa_audio_parse_position_n(str, strlen(str), impl->sink_info.position,
|
||||||
SPA_N_ELEMENTS(impl->sink_info.position), &impl->sink_info.channels);
|
SPA_N_ELEMENTS(impl->sink_info.position), &impl->sink_info.channels);
|
||||||
impl->playback_info = impl->sink_info;
|
impl->playback_info = impl->sink_info;
|
||||||
}
|
}
|
||||||
|
if ((str = pw_properties_get(impl->sink_props, SPA_KEY_AUDIO_LAYOUT)) != NULL) {
|
||||||
|
spa_audio_parse_layout(str, impl->sink_info.position,
|
||||||
|
SPA_N_ELEMENTS(impl->sink_info.position), &impl->sink_info.channels);
|
||||||
|
impl->playback_info = impl->sink_info;
|
||||||
|
}
|
||||||
if ((str = pw_properties_get(impl->playback_props, SPA_KEY_AUDIO_POSITION)) != NULL) {
|
if ((str = pw_properties_get(impl->playback_props, SPA_KEY_AUDIO_POSITION)) != NULL) {
|
||||||
spa_audio_parse_position_n(str, strlen(str), impl->playback_info.position,
|
spa_audio_parse_position_n(str, strlen(str), impl->playback_info.position,
|
||||||
SPA_N_ELEMENTS(impl->playback_info.position), &impl->playback_info.channels);
|
SPA_N_ELEMENTS(impl->playback_info.position), &impl->playback_info.channels);
|
||||||
if (impl->playback_info.channels != impl->sink_info.channels)
|
|
||||||
impl->playback_info = impl->sink_info;
|
|
||||||
}
|
}
|
||||||
|
if ((str = pw_properties_get(impl->playback_props, SPA_KEY_AUDIO_LAYOUT)) != NULL) {
|
||||||
|
spa_audio_parse_layout(str, impl->playback_info.position,
|
||||||
|
SPA_N_ELEMENTS(impl->playback_info.position), &impl->playback_info.channels);
|
||||||
|
}
|
||||||
|
if (impl->playback_info.channels != impl->sink_info.channels)
|
||||||
|
impl->playback_info = impl->sink_info;
|
||||||
|
|
||||||
if ((str = pw_properties_get(props, "aec.method")) != NULL)
|
if ((str = pw_properties_get(props, "aec.method")) != NULL)
|
||||||
pw_log_warn("aec.method is not supported anymore use library.name");
|
pw_log_warn("aec.method is not supported anymore use library.name");
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@
|
||||||
* - \ref PW_KEY_REMOTE_NAME
|
* - \ref PW_KEY_REMOTE_NAME
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_MEDIA_NAME
|
* - \ref PW_KEY_MEDIA_NAME
|
||||||
* - \ref PW_KEY_NODE_LATENCY
|
* - \ref PW_KEY_NODE_LATENCY
|
||||||
|
|
@ -476,6 +477,7 @@ static int parse_audio_info(struct pw_properties *props, struct spa_audio_info_r
|
||||||
&props->dict,
|
&props->dict,
|
||||||
SPA_KEY_AUDIO_RATE,
|
SPA_KEY_AUDIO_RATE,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -548,6 +550,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
|
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_GROUP);
|
copy_props(impl, props, PW_KEY_NODE_GROUP);
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@
|
||||||
* - \ref PW_KEY_AUDIO_FORMAT
|
* - \ref PW_KEY_AUDIO_FORMAT
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_MEDIA_NAME
|
* - \ref PW_KEY_MEDIA_NAME
|
||||||
* - \ref PW_KEY_NODE_LATENCY
|
* - \ref PW_KEY_NODE_LATENCY
|
||||||
|
|
@ -284,6 +285,7 @@ static int parse_audio_info(const struct pw_properties *props, struct spa_audio_
|
||||||
SPA_KEY_AUDIO_FORMAT,
|
SPA_KEY_AUDIO_FORMAT,
|
||||||
SPA_KEY_AUDIO_RATE,
|
SPA_KEY_AUDIO_RATE,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -387,6 +389,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
|
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_NAME);
|
copy_props(impl, props, PW_KEY_NODE_NAME);
|
||||||
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@
|
||||||
* - \ref PW_KEY_AUDIO_FORMAT
|
* - \ref PW_KEY_AUDIO_FORMAT
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_MEDIA_NAME
|
* - \ref PW_KEY_MEDIA_NAME
|
||||||
* - \ref PW_KEY_NODE_LATENCY
|
* - \ref PW_KEY_NODE_LATENCY
|
||||||
|
|
@ -290,6 +291,7 @@ static int parse_audio_info(const struct pw_properties *props, struct spa_audio_
|
||||||
SPA_KEY_AUDIO_FORMAT,
|
SPA_KEY_AUDIO_FORMAT,
|
||||||
SPA_KEY_AUDIO_RATE,
|
SPA_KEY_AUDIO_RATE,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -393,6 +395,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
|
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_NAME);
|
copy_props(impl, props, PW_KEY_NODE_NAME);
|
||||||
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,7 @@
|
||||||
* Options with well-known behavior.
|
* Options with well-known behavior.
|
||||||
*
|
*
|
||||||
* - \ref PW_KEY_REMOTE_NAME
|
* - \ref PW_KEY_REMOTE_NAME
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_NODE_NAME
|
* - \ref PW_KEY_NODE_NAME
|
||||||
* - \ref PW_KEY_NODE_DESCRIPTION
|
* - \ref PW_KEY_NODE_DESCRIPTION
|
||||||
|
|
@ -1437,6 +1438,7 @@ static int parse_audio_info(const struct pw_properties *props, struct spa_audio_
|
||||||
SPA_DICT_ITEM(SPA_KEY_AUDIO_POSITION, DEFAULT_POSITION)),
|
SPA_DICT_ITEM(SPA_KEY_AUDIO_POSITION, DEFAULT_POSITION)),
|
||||||
&props->dict,
|
&props->dict,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -995,6 +995,7 @@ extern struct spa_handle_factory spa_filter_graph_factory;
|
||||||
* - \ref PW_KEY_REMOTE_NAME
|
* - \ref PW_KEY_REMOTE_NAME
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_MEDIA_NAME
|
* - \ref PW_KEY_MEDIA_NAME
|
||||||
* - \ref PW_KEY_NODE_LATENCY
|
* - \ref PW_KEY_NODE_LATENCY
|
||||||
|
|
@ -1840,6 +1841,7 @@ static int parse_audio_info(struct pw_properties *props, struct spa_audio_info_r
|
||||||
&props->dict,
|
&props->dict,
|
||||||
SPA_KEY_AUDIO_RATE,
|
SPA_KEY_AUDIO_RATE,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1918,6 +1920,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
|
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_GROUP);
|
copy_props(impl, props, PW_KEY_NODE_GROUP);
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@
|
||||||
*
|
*
|
||||||
* - \ref PW_KEY_REMOTE_NAME
|
* - \ref PW_KEY_REMOTE_NAME
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_NODE_NAME
|
* - \ref PW_KEY_NODE_NAME
|
||||||
* - \ref PW_KEY_NODE_DESCRIPTION
|
* - \ref PW_KEY_NODE_DESCRIPTION
|
||||||
|
|
@ -1060,6 +1061,7 @@ static int parse_audio_info(const struct pw_properties *props, struct spa_audio_
|
||||||
SPA_DICT_ITEM(SPA_KEY_AUDIO_POSITION, DEFAULT_POSITION)),
|
SPA_DICT_ITEM(SPA_KEY_AUDIO_POSITION, DEFAULT_POSITION)),
|
||||||
&props->dict,
|
&props->dict,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1169,6 +1171,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
pw_properties_update_string(impl->source.props, str, strlen(str));
|
pw_properties_update_string(impl->source.props, str, strlen(str));
|
||||||
|
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_ALWAYS_PROCESS);
|
copy_props(impl, props, PW_KEY_NODE_ALWAYS_PROCESS);
|
||||||
copy_props(impl, props, PW_KEY_NODE_GROUP);
|
copy_props(impl, props, PW_KEY_NODE_GROUP);
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@
|
||||||
* - \ref PW_KEY_REMOTE_NAME
|
* - \ref PW_KEY_REMOTE_NAME
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_MEDIA_NAME
|
* - \ref PW_KEY_MEDIA_NAME
|
||||||
* - \ref PW_KEY_NODE_LATENCY
|
* - \ref PW_KEY_NODE_LATENCY
|
||||||
|
|
@ -846,6 +847,7 @@ static int parse_audio_info(struct pw_properties *props, struct spa_audio_info_r
|
||||||
&props->dict,
|
&props->dict,
|
||||||
SPA_KEY_AUDIO_RATE,
|
SPA_KEY_AUDIO_RATE,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -927,6 +929,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
|
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_GROUP);
|
copy_props(impl, props, PW_KEY_NODE_GROUP);
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@
|
||||||
*
|
*
|
||||||
* - \ref PW_KEY_REMOTE_NAME
|
* - \ref PW_KEY_REMOTE_NAME
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_NODE_NAME
|
* - \ref PW_KEY_NODE_NAME
|
||||||
* - \ref PW_KEY_NODE_DESCRIPTION
|
* - \ref PW_KEY_NODE_DESCRIPTION
|
||||||
|
|
@ -1225,6 +1226,7 @@ static int parse_audio_info(const struct pw_properties *props, struct spa_audio_
|
||||||
SPA_DICT_ITEM(SPA_KEY_AUDIO_FORMAT, "F32P")),
|
SPA_DICT_ITEM(SPA_KEY_AUDIO_FORMAT, "F32P")),
|
||||||
&props->dict,
|
&props->dict,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1329,6 +1331,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
|
|
||||||
copy_props(impl, props, PW_KEY_NODE_LOOP_NAME);
|
copy_props(impl, props, PW_KEY_NODE_LOOP_NAME);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_ALWAYS_PROCESS);
|
copy_props(impl, props, PW_KEY_NODE_ALWAYS_PROCESS);
|
||||||
copy_props(impl, props, PW_KEY_NODE_GROUP);
|
copy_props(impl, props, PW_KEY_NODE_GROUP);
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,7 @@
|
||||||
*
|
*
|
||||||
* - \ref PW_KEY_REMOTE_NAME
|
* - \ref PW_KEY_REMOTE_NAME
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_NODE_NAME
|
* - \ref PW_KEY_NODE_NAME
|
||||||
* - \ref PW_KEY_NODE_DESCRIPTION
|
* - \ref PW_KEY_NODE_DESCRIPTION
|
||||||
|
|
@ -1299,6 +1300,7 @@ static int parse_audio_info(const struct pw_properties *props, struct spa_audio_
|
||||||
SPA_DICT_ITEM(SPA_KEY_AUDIO_FORMAT, "F32P")),
|
SPA_DICT_ITEM(SPA_KEY_AUDIO_FORMAT, "F32P")),
|
||||||
&props->dict,
|
&props->dict,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1417,6 +1419,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
copy_props(impl, props, PW_KEY_NODE_LOCK_QUANTUM);
|
copy_props(impl, props, PW_KEY_NODE_LOCK_QUANTUM);
|
||||||
copy_props(impl, props, PW_KEY_NODE_LOCK_RATE);
|
copy_props(impl, props, PW_KEY_NODE_LOCK_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, "audio.ports");
|
copy_props(impl, props, "audio.ports");
|
||||||
copy_props(impl, props, "midi.ports");
|
copy_props(impl, props, "midi.ports");
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,7 @@
|
||||||
* Options with well-known behaviour:
|
* Options with well-known behaviour:
|
||||||
*
|
*
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_REMOTE_NAME
|
* - \ref PW_KEY_REMOTE_NAME
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,7 @@
|
||||||
* - \ref PW_KEY_AUDIO_FORMAT
|
* - \ref PW_KEY_AUDIO_FORMAT
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_NODE_LATENCY
|
* - \ref PW_KEY_NODE_LATENCY
|
||||||
* - \ref PW_KEY_NODE_NAME
|
* - \ref PW_KEY_NODE_NAME
|
||||||
|
|
@ -756,6 +757,7 @@ static int parse_audio_info(const struct pw_properties *props, struct spa_audio_
|
||||||
SPA_KEY_AUDIO_FORMAT,
|
SPA_KEY_AUDIO_FORMAT,
|
||||||
SPA_KEY_AUDIO_RATE,
|
SPA_KEY_AUDIO_RATE,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -886,6 +888,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_NAME);
|
copy_props(impl, props, PW_KEY_NODE_NAME);
|
||||||
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_FORMAT
|
* - \ref PW_KEY_AUDIO_FORMAT
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_NODE_LATENCY
|
* - \ref PW_KEY_NODE_LATENCY
|
||||||
* - \ref PW_KEY_NODE_RATE
|
* - \ref PW_KEY_NODE_RATE
|
||||||
|
|
@ -831,6 +832,7 @@ static int parse_audio_info(const struct pw_properties *props, struct spa_audio_
|
||||||
SPA_KEY_AUDIO_FORMAT,
|
SPA_KEY_AUDIO_FORMAT,
|
||||||
SPA_KEY_AUDIO_RATE,
|
SPA_KEY_AUDIO_RATE,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL)) < 0)
|
SPA_KEY_AUDIO_POSITION, NULL)) < 0)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
|
|
@ -888,6 +890,7 @@ static int parse_params(struct impl *impl)
|
||||||
copy_props(impl, PW_KEY_AUDIO_FORMAT);
|
copy_props(impl, PW_KEY_AUDIO_FORMAT);
|
||||||
copy_props(impl, PW_KEY_AUDIO_RATE);
|
copy_props(impl, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, PW_KEY_NODE_RATE);
|
copy_props(impl, PW_KEY_NODE_RATE);
|
||||||
copy_props(impl, PW_KEY_NODE_NAME);
|
copy_props(impl, PW_KEY_NODE_NAME);
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@
|
||||||
* - \ref PW_KEY_AUDIO_FORMAT
|
* - \ref PW_KEY_AUDIO_FORMAT
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_NODE_LATENCY
|
* - \ref PW_KEY_NODE_LATENCY
|
||||||
* - \ref PW_KEY_NODE_NAME
|
* - \ref PW_KEY_NODE_NAME
|
||||||
|
|
@ -1059,6 +1060,7 @@ static int parse_audio_info(const struct pw_properties *props, struct spa_audio_
|
||||||
SPA_KEY_AUDIO_FORMAT,
|
SPA_KEY_AUDIO_FORMAT,
|
||||||
SPA_KEY_AUDIO_RATE,
|
SPA_KEY_AUDIO_RATE,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1183,6 +1185,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_NAME);
|
copy_props(impl, props, PW_KEY_NODE_NAME);
|
||||||
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,7 @@
|
||||||
* - \ref PW_KEY_AUDIO_FORMAT
|
* - \ref PW_KEY_AUDIO_FORMAT
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_NODE_NAME
|
* - \ref PW_KEY_NODE_NAME
|
||||||
* - \ref PW_KEY_NODE_DESCRIPTION
|
* - \ref PW_KEY_NODE_DESCRIPTION
|
||||||
|
|
@ -1901,6 +1902,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_DEVICE_ICON_NAME);
|
copy_props(impl, props, PW_KEY_DEVICE_ICON_NAME);
|
||||||
copy_props(impl, props, PW_KEY_NODE_NAME);
|
copy_props(impl, props, PW_KEY_NODE_NAME);
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,7 @@
|
||||||
* - \ref PW_KEY_AUDIO_FORMAT
|
* - \ref PW_KEY_AUDIO_FORMAT
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_NODE_NAME
|
* - \ref PW_KEY_NODE_NAME
|
||||||
* - \ref PW_KEY_NODE_DESCRIPTION
|
* - \ref PW_KEY_NODE_DESCRIPTION
|
||||||
|
|
@ -148,6 +149,7 @@ PW_LOG_TOPIC(mod_topic, "mod." NAME);
|
||||||
"( audio.rate=<sample rate, default:"SPA_STRINGIFY(DEFAULT_RATE)"> ) " \
|
"( audio.rate=<sample rate, default:"SPA_STRINGIFY(DEFAULT_RATE)"> ) " \
|
||||||
"( audio.channels=<number of channels, default:"SPA_STRINGIFY(DEFAULT_CHANNELS)"> ) "\
|
"( audio.channels=<number of channels, default:"SPA_STRINGIFY(DEFAULT_CHANNELS)"> ) "\
|
||||||
"( audio.position=<channel map, default:"DEFAULT_POSITION"> ) " \
|
"( audio.position=<channel map, default:"DEFAULT_POSITION"> ) " \
|
||||||
|
"( audio.layout=<layout name, default:"DEFAULT_LAYOUT"> ) " \
|
||||||
"( stream.props= { key=value ... } ) "
|
"( stream.props= { key=value ... } ) "
|
||||||
|
|
||||||
static const struct spa_dict_item module_info[] = {
|
static const struct spa_dict_item module_info[] = {
|
||||||
|
|
@ -1329,6 +1331,12 @@ static struct service *make_service(struct impl *impl, const struct service_info
|
||||||
} else if (spa_streq(key, "channels")) {
|
} else if (spa_streq(key, "channels")) {
|
||||||
k = PW_KEY_AUDIO_CHANNELS;
|
k = PW_KEY_AUDIO_CHANNELS;
|
||||||
mask |= 1<<3;
|
mask |= 1<<3;
|
||||||
|
} else if (spa_streq(key, "position")) {
|
||||||
|
pw_properties_set(props,
|
||||||
|
SPA_KEY_AUDIO_POSITION, value);
|
||||||
|
} else if (spa_streq(key, "layout")) {
|
||||||
|
pw_properties_set(props,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT, value);
|
||||||
} else if (spa_streq(key, "channelnames")) {
|
} else if (spa_streq(key, "channelnames")) {
|
||||||
pw_properties_set(props,
|
pw_properties_set(props,
|
||||||
PW_KEY_NODE_CHANNELNAMES, value);
|
PW_KEY_NODE_CHANNELNAMES, value);
|
||||||
|
|
@ -1587,6 +1595,8 @@ static int make_announce(struct impl *impl)
|
||||||
txt = avahi_string_list_add_pair(txt, "channels", str);
|
txt = avahi_string_list_add_pair(txt, "channels", str);
|
||||||
if ((str = pw_properties_get(impl->stream_props, SPA_KEY_AUDIO_POSITION)) != NULL)
|
if ((str = pw_properties_get(impl->stream_props, SPA_KEY_AUDIO_POSITION)) != NULL)
|
||||||
txt = avahi_string_list_add_pair(txt, "position", str);
|
txt = avahi_string_list_add_pair(txt, "position", str);
|
||||||
|
if ((str = pw_properties_get(impl->stream_props, SPA_KEY_AUDIO_LAYOUT)) != NULL)
|
||||||
|
txt = avahi_string_list_add_pair(txt, "layout", str);
|
||||||
if ((str = pw_properties_get(impl->stream_props, PW_KEY_NODE_CHANNELNAMES)) != NULL)
|
if ((str = pw_properties_get(impl->stream_props, PW_KEY_NODE_CHANNELNAMES)) != NULL)
|
||||||
txt = avahi_string_list_add_pair(txt, "channelnames", str);
|
txt = avahi_string_list_add_pair(txt, "channelnames", str);
|
||||||
if (impl->ts_refclk != NULL) {
|
if (impl->ts_refclk != NULL) {
|
||||||
|
|
@ -1702,6 +1712,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_NAME);
|
copy_props(impl, props, PW_KEY_NODE_NAME);
|
||||||
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,7 @@
|
||||||
* - \ref PW_KEY_AUDIO_FORMAT
|
* - \ref PW_KEY_AUDIO_FORMAT
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_NODE_NAME
|
* - \ref PW_KEY_NODE_NAME
|
||||||
* - \ref PW_KEY_NODE_DESCRIPTION
|
* - \ref PW_KEY_NODE_DESCRIPTION
|
||||||
|
|
@ -150,6 +151,7 @@ PW_LOG_TOPIC(mod_topic, "mod." NAME);
|
||||||
"( audio.rate=<sample rate, default:"SPA_STRINGIFY(DEFAULT_RATE)"> ) " \
|
"( audio.rate=<sample rate, default:"SPA_STRINGIFY(DEFAULT_RATE)"> ) " \
|
||||||
"( audio.channels=<number of channels, default:"SPA_STRINGIFY(DEFAULT_CHANNELS)"> ) " \
|
"( audio.channels=<number of channels, default:"SPA_STRINGIFY(DEFAULT_CHANNELS)"> ) " \
|
||||||
"( audio.position=<channel map, default:"DEFAULT_POSITION"> ) " \
|
"( audio.position=<channel map, default:"DEFAULT_POSITION"> ) " \
|
||||||
|
"( audio.layout=<channel layout, default:"DEFAULT_LAYOUT"> ) " \
|
||||||
"( aes67.driver-group=<driver driving the PTP send> ) " \
|
"( aes67.driver-group=<driver driving the PTP send> ) " \
|
||||||
"( stream.props= { key=value ... } ) "
|
"( stream.props= { key=value ... } ) "
|
||||||
|
|
||||||
|
|
@ -578,6 +580,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_NAME);
|
copy_props(impl, props, PW_KEY_NODE_NAME);
|
||||||
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@
|
||||||
* - \ref PW_KEY_AUDIO_FORMAT
|
* - \ref PW_KEY_AUDIO_FORMAT
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_MEDIA_NAME
|
* - \ref PW_KEY_MEDIA_NAME
|
||||||
* - \ref PW_KEY_MEDIA_CLASS
|
* - \ref PW_KEY_MEDIA_CLASS
|
||||||
|
|
@ -175,6 +176,7 @@ PW_LOG_TOPIC(mod_topic, "mod." NAME);
|
||||||
"( audio.rate=<sample rate, default:"SPA_STRINGIFY(DEFAULT_RATE)"> ) " \
|
"( audio.rate=<sample rate, default:"SPA_STRINGIFY(DEFAULT_RATE)"> ) " \
|
||||||
"( audio.channels=<number of channels, default:"SPA_STRINGIFY(DEFAULT_CHANNELS)"> ) " \
|
"( audio.channels=<number of channels, default:"SPA_STRINGIFY(DEFAULT_CHANNELS)"> ) " \
|
||||||
"( audio.position=<channel map, default:"DEFAULT_POSITION"> ) " \
|
"( audio.position=<channel map, default:"DEFAULT_POSITION"> ) " \
|
||||||
|
"( audio.layout=<channel layout, default:"DEFAULT_LAYOUT"> ) " \
|
||||||
"( stream.props= { key=value ... } ) "
|
"( stream.props= { key=value ... } ) "
|
||||||
|
|
||||||
static const struct spa_dict_item module_info[] = {
|
static const struct spa_dict_item module_info[] = {
|
||||||
|
|
@ -923,6 +925,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_NAME);
|
copy_props(impl, props, PW_KEY_NODE_NAME);
|
||||||
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
||||||
|
|
|
||||||
|
|
@ -581,6 +581,7 @@ static int parse_audio_info(const struct pw_properties *props, struct spa_audio_
|
||||||
SPA_KEY_AUDIO_FORMAT,
|
SPA_KEY_AUDIO_FORMAT,
|
||||||
SPA_KEY_AUDIO_RATE,
|
SPA_KEY_AUDIO_RATE,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ struct rtp_stream;
|
||||||
#define DEFAULT_RATE 48000
|
#define DEFAULT_RATE 48000
|
||||||
#define DEFAULT_CHANNELS 2
|
#define DEFAULT_CHANNELS 2
|
||||||
#define DEFAULT_POSITION "[ FL FR ]"
|
#define DEFAULT_POSITION "[ FL FR ]"
|
||||||
|
#define DEFAULT_LAYOUT "Stereo"
|
||||||
|
|
||||||
#define ERROR_MSEC 2.0f
|
#define ERROR_MSEC 2.0f
|
||||||
#define DEFAULT_SESS_LATENCY 100.0f
|
#define DEFAULT_SESS_LATENCY 100.0f
|
||||||
|
|
|
||||||
|
|
@ -516,6 +516,7 @@ static int parse_audio_info(struct pw_properties *props, struct spa_audio_info_r
|
||||||
SPA_KEY_AUDIO_FORMAT,
|
SPA_KEY_AUDIO_FORMAT,
|
||||||
SPA_KEY_AUDIO_RATE,
|
SPA_KEY_AUDIO_RATE,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL)) < 0)
|
SPA_KEY_AUDIO_POSITION, NULL)) < 0)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@
|
||||||
* Options with well-known behavior:
|
* Options with well-known behavior:
|
||||||
*
|
*
|
||||||
* - \ref PW_KEY_REMOTE_NAME
|
* - \ref PW_KEY_REMOTE_NAME
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_MEDIA_NAME
|
* - \ref PW_KEY_MEDIA_NAME
|
||||||
* - \ref PW_KEY_MEDIA_CLASS
|
* - \ref PW_KEY_MEDIA_CLASS
|
||||||
|
|
@ -694,6 +695,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
pw_properties_update_string(stream_props, str, strlen(str));
|
pw_properties_update_string(stream_props, str, strlen(str));
|
||||||
|
|
||||||
copy_props(impl, props, PW_KEY_NODE_LOOP_NAME);
|
copy_props(impl, props, PW_KEY_NODE_LOOP_NAME);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_NAME);
|
copy_props(impl, props, PW_KEY_NODE_NAME);
|
||||||
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,7 @@
|
||||||
* - \ref PW_KEY_AUDIO_FORMAT
|
* - \ref PW_KEY_AUDIO_FORMAT
|
||||||
* - \ref PW_KEY_AUDIO_RATE
|
* - \ref PW_KEY_AUDIO_RATE
|
||||||
* - \ref PW_KEY_AUDIO_CHANNELS
|
* - \ref PW_KEY_AUDIO_CHANNELS
|
||||||
|
* - \ref SPA_KEY_AUDIO_LAYOUT
|
||||||
* - \ref SPA_KEY_AUDIO_POSITION
|
* - \ref SPA_KEY_AUDIO_POSITION
|
||||||
* - \ref PW_KEY_NODE_NAME
|
* - \ref PW_KEY_NODE_NAME
|
||||||
* - \ref PW_KEY_NODE_DESCRIPTION
|
* - \ref PW_KEY_NODE_DESCRIPTION
|
||||||
|
|
@ -417,6 +418,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
copy_props(impl, props, PW_KEY_AUDIO_FORMAT);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
copy_props(impl, props, PW_KEY_AUDIO_RATE);
|
||||||
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
copy_props(impl, props, PW_KEY_AUDIO_CHANNELS);
|
||||||
|
copy_props(impl, props, SPA_KEY_AUDIO_LAYOUT);
|
||||||
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
copy_props(impl, props, SPA_KEY_AUDIO_POSITION);
|
||||||
copy_props(impl, props, PW_KEY_NODE_NAME);
|
copy_props(impl, props, PW_KEY_NODE_NAME);
|
||||||
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
copy_props(impl, props, PW_KEY_NODE_DESCRIPTION);
|
||||||
|
|
|
||||||
|
|
@ -196,6 +196,7 @@ static int parse_audio_info(const struct pw_properties *props, struct spa_audio_
|
||||||
SPA_KEY_AUDIO_FORMAT,
|
SPA_KEY_AUDIO_FORMAT,
|
||||||
SPA_KEY_AUDIO_RATE,
|
SPA_KEY_AUDIO_RATE,
|
||||||
SPA_KEY_AUDIO_CHANNELS,
|
SPA_KEY_AUDIO_CHANNELS,
|
||||||
|
SPA_KEY_AUDIO_LAYOUT,
|
||||||
SPA_KEY_AUDIO_POSITION, NULL);
|
SPA_KEY_AUDIO_POSITION, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue