mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
pulse-server: use args_to_audioinfo to parse channels
This commit is contained in:
parent
649d21ac02
commit
575163e644
1 changed files with 13 additions and 32 deletions
|
|
@ -128,8 +128,8 @@ struct module *create_module_null_sink(struct impl *impl, const char *argument)
|
|||
struct module_null_sink_data *d;
|
||||
struct pw_properties *props = NULL;
|
||||
const char *str;
|
||||
struct channel_map map = CHANNEL_MAP_INIT;
|
||||
uint32_t i, channels;
|
||||
struct spa_audio_info_raw info = { 0 };
|
||||
uint32_t i;
|
||||
int res;
|
||||
|
||||
props = pw_properties_new_dict(&SPA_DICT_INIT_ARRAY(module_null_sink_info));
|
||||
|
|
@ -150,42 +150,23 @@ struct module *create_module_null_sink(struct impl *impl, const char *argument)
|
|||
module_args_add_props(props, str);
|
||||
pw_properties_set(props, "sink_properties", NULL);
|
||||
}
|
||||
if ((str = pw_properties_get(props, "channels")) != NULL) {
|
||||
channels = atoi(str);
|
||||
pw_properties_set(props, SPA_KEY_AUDIO_CHANNELS, str);
|
||||
pw_properties_set(props, "channels", NULL);
|
||||
} else {
|
||||
channels = impl->defs.sample_spec.channels;
|
||||
pw_properties_setf(props, SPA_KEY_AUDIO_CHANNELS, "%u", channels);
|
||||
}
|
||||
if ((str = pw_properties_get(props, "rate")) != NULL) {
|
||||
pw_properties_set(props, SPA_KEY_AUDIO_RATE, str);
|
||||
pw_properties_set(props, "rate", NULL);
|
||||
}
|
||||
if ((str = pw_properties_get(props, "channel_map")) != NULL) {
|
||||
channel_map_parse(str, &map);
|
||||
pw_properties_set(props, "channel_map", NULL);
|
||||
} else {
|
||||
if (channels == impl->defs.channel_map.channels) {
|
||||
map = impl->defs.channel_map;
|
||||
} else {
|
||||
for (i = 0; i < channels; i++)
|
||||
map.map[i] = SPA_AUDIO_CHANNEL_UNKNOWN;
|
||||
map.channels = channels;
|
||||
}
|
||||
}
|
||||
if (map.channels != channels) {
|
||||
pw_log_error("channel map does not match channels");
|
||||
|
||||
if (module_args_to_audioinfo(impl, props, &info) < 0) {
|
||||
res = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (map.channels > 0) {
|
||||
if (info.rate)
|
||||
pw_properties_setf(props, SPA_KEY_AUDIO_RATE, "%u", info.rate);
|
||||
if (info.channels) {
|
||||
char *s, *p;
|
||||
p = s = alloca(map.channels * 6);
|
||||
for (i = 0; i < map.channels; i++)
|
||||
|
||||
pw_properties_setf(props, SPA_KEY_AUDIO_CHANNELS, "%u", info.channels);
|
||||
|
||||
p = s = alloca(info.channels * 6);
|
||||
for (i = 0; i < info.channels; i++)
|
||||
p += snprintf(p, 6, "%s%s", i == 0 ? "" : ",",
|
||||
channel_id2name(map.map[i]));
|
||||
channel_id2name(info.position[i]));
|
||||
pw_properties_set(props, SPA_KEY_AUDIO_POSITION, s);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue