mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
PCM: Fix the conversion from string to chmap position
Use strncasecmp() to allow lower cases, and also evaluate the inverted phase suffix, too. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
f7300682dc
commit
c6db60e327
1 changed files with 27 additions and 10 deletions
|
|
@ -7471,24 +7471,41 @@ int snd_pcm_chmap_print(const snd_pcm_chmap_t *map, size_t maxlen, char *buf)
|
|||
static int str_to_chmap(const char *str, int len)
|
||||
{
|
||||
int val;
|
||||
unsigned long v;
|
||||
char *p;
|
||||
|
||||
if (isdigit(*str)) {
|
||||
val = atoi(str);
|
||||
if (val < 0)
|
||||
v = strtoul(str, &p, 0);
|
||||
if (v == ULONG_MAX)
|
||||
return -1;
|
||||
return val | SND_CHMAP_DRIVER_SPEC;
|
||||
} else if (str[0] == 'C' && str[1] == 'h') {
|
||||
val = atoi(str + 2);
|
||||
if (val < 0)
|
||||
val = v;
|
||||
val |= SND_CHMAP_DRIVER_SPEC;
|
||||
str = p;
|
||||
} else if (!strncasecmp(str, "ch", 2)) {
|
||||
v = strtoul(str + 2, &p, 0);
|
||||
if (v == ULONG_MAX)
|
||||
return -1;
|
||||
return val;
|
||||
val = v;
|
||||
str = p;
|
||||
} else {
|
||||
for (val = 0; val <= SND_CHMAP_LAST; val++) {
|
||||
if (!strncmp(str, chmap_names[val], len))
|
||||
return val;
|
||||
int slen;
|
||||
assert(chmap_names[val]);
|
||||
slen = strlen(chmap_names[val]);
|
||||
if (slen > len)
|
||||
continue;
|
||||
if (!strncasecmp(str, chmap_names[val], slen) &&
|
||||
!isalpha(str[slen])) {
|
||||
str += slen;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
if (val > SND_CHMAP_LAST)
|
||||
return -1;
|
||||
}
|
||||
if (str && !strncasecmp(str, "[INV]", 5))
|
||||
val |= SND_CHMAP_PHASE_INVERSE;
|
||||
return val;
|
||||
}
|
||||
|
||||
unsigned int snd_pcm_chmap_from_string(const char *str)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue