]> git.alsa-project.org Git - alsa-lib.git/commitdiff
control: eld - fix the decoding for older hw
authorJaroslav Kysela <perex@perex.cz>
Mon, 6 Jun 2022 10:11:24 +0000 (12:11 +0200)
committerJaroslav Kysela <perex@perex.cz>
Mon, 6 Jun 2022 10:14:24 +0000 (12:14 +0200)
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

index 1e161eb1d271fae7f4cd3822aa7e90fc56d1e8d7..9be9605fd091a00168431b2d8dec90adf7c0a063 100644 (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;
 }