From b70c59c6a43d9ef318e7ebb7f0ffd88c9301325b Mon Sep 17 00:00:00 2001 From: Huaxin Date: Thu, 7 Nov 2024 22:35:47 +0800 Subject: [PATCH] Support 16/32 bit color depth Mado currently supports 32-bit color depth for desktop and laptop display devices. To enhance its compatibility across diverse Linux framebuffer environments, I have made the following changes to support both 16-bit and 32-bit color depths: - Distinguish the color format and perform color format conversion. - Examine the correctness of the framebuffer format based on the color format. These updates improve Mado's compatibility, enabling it to be used on devices with low memory overhead, such as the Raspberry Pi, in addition to desktop display devices. --- backend/fbdev.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/fbdev.c b/backend/fbdev.c index f015fa3..a48900c 100644 --- a/backend/fbdev.c +++ b/backend/fbdev.c @@ -123,21 +123,21 @@ static bool twin_fbdev_work(void *closure) return true; } -static bool twin_fbdev_is_rgb565(twin_fbdev_t *tx) +static inline bool twin_fbdev_is_rgb565(twin_fbdev_t *tx) { return tx->fb_var.red.offset == 11 && tx->fb_var.red.length == 5 && tx->fb_var.green.offset == 5 && tx->fb_var.green.length == 6 && tx->fb_var.blue.offset == 0 && tx->fb_var.blue.length == 5; } -static bool twin_fbdev_is_rgb888(twin_fbdev_t *tx) +static inline bool twin_fbdev_is_rgb888(twin_fbdev_t *tx) { return tx->fb_var.red.offset == 16 && tx->fb_var.red.length == 8 && tx->fb_var.green.offset == 8 && tx->fb_var.green.length == 8 && tx->fb_var.blue.offset == 0 && tx->fb_var.blue.length == 8; } -static bool twin_fbdev_is_argb32(twin_fbdev_t *tx) +static inline bool twin_fbdev_is_argb32(twin_fbdev_t *tx) { return tx->fb_var.red.offset == 16 && tx->fb_var.red.length == 8 && tx->fb_var.green.offset == 8 && tx->fb_var.green.length == 8 && @@ -169,19 +169,19 @@ static bool twin_fbdev_apply_config(twin_fbdev_t *tx) /* Examine the framebuffer format */ switch (tx->fb_var.bits_per_pixel) { - case 16: // RGB565 + case 16: /* RGB565 */ if (!twin_fbdev_is_rgb565(tx)) { log_error("Invalid framebuffer format for 16 bpp"); return false; } break; - case 24: // RGB888 + case 24: /* RGB888 */ if (!twin_fbdev_is_rgb888(tx)) { log_error("Invalid framebuffer format for 24 bpp"); return false; } break; - case 32: // ARGB32 + case 32: /* ARGB32 */ if (!twin_fbdev_is_argb32(tx)) { log_error("Invalid framebuffer format for 32 bpp"); return false;