Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP1:GA
pulseaudio
0002-alsa-mixer-add-hw_device_index-to-pa_alsa_...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0002-alsa-mixer-add-hw_device_index-to-pa_alsa_mapping.patch of Package pulseaudio
From 09ff3fca2fa9fe928990b3f0effeb1ddfbba0df1 Mon Sep 17 00:00:00 2001 From: Tanu Kaskinen <tanuk@iki.fi> Date: Sun, 8 Oct 2017 19:48:24 +0300 Subject: [PATCH] alsa-mixer: add hw_device_index to pa_alsa_mapping We have so far assumed that HDMI always uses device indexes 3, 7, 8, 9, 10, 11, 12 and 13. These values are hardcoded in the path configuration. The Intel HDMI LPE driver, however, uses different device numbering scheme. Since the indexes aren't always the same, we need to query the hw device index from ALSA. Later patches will use the queried index for HDMI jack detection and ELD information reading. BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488 --- src/modules/alsa/alsa-mixer.c | 26 ++++++++++++++++++++++++++ src/modules/alsa/alsa-mixer.h | 4 ++++ 2 files changed, 30 insertions(+) --- a/src/modules/alsa/alsa-mixer.c +++ b/src/modules/alsa/alsa-mixer.c @@ -3504,6 +3504,7 @@ pa_alsa_mapping *pa_alsa_mapping_get(pa_ pa_sample_spec_init(&m->sample_spec); pa_channel_map_init(&m->channel_map); m->proplist = pa_proplist_new(); + m->hw_device_index = -1; pa_hashmap_put(ps->mappings, m->name, m); @@ -4531,6 +4532,25 @@ static int add_profiles_to_probe( return i; } +static void mapping_query_hw_device(pa_alsa_mapping *mapping, snd_pcm_t *pcm) { + int r; + snd_pcm_info_t* pcm_info; + snd_pcm_info_alloca(&pcm_info); + + r = snd_pcm_info(pcm, pcm_info); + if (r < 0) { + pa_log("Mapping %s: snd_pcm_info() failed %s: ", mapping->name, pa_alsa_strerror(r)); + return; + } + + /* XXX: It's not clear what snd_pcm_info_get_device() does if the device is + * not backed by a hw device or if it's backed by multiple hw devices. We + * only use hw_device_index for HDMI devices, however, and for those the + * return value is expected to be always valid, so this shouldn't be a + * significant problem. */ + mapping->hw_device_index = snd_pcm_info_get_device(pcm_info); +} + void pa_alsa_profile_set_probe( pa_alsa_profile_set *ps, const char *dev_id, @@ -4621,6 +4641,9 @@ void pa_alsa_profile_set_probe( } break; } + + if (m->hw_device_index < 0) + mapping_query_hw_device(m, m->output_pcm); } if (p->input_mappings && p->supported) @@ -4642,6 +4665,9 @@ void pa_alsa_profile_set_probe( } break; } + + if (m->hw_device_index < 0) + mapping_query_hw_device(m, m->input_pcm); } last = p; --- a/src/modules/alsa/alsa-mixer.h +++ b/src/modules/alsa/alsa-mixer.h @@ -275,6 +275,10 @@ struct pa_alsa_mapping { bool exact_channels:1; bool fallback:1; + /* The "y" in "hw:x,y". This is set to -1 before the device index has been + * queried, or if the query failed. */ + int hw_device_index; + /* Temporarily used during probing */ snd_pcm_t *input_pcm; snd_pcm_t *output_pcm;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor