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:
Jaroslav Kysela 2022-06-06 12:11:24 +02:00
parent 87ff5318e3
commit 89ee619147

View file

@ -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;
}