From 1e6615f79d87cab64853c422946390fa5223ff30 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 18 Sep 2020 11:06:06 +0200 Subject: [PATCH] pulse: use the EnumFormat param to set reasonable defaults Before the node is started, we don't get a Format parameters and we don't know the channelmap of the node. This forces us to invent a channelmap that might be wrong. We can do better by using the EnumFormat param to extract some defaults for the format, rate and channelmap. Fixes wrong channels in gnome-control-center when testing speakers. --- pipewire-pulseaudio/src/context.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pipewire-pulseaudio/src/context.c b/pipewire-pulseaudio/src/context.c index 929e6561a..d6cfbb4cf 100644 --- a/pipewire-pulseaudio/src/context.c +++ b/pipewire-pulseaudio/src/context.c @@ -1002,8 +1002,20 @@ static void node_event_param(void *object, int seq, case SPA_PARAM_EnumFormat: { pa_format_info *f = pa_format_info_from_param(param); - if (f) + if (f) { pw_array_add_ptr(&g->node_info.formats, f); + + if (g->node_info.channel_map.channels == 0) + pa_format_info_get_channel_map(f, &g->node_info.channel_map); + + if (g->node_info.sample_spec.format == 0 || + g->node_info.sample_spec.rate == 0 || + g->node_info.sample_spec.channels == 0) { + pa_format_info_get_sample_format(f, &g->node_info.sample_spec.format); + pa_format_info_get_rate(f, &g->node_info.sample_spec.rate); + pa_format_info_get_channels(f, &g->node_info.sample_spec.channels); + } + } break; } case SPA_PARAM_Format: