xf86drm: add drmGetFormatName()
authorSimon Ser <contact@emersion.fr>
Sun, 21 Aug 2022 12:17:35 +0000 (14:17 +0200)
committerSimon Ser <contact@emersion.fr>
Wed, 31 Aug 2022 06:40:49 +0000 (06:40 +0000)
Same as drmGetFormatModifierName() but for formats.

Signed-off-by: Simon Ser <contact@emersion.fr>
Reviewed-by: Marius Vlad <marius.vlad@collabora.com>
Reviewed-by: Eric Engestrom <eric@igalia.com>
core-symbols.txt
xf86drm.c
xf86drm.h

index da98a6a..6c5a4af 100644 (file)
@@ -203,3 +203,4 @@ drmUpdateDrawableInfo
 drmWaitVBlank
 drmGetFormatModifierName
 drmGetFormatModifierVendor
+drmGetFormatName
index cca126b..42c1a5d 100644 (file)
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -5106,3 +5106,38 @@ drmGetFormatModifierName(uint64_t modifier)
 
     return modifier_found;
 }
+
+/**
+ * Get a human-readable name for a DRM FourCC format.
+ *
+ * \param format The format.
+ * \return A malloc'ed string containing the format name. Caller is responsible
+ * for freeing it.
+ */
+drm_public char *
+drmGetFormatName(uint32_t format)
+{
+    char *str;
+    size_t str_size, i;
+    char a, b, c, d;
+
+    if (format == DRM_FORMAT_INVALID)
+        return strdup("INVALID");
+
+    str_size = 5;
+    str = malloc(str_size);
+    if (!str)
+        return NULL;
+
+    a = (char) ((format >> 0) & 0xFF);
+    b = (char) ((format >> 8) & 0xFF);
+    c = (char) ((format >> 16) & 0xFF);
+    d = (char) ((format >> 24) & 0xFF);
+    snprintf(str, str_size, "%c%c%c%c", a, b, c, d);
+
+    /* Trim spaces at the end */
+    for (i = 3; i > 0 && str[i] == ' '; i--)
+        str[i] = '\0';
+
+    return str;
+}
index 1631396..4badaae 100644 (file)
--- a/xf86drm.h
+++ b/xf86drm.h
@@ -954,6 +954,9 @@ drmGetFormatModifierVendor(uint64_t modifier);
 extern char *
 drmGetFormatModifierName(uint64_t modifier);
 
+extern char *
+drmGetFormatName(uint32_t format);
+
 #ifndef fourcc_mod_get_vendor
 #define fourcc_mod_get_vendor(modifier) \
        (((modifier) >> 56) & 0xff)