[libcamera-devel,v2,07/10] libcamera: v4l2_videodevice: Map V4L2_PIX_FMT_GREY to DRM FourCC

Message ID 20200316214310.27665-8-laurent.pinchart@ideasonboard.com
State Superseded
Headers show
Series
  • Simple pipeline handler
Related show

Commit Message

Laurent Pinchart March 16, 2020, 9:43 p.m. UTC
DRM has a format for 8-bit greyscale data, DRM_FORMAT_R8. Despite the
'R' name, which comes from GL/Vulkan to mean single-channel data, the
format maps to greyscale for display. We can thus map it to
V4L2_PIX_FMT_GREY.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/libcamera/v4l2_videodevice.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Patch

diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index 28de3d2fe5c6..8e56e934b04f 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -1614,12 +1614,15 @@  PixelFormat V4L2VideoDevice::toPixelFormat(uint32_t v4l2Fourcc)
 	case V4L2_PIX_FMT_NV21M:
 		return DRM_FORMAT_NV21;
 
+	/* Greyscale formats. */
+	case V4L2_PIX_FMT_GREY:
+		return DRM_FORMAT_R8;
+
 	/* Compressed formats. */
 	case V4L2_PIX_FMT_MJPEG:
 		return DRM_FORMAT_MJPEG;
 
 	/* V4L2 formats not yet supported by DRM. */
-	case V4L2_PIX_FMT_GREY:
 	default:
 		/*
 		 * \todo We can't use LOG() in a static method of a Loggable
@@ -1698,6 +1701,10 @@  uint32_t V4L2VideoDevice::toV4L2Fourcc(PixelFormat pixelFormat, bool multiplanar
 	case DRM_FORMAT_NV21:
 		return V4L2_PIX_FMT_NV21;
 
+	/* Greyscale formats. */
+	case DRM_FORMAT_R8:
+		return V4L2_PIX_FMT_GREY;
+
 	/* Compressed formats. */
 	case DRM_FORMAT_MJPEG:
 		return V4L2_PIX_FMT_MJPEG;