56 lines
1.7 KiB
Diff
56 lines
1.7 KiB
Diff
|
From 89ee61914756a6f8bcafbad7fb1eca674b0a012f Mon Sep 17 00:00:00 2001
|
||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||
|
Date: Mon, 6 Jun 2022 12:11:24 +0200
|
||
|
Subject: [PATCH] control: eld - fix the decoding for older hw
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
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>
|
||
|
---
|
||
|
src/control/eld.c | 16 +++++++++++++---
|
||
|
1 file changed, 13 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/src/control/eld.c b/src/control/eld.c
|
||
|
index 1e161eb1..9be9605f 100644
|
||
|
--- a/src/control/eld.c
|
||
|
+++ b/src/control/eld.c
|
||
|
@@ -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;
|
||
|
}
|