return NOT_FOUND;
}
-static int get_compare_weight(const char *name)
+static int get_compare_weight(const snd_ctl_elem_id_t *id)
{
static const char *names[] = {
"Master",
"Mic",
"Phone",
"Video",
+ "Zoom Video",
"PC Speaker",
"Aux",
"Mono",
"Center",
NULL
};
+ const char *name = id->name, *name1;
int res, res1;
if ((res = snd_hctl_compare_mixer_priority_lookup((const char **)&name, names, 1000000)) == NOT_FOUND)
return NOT_FOUND;
- if ((res1 = snd_hctl_compare_mixer_priority_lookup((const char **)&name, names1, 1000)) == NOT_FOUND)
+ if (*name == '\0')
return res;
- res += res1;
+ for (name1 = name; *name1 != '\0'; name1++);
+ for (name1--; name1 != name && *name1 != ' '; name1--);
+ while (name1 != name && *name1 == ' ')
+ name1--;
+ if (name1 != name) {
+ for (; name1 != name && *name1 != ' '; name1--);
+ name = name1;
+ if ((res1 = snd_hctl_compare_mixer_priority_lookup((const char **)&name, names1, 1000)) == NOT_FOUND)
+ return res;
+ res += res1;
+ } else {
+ name = name1;
+ }
if ((res1 = snd_hctl_compare_mixer_priority_lookup((const char **)&name, names2, 1)) == NOT_FOUND)
return res;
return res + res1;
assert(hctl && id);
assert(hctl->compare);
el.id = *id;
- el.compare_weight = get_compare_weight(id->name);
+ el.compare_weight = get_compare_weight(id);
l = 0;
u = hctl->count;
while (l < u) {
{
int dir;
int idx;
- if (elem->id.iface == SNDRV_CTL_ELEM_IFACE_MIXER)
- elem->compare_weight = get_compare_weight(elem->id.name);
+ elem->compare_weight = get_compare_weight(&elem->id);
if (hctl->count == hctl->alloc) {
snd_hctl_elem_t **h;
hctl->alloc += 32;
}
elem->id = list.pids[idx];
elem->hctl = hctl;
- if (elem->id.iface == SNDRV_CTL_ELEM_IFACE_MIXER)
- elem->compare_weight = get_compare_weight(elem->id.name);
+ elem->compare_weight = get_compare_weight(&elem->id);
hctl->pelems[idx] = elem;
list_add_tail(&elem->list, &hctl->elems);
hctl->count++;