Merge branch 'ac3-ports' into 'master'

spa: alsa: Detect ports for HDMI AC3 profiles

See merge request pipewire/pipewire!2850
This commit is contained in:
Arun Raghavan 2026-06-06 02:11:39 +00:00
commit 3c873abd57
5 changed files with 17 additions and 11 deletions

View file

@ -2025,7 +2025,7 @@ struct acp_card *acp_card_new(uint32_t index, const struct acp_dict *props)
impl->profile_set->ignore_dB = impl->ignore_dB;
pa_alsa_profile_set_probe(impl->profile_set, impl->ucm.mixers,
device_id,
index,
&impl->ucm.default_sample_spec,
impl->ucm.default_n_fragments,
impl->ucm.default_fragment_size_msec);

View file

@ -4467,7 +4467,7 @@ static void profile_set_set_availability_groups(pa_alsa_profile_set *ps) {
static void mapping_paths_probe(pa_alsa_mapping *m, pa_alsa_profile *profile,
pa_alsa_direction_t direction, pa_hashmap *used_paths,
pa_hashmap *mixers) {
pa_hashmap *mixers, uint32_t card_index) {
pa_alsa_path *p;
void *state;
@ -4492,7 +4492,7 @@ static void mapping_paths_probe(pa_alsa_mapping *m, pa_alsa_profile *profile,
pa_assert(pcm_handle);
mixer_handle = pa_alsa_open_mixer_for_pcm(mixers, pcm_handle, true);
mixer_handle = pa_alsa_open_mixer_for_pcm(mixers, pcm_handle, true, card_index);
if (!mixer_handle) {
/* Cannot open mixer, remove all entries */
pa_hashmap_remove_all(ps->paths);
@ -5106,7 +5106,7 @@ static void mapping_query_hw_device(pa_alsa_mapping *mapping, snd_pcm_t *pcm) {
void pa_alsa_profile_set_probe(
pa_alsa_profile_set *ps,
pa_hashmap *mixers,
const char *dev_id,
uint32_t card_index,
const pa_sample_spec *ss,
unsigned default_n_fragments,
unsigned default_fragment_size_msec) {
@ -5119,6 +5119,9 @@ void pa_alsa_profile_set_probe(
pa_hashmap *broken_inputs, *broken_outputs, *used_paths;
pa_alsa_mapping *selected_fallback_input = NULL, *selected_fallback_output = NULL;
char dev_id[16];
snprintf(dev_id, sizeof(dev_id), "%d", card_index);
pa_assert(ps);
pa_assert(dev_id);
pa_assert(ss);
@ -5244,7 +5247,7 @@ void pa_alsa_profile_set_probe(
if (p->fallback_output && selected_fallback_output == NULL) {
selected_fallback_output = m;
}
mapping_paths_probe(m, p, PA_ALSA_DIRECTION_OUTPUT, used_paths, mixers);
mapping_paths_probe(m, p, PA_ALSA_DIRECTION_OUTPUT, used_paths, mixers, card_index);
}
if (p->input_mappings)
@ -5254,7 +5257,7 @@ void pa_alsa_profile_set_probe(
if (p->fallback_input && selected_fallback_input == NULL) {
selected_fallback_input = m;
}
mapping_paths_probe(m, p, PA_ALSA_DIRECTION_INPUT, used_paths, mixers);
mapping_paths_probe(m, p, PA_ALSA_DIRECTION_INPUT, used_paths, mixers, card_index);
}
}

View file

@ -431,7 +431,7 @@ void pa_alsa_mapping_free (pa_alsa_mapping *m);
void pa_alsa_profile_free (pa_alsa_profile *p);
pa_alsa_profile_set* pa_alsa_profile_set_new(const char *fname, const pa_channel_map *bonus);
void pa_alsa_profile_set_probe(pa_alsa_profile_set *ps, pa_hashmap *mixers, const char *dev_id, const pa_sample_spec *ss, unsigned default_n_fragments, unsigned default_fragment_size_msec);
void pa_alsa_profile_set_probe(pa_alsa_profile_set *ps, pa_hashmap *mixers, uint32_t card_index, const pa_sample_spec *ss, unsigned default_n_fragments, unsigned default_fragment_size_msec);
void pa_alsa_profile_set_free(pa_alsa_profile_set *s);
void pa_alsa_profile_set_dump(pa_alsa_profile_set *s);
void pa_alsa_profile_set_drop_unsupported(pa_alsa_profile_set *s);

View file

@ -1923,16 +1923,19 @@ __close:
return NULL;
}
snd_mixer_t *pa_alsa_open_mixer_for_pcm(pa_hashmap *mixers, snd_pcm_t *pcm, bool probe) {
snd_mixer_t *pa_alsa_open_mixer_for_pcm(pa_hashmap *mixers, snd_pcm_t *pcm, bool probe, uint32_t fallback_index) {
snd_pcm_info_t* info;
snd_pcm_info_alloca(&info);
pa_assert(pcm);
if (snd_pcm_info(pcm, info) >= 0) {
int card_idx;
int card_idx = snd_pcm_info_get_card(info);
if ((card_idx = snd_pcm_info_get_card(info)) >= 0)
if (card_idx < 0)
card_idx = fallback_index;
if (card_idx >= 0)
return pa_alsa_open_mixer(mixers, card_idx, probe);
}

View file

@ -166,7 +166,7 @@ snd_mixer_elem_t *pa_alsa_mixer_find_pcm(snd_mixer_t *mixer, const char *name, u
snd_mixer_t *pa_alsa_open_mixer(pa_hashmap *mixers, int alsa_card_index, bool probe);
snd_mixer_t *pa_alsa_open_mixer_by_name(pa_hashmap *mixers, const char *dev, bool probe);
snd_mixer_t *pa_alsa_open_mixer_for_pcm(pa_hashmap *mixers, snd_pcm_t *pcm, bool probe);
snd_mixer_t *pa_alsa_open_mixer_for_pcm(pa_hashmap *mixers, snd_pcm_t *pcm, bool probe, uint32_t fallback_index);
#if 0
void pa_alsa_mixer_set_fdlist(pa_hashmap *mixers, snd_mixer_t *mixer, pa_mainloop_api *ml);
#endif