From 3c1ca6d4b881863b41154b561591cf0a68230c16 Mon Sep 17 00:00:00 2001 From: Tanu Kaskinen Date: Fri, 29 Jun 2012 18:04:57 +0300 Subject: [PATCH] alsa-mixer: Introduce "description-key" option for paths Previously the path description was looked up based on the path name only. Since there can be multiple paths that use the same description, it had to be possible to have multiple paths with the same name. Having the same name with multiple paths makes identifying the paths more complex than necessary, so the plan is to make it impossible to have paths with the same name. This patch prepares for that by retaining the possibility to still have the same description with multiple paths. Instead of the path name, the path description is looked up by using the "path description key" if it is set (path name is still used as a fallback lookup key). --- src/modules/alsa/alsa-mixer.c | 27 ++++++++++++------- src/modules/alsa/alsa-mixer.h | 1 + .../alsa/mixer/paths/analog-input-aux.conf | 2 +- .../mixer/paths/analog-input-dock-mic.conf | 2 +- .../alsa/mixer/paths/analog-input-fm.conf | 2 +- .../mixer/paths/analog-input-front-mic.conf | 2 +- .../paths/analog-input-headphone-mic.conf | 2 +- .../mixer/paths/analog-input-headset-mic.conf | 2 +- .../analog-input-internal-mic-always.conf | 2 +- .../paths/analog-input-internal-mic.conf | 2 +- .../mixer/paths/analog-input-mic-line.conf | 2 +- .../alsa/mixer/paths/analog-input-mic.conf | 2 +- .../mixer/paths/analog-input-rear-mic.conf | 2 +- .../mixer/paths/analog-input-tvtuner.conf | 2 +- .../paths/analog-output-desktop-speaker.conf | 2 +- .../paths/analog-output-headphones-2.conf | 2 +- .../mixer/paths/analog-output-headphones.conf | 2 +- .../paths/analog-output-speaker-always.conf | 2 +- .../mixer/paths/analog-output-speaker.conf | 2 +- .../mixer/paths/analog-output.conf.common | 8 +++++- 20 files changed, 43 insertions(+), 27 deletions(-) diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c index 21655d708..d41b5840b 100644 --- a/src/modules/alsa/alsa-mixer.c +++ b/src/modules/alsa/alsa-mixer.c @@ -53,15 +53,18 @@ static int setting_select(pa_alsa_setting *s, snd_mixer_t *m); struct description_map { - const char *name; + const char *key; const char *description; }; -static const char *lookup_description(const char *name, const struct description_map dm[], unsigned n) { +static const char *lookup_description(const char *key, const struct description_map dm[], unsigned n) { unsigned i; + if (!key) + return NULL; + for (i = 0; i < n; i++) - if (pa_streq(dm[i].name, name)) + if (pa_streq(dm[i].key, key)) return _(dm[i].description); return NULL; @@ -2361,12 +2364,16 @@ static int path_verify(pa_alsa_path *p) { return -1; if (!p->description) - p->description = pa_xstrdup(lookup_description(p->name, + p->description = pa_xstrdup(lookup_description(p->description_key ? p->description_key : p->name, well_known_descriptions, PA_ELEMENTSOF(well_known_descriptions))); - if (!p->description) + if (!p->description) { + if (p->description_key) + pa_log_warn("Path %s: Unrecognized description key: %s", p->name, p->description_key); + p->description = pa_xstrdup(p->name); + } return 0; } @@ -2388,6 +2395,7 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa pa_config_item items[] = { /* [General] */ { "priority", pa_config_parse_unsigned, NULL, "General" }, + { "description-key", pa_config_parse_string, NULL, "General" }, { "description", pa_config_parse_string, NULL, "General" }, { "name", pa_config_parse_string, NULL, "General" }, { "mute-during-activation", pa_config_parse_bool, NULL, "General" }, @@ -2427,10 +2435,11 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa p->eld_device = -1; items[0].data = &p->priority; - items[1].data = &p->description; - items[2].data = &p->name; - items[3].data = &mute_during_activation; - items[4].data = &p->eld_device; + items[1].data = &p->description_key; + items[2].data = &p->description; + items[3].data = &p->name; + items[4].data = &mute_during_activation; + items[5].data = &p->eld_device; if (!paths_dir) paths_dir = get_default_paths_dir(); diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h index b3f7455e7..3d50ebb61 100644 --- a/src/modules/alsa/alsa-mixer.h +++ b/src/modules/alsa/alsa-mixer.h @@ -180,6 +180,7 @@ struct pa_alsa_path { pa_device_port* port; char *name; + char *description_key; char *description; unsigned priority; int eld_device; diff --git a/src/modules/alsa/mixer/paths/analog-input-aux.conf b/src/modules/alsa/mixer/paths/analog-input-aux.conf index e6aa064ff..a5a4baaab 100644 --- a/src/modules/alsa/mixer/paths/analog-input-aux.conf +++ b/src/modules/alsa/mixer/paths/analog-input-aux.conf @@ -20,7 +20,7 @@ [General] priority = 80 -name = analog-input +description-key = analog-input [Element Capture] switch = mute diff --git a/src/modules/alsa/mixer/paths/analog-input-dock-mic.conf b/src/modules/alsa/mixer/paths/analog-input-dock-mic.conf index f6ea94b9f..9334d451b 100644 --- a/src/modules/alsa/mixer/paths/analog-input-dock-mic.conf +++ b/src/modules/alsa/mixer/paths/analog-input-dock-mic.conf @@ -20,7 +20,7 @@ [General] priority = 78 -name = analog-input-microphone-dock +description-key = analog-input-microphone-dock [Jack Dock Mic] required-any = any diff --git a/src/modules/alsa/mixer/paths/analog-input-fm.conf b/src/modules/alsa/mixer/paths/analog-input-fm.conf index 7f150e369..dfadb003d 100644 --- a/src/modules/alsa/mixer/paths/analog-input-fm.conf +++ b/src/modules/alsa/mixer/paths/analog-input-fm.conf @@ -20,7 +20,7 @@ [General] priority = 70 -name = analog-input-radio +description-key = analog-input-radio [Element Capture] switch = mute diff --git a/src/modules/alsa/mixer/paths/analog-input-front-mic.conf b/src/modules/alsa/mixer/paths/analog-input-front-mic.conf index bb2e80689..3fb5f5e85 100644 --- a/src/modules/alsa/mixer/paths/analog-input-front-mic.conf +++ b/src/modules/alsa/mixer/paths/analog-input-front-mic.conf @@ -20,7 +20,7 @@ [General] priority = 85 -name = analog-input-microphone-front +description-key = analog-input-microphone-front [Jack Front Mic] required-any = any diff --git a/src/modules/alsa/mixer/paths/analog-input-headphone-mic.conf b/src/modules/alsa/mixer/paths/analog-input-headphone-mic.conf index 9b9213af5..688b8ac97 100644 --- a/src/modules/alsa/mixer/paths/analog-input-headphone-mic.conf +++ b/src/modules/alsa/mixer/paths/analog-input-headphone-mic.conf @@ -21,7 +21,7 @@ [General] priority = 87 -name = analog-input-microphone +description-key = analog-input-microphone [Jack Headphone Mic] required-any = any diff --git a/src/modules/alsa/mixer/paths/analog-input-headset-mic.conf b/src/modules/alsa/mixer/paths/analog-input-headset-mic.conf index 9a9dc357f..0a3d661f5 100644 --- a/src/modules/alsa/mixer/paths/analog-input-headset-mic.conf +++ b/src/modules/alsa/mixer/paths/analog-input-headset-mic.conf @@ -20,7 +20,7 @@ [General] priority = 87 -name = analog-input-microphone-headset +description-key = analog-input-microphone-headset [Jack Headset Mic] required-any = any diff --git a/src/modules/alsa/mixer/paths/analog-input-internal-mic-always.conf b/src/modules/alsa/mixer/paths/analog-input-internal-mic-always.conf index 37f9b17ca..cd08531b7 100644 --- a/src/modules/alsa/mixer/paths/analog-input-internal-mic-always.conf +++ b/src/modules/alsa/mixer/paths/analog-input-internal-mic-always.conf @@ -21,7 +21,7 @@ [General] priority = 89 -name = analog-input-microphone-internal +description-key = analog-input-microphone-internal [Jack Mic] state.plugged = no diff --git a/src/modules/alsa/mixer/paths/analog-input-internal-mic.conf b/src/modules/alsa/mixer/paths/analog-input-internal-mic.conf index 4718dd06c..ae3e9a832 100644 --- a/src/modules/alsa/mixer/paths/analog-input-internal-mic.conf +++ b/src/modules/alsa/mixer/paths/analog-input-internal-mic.conf @@ -21,7 +21,7 @@ [General] priority = 89 -name = analog-input-microphone-internal +description-key = analog-input-microphone-internal [Jack Mic] state.plugged = no diff --git a/src/modules/alsa/mixer/paths/analog-input-mic-line.conf b/src/modules/alsa/mixer/paths/analog-input-mic-line.conf index fb808381d..13db33b7a 100644 --- a/src/modules/alsa/mixer/paths/analog-input-mic-line.conf +++ b/src/modules/alsa/mixer/paths/analog-input-mic-line.conf @@ -20,7 +20,7 @@ [General] priority = 85 -name = analog-input +description-key = analog-input [Element Capture] switch = mute diff --git a/src/modules/alsa/mixer/paths/analog-input-mic.conf b/src/modules/alsa/mixer/paths/analog-input-mic.conf index 9e5f04446..17f3988f4 100644 --- a/src/modules/alsa/mixer/paths/analog-input-mic.conf +++ b/src/modules/alsa/mixer/paths/analog-input-mic.conf @@ -20,7 +20,7 @@ [General] priority = 87 -name = analog-input-microphone +description-key = analog-input-microphone [Jack Mic] required-any = any diff --git a/src/modules/alsa/mixer/paths/analog-input-rear-mic.conf b/src/modules/alsa/mixer/paths/analog-input-rear-mic.conf index 397efba92..ac78b5b98 100644 --- a/src/modules/alsa/mixer/paths/analog-input-rear-mic.conf +++ b/src/modules/alsa/mixer/paths/analog-input-rear-mic.conf @@ -20,7 +20,7 @@ [General] priority = 82 -name = analog-input-microphone-rear +description-key = analog-input-microphone-rear [Jack Rear Mic] required-any = any diff --git a/src/modules/alsa/mixer/paths/analog-input-tvtuner.conf b/src/modules/alsa/mixer/paths/analog-input-tvtuner.conf index fae3ce835..446446a48 100644 --- a/src/modules/alsa/mixer/paths/analog-input-tvtuner.conf +++ b/src/modules/alsa/mixer/paths/analog-input-tvtuner.conf @@ -20,7 +20,7 @@ [General] priority = 70 -name = analog-input-video +description-key = analog-input-video [Element Capture] switch = mute diff --git a/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf index 099823ee3..2b68117a2 100644 --- a/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf +++ b/src/modules/alsa/mixer/paths/analog-output-desktop-speaker.conf @@ -20,7 +20,7 @@ [General] priority = 101 -name = analog-output-speaker +description-key = analog-output-speaker [Properties] device.icon_name = audio-speakers diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf index 6161ff5a1..75689243c 100644 --- a/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf +++ b/src/modules/alsa/mixer/paths/analog-output-headphones-2.conf @@ -20,7 +20,7 @@ [General] priority = 89 -name = analog-output-headphones +description-key = analog-output-headphones [Properties] device.icon_name = audio-headphones diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones.conf b/src/modules/alsa/mixer/paths/analog-output-headphones.conf index 76cd01e15..e68203373 100644 --- a/src/modules/alsa/mixer/paths/analog-output-headphones.conf +++ b/src/modules/alsa/mixer/paths/analog-output-headphones.conf @@ -20,7 +20,7 @@ [General] priority = 90 -name = analog-output-headphones +description-key = analog-output-headphones [Properties] device.icon_name = audio-headphones diff --git a/src/modules/alsa/mixer/paths/analog-output-speaker-always.conf b/src/modules/alsa/mixer/paths/analog-output-speaker-always.conf index 8a2b3dfa2..c511813c8 100644 --- a/src/modules/alsa/mixer/paths/analog-output-speaker-always.conf +++ b/src/modules/alsa/mixer/paths/analog-output-speaker-always.conf @@ -21,7 +21,7 @@ [General] priority = 100 -name = analog-output-speaker +description-key = analog-output-speaker [Properties] device.icon_name = audio-speakers diff --git a/src/modules/alsa/mixer/paths/analog-output-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-speaker.conf index 7b47fc242..8416a2589 100644 --- a/src/modules/alsa/mixer/paths/analog-output-speaker.conf +++ b/src/modules/alsa/mixer/paths/analog-output-speaker.conf @@ -20,7 +20,7 @@ [General] priority = 100 -name = analog-output-speaker +description-key = analog-output-speaker [Properties] device.icon_name = audio-speakers diff --git a/src/modules/alsa/mixer/paths/analog-output.conf.common b/src/modules/alsa/mixer/paths/analog-output.conf.common index 73d09f81d..727b776ee 100644 --- a/src/modules/alsa/mixer/paths/analog-output.conf.common +++ b/src/modules/alsa/mixer/paths/analog-output.conf.common @@ -55,7 +55,13 @@ ; [General] ; priority = ... # Priority for this path -; description = ... +; description-key = ... # The path description is looked up from a table in path_verify() in +; # src/modules/alsa/alsa-mixer.c. By default the path name (i.e. the file name +; # minus the ".conf" suffix) is used as the lookup key, but if this option is +; # set, then the given string is used as the key instead. In any case the +; # "description" option can be used to override the path description. +; description = ... # Description for this path. Overrides the normal description lookup logic, as +; # described in the "description-key" documentation above. ; mute-during-activation = yes | no # If this path supports hardware mute, should the hw mute be used while activating this ; # path? In some cases this can reduce extra noises during port switching, while in other ; # cases this can increase such noises. Default: no.