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; impl->profile_set->ignore_dB = impl->ignore_dB;
pa_alsa_profile_set_probe(impl->profile_set, impl->ucm.mixers, pa_alsa_profile_set_probe(impl->profile_set, impl->ucm.mixers,
device_id, index,
&impl->ucm.default_sample_spec, &impl->ucm.default_sample_spec,
impl->ucm.default_n_fragments, impl->ucm.default_n_fragments,
impl->ucm.default_fragment_size_msec); 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, static void mapping_paths_probe(pa_alsa_mapping *m, pa_alsa_profile *profile,
pa_alsa_direction_t direction, pa_hashmap *used_paths, pa_alsa_direction_t direction, pa_hashmap *used_paths,
pa_hashmap *mixers) { pa_hashmap *mixers, uint32_t card_index) {
pa_alsa_path *p; pa_alsa_path *p;
void *state; void *state;
@ -4492,7 +4492,7 @@ static void mapping_paths_probe(pa_alsa_mapping *m, pa_alsa_profile *profile,
pa_assert(pcm_handle); 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) { if (!mixer_handle) {
/* Cannot open mixer, remove all entries */ /* Cannot open mixer, remove all entries */
pa_hashmap_remove_all(ps->paths); 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( void pa_alsa_profile_set_probe(
pa_alsa_profile_set *ps, pa_alsa_profile_set *ps,
pa_hashmap *mixers, pa_hashmap *mixers,
const char *dev_id, uint32_t card_index,
const pa_sample_spec *ss, const pa_sample_spec *ss,
unsigned default_n_fragments, unsigned default_n_fragments,
unsigned default_fragment_size_msec) { unsigned default_fragment_size_msec) {
@ -5119,6 +5119,9 @@ void pa_alsa_profile_set_probe(
pa_hashmap *broken_inputs, *broken_outputs, *used_paths; pa_hashmap *broken_inputs, *broken_outputs, *used_paths;
pa_alsa_mapping *selected_fallback_input = NULL, *selected_fallback_output = NULL; 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(ps);
pa_assert(dev_id); pa_assert(dev_id);
pa_assert(ss); pa_assert(ss);
@ -5244,7 +5247,7 @@ void pa_alsa_profile_set_probe(
if (p->fallback_output && selected_fallback_output == NULL) { if (p->fallback_output && selected_fallback_output == NULL) {
selected_fallback_output = m; 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) if (p->input_mappings)
@ -5254,7 +5257,7 @@ void pa_alsa_profile_set_probe(
if (p->fallback_input && selected_fallback_input == NULL) { if (p->fallback_input && selected_fallback_input == NULL) {
selected_fallback_input = m; 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); 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); 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_free(pa_alsa_profile_set *s);
void pa_alsa_profile_set_dump(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); void pa_alsa_profile_set_drop_unsupported(pa_alsa_profile_set *s);

View file

@ -1923,16 +1923,19 @@ __close:
return NULL; 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_t* info;
snd_pcm_info_alloca(&info); snd_pcm_info_alloca(&info);
pa_assert(pcm); pa_assert(pcm);
if (snd_pcm_info(pcm, info) >= 0) { 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); 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(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_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 #if 0
void pa_alsa_mixer_set_fdlist(pa_hashmap *mixers, snd_mixer_t *mixer, pa_mainloop_api *ml); void pa_alsa_mixer_set_fdlist(pa_hashmap *mixers, snd_mixer_t *mixer, pa_mainloop_api *ml);
#endif #endif