From dbd925f2eae5d573cf959fb3f67a279adba2a1fd Mon Sep 17 00:00:00 2001 From: Johannes Ziemke Date: Thu, 20 Nov 2025 15:21:53 +0100 Subject: [PATCH] Support DRM_FORMAT_RGB565 --- CHANGELOG.md | 1 + libsrc/grabber/drm/DRMFrameGrabber.cpp | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bb3dd211..d357bb73c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Linux: New DRM/KMS screen grabber with plane-based capture - not feature complete yet - Logging/Tracing: Introduced qlogging categories to enable dynamic tracing - Home Assistant: Dynamically set brightness for higher dynamic range (#1922) +- Add DRM_FORMAT_RGB565 format to DRM frame grabber --- diff --git a/libsrc/grabber/drm/DRMFrameGrabber.cpp b/libsrc/grabber/drm/DRMFrameGrabber.cpp index de981ee9d..3bbb6bf2f 100644 --- a/libsrc/grabber/drm/DRMFrameGrabber.cpp +++ b/libsrc/grabber/drm/DRMFrameGrabber.cpp @@ -119,6 +119,9 @@ static PixelFormat GetPixelFormatForDrmFormat(uint32_t format) { switch (format) { +#ifdef DRM_FORMAT_RGB565 + case DRM_FORMAT_RGB565: return PixelFormat::BGR16; +#endif case DRM_FORMAT_XRGB8888: return PixelFormat::BGR32; case DRM_FORMAT_ARGB8888: return PixelFormat::BGR32; case DRM_FORMAT_XBGR8888: return PixelFormat::RGB32; @@ -258,6 +261,11 @@ static bool processLinearFramebuffer(const LinearFramebufferParams& params) lineLength = params.w * 2; // 16bpp luma } #endif + else if (params.pixelFormat == PixelFormat::BGR16) + { + size = params.w * params.h * 2; + lineLength = params.w * 2; + } else if (params.pixelFormat == PixelFormat::RGB32 || params.pixelFormat == PixelFormat::BGR32) { size = params.w * params.h * 4;