[RFC] drm/fourcc: Add RPI modifiers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Add modifiers for the Raspberry Pi PiSP compressed formats.

The compressed formats are documented at:
Documentation/userspace-api/media/v4l/pixfmt-pisp-comp-rggb.rst

and in the PiSP datasheet:
https://datasheets.raspberrypi.com/camera/raspberry-pi-image-signal-processor-specification.pdf

Signed-off-by: Jacopo Mondi <jacopo.mondi@xxxxxxxxxxxxxxxx>
---

Background:
-----------

The Raspberry Pi PiSP camera subsystem is on its way to upstream through the
Video4Linux2 subsystem:
https://patchwork.linuxtv.org/project/linux-media/list/?series=12310

The PiSP camera system is composed by a "Front End" and a "Back End".
The FrontEnd part is a MIPI CSI-2 receiver that store frames to memory and
produce statistics, and the BackEnd is a memory-to-memory ISP that converts
images in a format usable by application.

The "FrontEnd" is capable of encoding RAW Bayer images as received by the
image sensor in a 'compressed' format defined by Raspberry Pi and fully
documented in the PiSP manual:
https://datasheets.raspberrypi.com/camera/raspberry-pi-image-signal-processor-specification.pdf

The compression scheme is documented in the in-review patch series for the BE
support at:
https://patchwork.linuxtv.org/project/linux-media/patch/20240223163012.300763-7-jacopo.mondi@xxxxxxxxxxxxxxxx/

The "BackEnd" is capable of consuming images in the compressed format and
optionally user application might want to inspect those images for debugging
purposes.

Why a DRM modifier
------------------

The PiSP support is entirely implemented in libcamera, with the support of an
hw-specific library called 'libpisp'.

libcamera uses the fourcc codes defined by DRM to define its formats:
https://git.libcamera.org/libcamera/libcamera.git/tree/src/libcamera/formats.yaml

And to define a new libcamera format for the Raspberry Pi compressed ones we
need to associate the above proposed modifiers with a RAW Bayer format
identifier.

In example:

  - RGGB16_PISP_COMP1:
      fourcc: DRM_FORMAT_SRGGB16
      mod: PISP_FORMAT_MOD_COMPRESS_MODE1
  - GRBG16_PISP_COMP1:
      fourcc: DRM_FORMAT_SGRBG16
      mod: PISP_FORMAT_MOD_COMPRESS_MODE1
  - GBRG16_PISP_COMP1:
      fourcc: DRM_FORMAT_SGBRG16
      mod: PISP_FORMAT_MOD_COMPRESS_MODE1
  - BGGR16_PISP_COMP1:
      fourcc: DRM_FORMAT_SBGGR16
      mod: PISP_FORMAT_MOD_COMPRESS_MODE1
  - MONO_PISP_COMP1:
      fourcc: DRM_FORMAT_R16
      mod: PISP_FORMAT_MOD_COMPRESS_MODE1

See
https://patchwork.libcamera.org/patch/19503/

Would if be acceptable for DRM to include the above proposed modifiers for the
purpose of defining the above presented libcamera formats ? There will be no
graphic format associated with these modifiers as their purpose it not
displaying images but rather exchange them between the components of the
camera subsystem (and possibly be inspected by specialized test applications).

---
 include/uapi/drm/drm_fourcc.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
index 00db00083175..09b182a959ad 100644
--- a/include/uapi/drm/drm_fourcc.h
+++ b/include/uapi/drm/drm_fourcc.h
@@ -425,6 +425,7 @@ extern "C" {
 #define DRM_FORMAT_MOD_VENDOR_ARM     0x08
 #define DRM_FORMAT_MOD_VENDOR_ALLWINNER 0x09
 #define DRM_FORMAT_MOD_VENDOR_AMLOGIC 0x0a
+#define DRM_FORMAT_MOD_VENDOR_RPI 0x0b

 /* add more to the end as needed */

@@ -1568,6 +1569,10 @@ drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier)
 #define AMD_FMT_MOD_CLEAR(field) \
 	(~((__u64)AMD_FMT_MOD_##field##_MASK << AMD_FMT_MOD_##field##_SHIFT))

+/* RPI (Raspberry Pi) modifiers */
+#define PISP_FORMAT_MOD_COMPRESS_MODE1 fourcc_mod_code(RPI, 1)
+#define PISP_FORMAT_MOD_COMPRESS_MODE2 fourcc_mod_code(RPI, 2)
+
 #if defined(__cplusplus)
 }
 #endif
--
2.43.0




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux