![Álvaro Fernández Rojas](/assets/img/avatar_default.png)
Build system: x86_64 Build-tested: bcm2708, bcm2709, bcm2710, bcm2711 Run-tested: bcm2708/RPiB+, bcm2709/RPi3B, bcm2710/RPi3B, bcm2711/RPi4B Signed-off-by: Marty Jones <mj8263788@gmail.com> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
162 lines
6.4 KiB
Diff
162 lines
6.4 KiB
Diff
From 22db5abf108cebb29b38d92e895b65c16df5e82f Mon Sep 17 00:00:00 2001
|
|
From: David Plowman <david.plowman@raspberrypi.com>
|
|
Date: Wed, 2 Mar 2022 16:47:37 +0000
|
|
Subject: [PATCH] staging: vc04_services: isp: Permit all sRGB colour
|
|
spaces on ISP outputs
|
|
|
|
ISP outputs actually support all colour spaces that are fundamentally
|
|
sRGB underneath, regardless of whether an RGB or YUV output format is
|
|
actually requested.
|
|
|
|
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
|
|
---
|
|
.../bcm2835-isp/bcm2835-isp-fmts.h | 45 ++++++++++---------
|
|
1 file changed, 25 insertions(+), 20 deletions(-)
|
|
|
|
--- a/drivers/staging/vc04_services/bcm2835-isp/bcm2835-isp-fmts.h
|
|
+++ b/drivers/staging/vc04_services/bcm2835-isp/bcm2835-isp-fmts.h
|
|
@@ -34,14 +34,19 @@ struct bcm2835_isp_fmt {
|
|
#define V4L2_COLORSPACE_MASK_RAW V4L2_COLORSPACE_MASK(V4L2_COLORSPACE_RAW)
|
|
|
|
/*
|
|
- * The colour spaces we support for YUV outputs. SRGB features here because,
|
|
- * once you assign the default transfer func and so on, it and JPEG effectively
|
|
- * mean the same.
|
|
+ * All three colour spaces JPEG, SMPTE170M and REC709 are fundamentally sRGB
|
|
+ * underneath (as near as makes no difference to us), just with different YCbCr
|
|
+ * encodings. Therefore the ISP can generate sRGB on its main output and any of
|
|
+ * the others on its low resolution output. Applications should, when using both
|
|
+ * outputs, program the colour spaces on them to be the same, matching whatever
|
|
+ * is requested for the low resolution output, even if the main output is
|
|
+ * producing an RGB format. In turn this requires us to allow all these colour
|
|
+ * spaces for every YUV/RGB output format.
|
|
*/
|
|
-#define V4L2_COLORSPACE_MASK_YUV (V4L2_COLORSPACE_MASK_JPEG | \
|
|
- V4L2_COLORSPACE_MASK_SRGB | \
|
|
- V4L2_COLORSPACE_MASK_SMPTE170M | \
|
|
- V4L2_COLORSPACE_MASK_REC709)
|
|
+#define V4L2_COLORSPACE_MASK_ALL_SRGB (V4L2_COLORSPACE_MASK_JPEG | \
|
|
+ V4L2_COLORSPACE_MASK_SRGB | \
|
|
+ V4L2_COLORSPACE_MASK_SMPTE170M | \
|
|
+ V4L2_COLORSPACE_MASK_REC709)
|
|
|
|
static const struct bcm2835_isp_fmt supported_formats[] = {
|
|
{
|
|
@@ -51,7 +56,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 64,
|
|
.mmal_fmt = MMAL_ENCODING_I420,
|
|
.size_multiplier_x2 = 3,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_JPEG,
|
|
.step_size = 2,
|
|
}, {
|
|
@@ -60,7 +65,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 64,
|
|
.mmal_fmt = MMAL_ENCODING_YV12,
|
|
.size_multiplier_x2 = 3,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_SMPTE170M,
|
|
.step_size = 2,
|
|
}, {
|
|
@@ -69,7 +74,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 32,
|
|
.mmal_fmt = MMAL_ENCODING_NV12,
|
|
.size_multiplier_x2 = 3,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_SMPTE170M,
|
|
.step_size = 2,
|
|
}, {
|
|
@@ -78,7 +83,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 32,
|
|
.mmal_fmt = MMAL_ENCODING_NV21,
|
|
.size_multiplier_x2 = 3,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_SMPTE170M,
|
|
.step_size = 2,
|
|
}, {
|
|
@@ -87,7 +92,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 64,
|
|
.mmal_fmt = MMAL_ENCODING_YUYV,
|
|
.size_multiplier_x2 = 2,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_SMPTE170M,
|
|
.step_size = 2,
|
|
}, {
|
|
@@ -96,7 +101,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 64,
|
|
.mmal_fmt = MMAL_ENCODING_UYVY,
|
|
.size_multiplier_x2 = 2,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_SMPTE170M,
|
|
.step_size = 2,
|
|
}, {
|
|
@@ -105,7 +110,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 64,
|
|
.mmal_fmt = MMAL_ENCODING_YVYU,
|
|
.size_multiplier_x2 = 2,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_SMPTE170M,
|
|
.step_size = 2,
|
|
}, {
|
|
@@ -114,7 +119,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 64,
|
|
.mmal_fmt = MMAL_ENCODING_VYUY,
|
|
.size_multiplier_x2 = 2,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_YUV,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_SMPTE170M,
|
|
.step_size = 2,
|
|
}, {
|
|
@@ -124,7 +129,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 32,
|
|
.mmal_fmt = MMAL_ENCODING_RGB24,
|
|
.size_multiplier_x2 = 2,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_SRGB,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_SRGB,
|
|
.step_size = 1,
|
|
}, {
|
|
@@ -133,7 +138,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 32,
|
|
.mmal_fmt = MMAL_ENCODING_RGB16,
|
|
.size_multiplier_x2 = 2,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_SRGB,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_SRGB,
|
|
.step_size = 1,
|
|
}, {
|
|
@@ -142,7 +147,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 32,
|
|
.mmal_fmt = MMAL_ENCODING_BGR24,
|
|
.size_multiplier_x2 = 2,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_SRGB,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_SRGB,
|
|
.step_size = 1,
|
|
}, {
|
|
@@ -151,7 +156,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 64,
|
|
.mmal_fmt = MMAL_ENCODING_BGRA,
|
|
.size_multiplier_x2 = 2,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_SRGB,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_SRGB,
|
|
.step_size = 1,
|
|
}, {
|
|
@@ -160,7 +165,7 @@ static const struct bcm2835_isp_fmt supp
|
|
.bytesperline_align = 64,
|
|
.mmal_fmt = MMAL_ENCODING_RGBA,
|
|
.size_multiplier_x2 = 2,
|
|
- .colorspace_mask = V4L2_COLORSPACE_MASK_SRGB,
|
|
+ .colorspace_mask = V4L2_COLORSPACE_MASK_ALL_SRGB,
|
|
.colorspace_default = V4L2_COLORSPACE_SRGB,
|
|
.step_size = 1,
|
|
}, {
|