mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
control: eld - fix the decoding for older hw
It seems that the monitor name is not always present in the ELD structure. Add asterisk suffix to notify user about the monitor present for this case. Thanks goes to Bernhard Rosenkränzer <bero@lindev.ch> for the report. Fixes: https://github.com/alsa-project/alsa-lib/pull/233 Fixes: https://github.com/alsa-project/alsa-lib/pull/234 Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
87ff5318e3
commit
89ee619147
1 changed files with 13 additions and 3 deletions
|
|
@ -74,8 +74,13 @@ int __snd_pcm_info_eld_fixup(snd_pcm_info_t * info)
|
|||
if (cinfo.count < 20 || cinfo.count > 256)
|
||||
return -EIO;
|
||||
l = eld[4] & 0x1f;
|
||||
if (l == 0 || l > 16 || 20 + l > cinfo.count)
|
||||
return -EIO;
|
||||
if (l == 0)
|
||||
/* no monitor name detected */
|
||||
goto __present;
|
||||
if (l > 16 || 20 + l > cinfo.count) {
|
||||
SNDERR("ELD decode failed, using old HDMI output names\n");
|
||||
return 0;
|
||||
}
|
||||
s = alloca(l + 1);
|
||||
s[l] = '\0';
|
||||
/* sanitize */
|
||||
|
|
@ -90,7 +95,12 @@ int __snd_pcm_info_eld_fixup(snd_pcm_info_t * info)
|
|||
s[l] = c;
|
||||
}
|
||||
}
|
||||
if (valid > 3)
|
||||
if (valid > 3) {
|
||||
snd_strlcpy((char *)info->name, s, sizeof(info->name));
|
||||
} else {
|
||||
__present:
|
||||
strncat((char *)info->name, " *", sizeof(info->name) - 1);
|
||||
((char *)info->name)[sizeof(info->name)-1] = '\0';
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue