Message ID | 20240209164825.166800-2-jacopo.mondi@ideasonboard.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | media: raspberrypi: Add support for PiSP Back End | expand |
Le vendredi 09 février 2024 à 17:48 +0100, Jacopo Mondi a écrit : > From: Dave Stevenson <dave.stevenson@raspberrypi.com> > > This is the format used by monochrome 12bit image sensors. > > Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > --- > .../userspace-api/media/v4l/pixfmt-y12p.rst | 38 +++++++++++++++++++ > .../userspace-api/media/v4l/yuv-formats.rst | 1 + > drivers/media/v4l2-core/v4l2-ioctl.c | 1 + > include/uapi/linux/videodev2.h | 1 + > 4 files changed, 41 insertions(+) > create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > new file mode 100644 > index 000000000000..b2eb4a72724d > --- /dev/null > +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > @@ -0,0 +1,38 @@ > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later > + > +.. _V4L2-PIX-FMT-Y12P: > + > +****************************** > +V4L2_PIX_FMT_Y12P ('Y12P') > +****************************** > + > +Grey-scale image as a MIPI RAW12 packed array > + > + > +Description > +=========== > + > +This is a packed grey-scale image format with a depth of 12 bits per > +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes > +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4 > +least significants bits of each pixel, in the same order. This is an interesting arrangement, which make me feel that Y12P is perhaps bit too generic ? Perhaps something like: V4L2_PIX_FMT_Y12_MIPI That being said, I don't mind if you reserve the nice and short name for the first occurrence of such format in 20 years (it might equally be the last). Will they do the same for Y10, by storing 4 bytes of higher 8bit of 4 pixels, and packing the remaining lower 2 bits packed in the fif bytes ? Cause for this one, we'd have confusion, since CODEC usually just place all the bits in order over 5 bytes here (which have its own issues of course). > + > +**Byte Order.** > +Each cell is one byte. > + > +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}| > + > + > +.. flat-table:: > + :header-rows: 0 > + :stub-columns: 0 > + :widths: 2 1 1 1 > + > + > + - - start + 0: > + - Y'\ :sub:`00high` > + - Y'\ :sub:`01high` > + - Y'\ :sub:`01low`\ (bits 7--4) > + > + Y'\ :sub:`00low`\ (bits 3--0) > + > diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst > index 24b34cdfa6fe..7c9ccfdd94cd 100644 > --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst > +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst > @@ -267,6 +267,7 @@ image. > pixfmt-packed-yuv > pixfmt-yuv-planar > pixfmt-yuv-luma > + pixfmt-y12p > pixfmt-y8i > pixfmt-y12i > pixfmt-uv8 > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c > index 33076af4dfdb..483498c55899 100644 > --- a/drivers/media/v4l2-core/v4l2-ioctl.c > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c > @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) > case V4L2_PIX_FMT_Y16_BE: descr = "16-bit Greyscale BE"; break; > case V4L2_PIX_FMT_Y10BPACK: descr = "10-bit Greyscale (Packed)"; break; > case V4L2_PIX_FMT_Y10P: descr = "10-bit Greyscale (MIPI Packed)"; break; > + case V4L2_PIX_FMT_Y12P: descr = "12-bit Greyscale (MIPI Packed)"; break; > case V4L2_PIX_FMT_IPU3_Y10: descr = "10-bit greyscale (IPU3 Packed)"; break; > case V4L2_PIX_FMT_Y8I: descr = "Interleaved 8-bit Greyscale"; break; > case V4L2_PIX_FMT_Y12I: descr = "Interleaved 12-bit Greyscale"; break; > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > index a8015e5e7fa4..11ebf9b22ccb 100644 > --- a/include/uapi/linux/videodev2.h > +++ b/include/uapi/linux/videodev2.h > @@ -598,6 +598,7 @@ struct v4l2_pix_format { > /* Grey bit-packed formats */ > #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ > #define V4L2_PIX_FMT_Y10P v4l2_fourcc('Y', '1', '0', 'P') /* 10 Greyscale, MIPI RAW10 packed */ > +#define V4L2_PIX_FMT_Y12P v4l2_fourcc('Y', '1', '2', 'P') /* 12 Greyscale, MIPI RAW12 packed */ > #define V4L2_PIX_FMT_IPU3_Y10 v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */ > > /* Palette formats */
Hi Nicolas On Fri, 9 Feb 2024 at 17:53, Nicolas Dufresne <nicolas@ndufresne.ca> wrote: > > Le vendredi 09 février 2024 à 17:48 +0100, Jacopo Mondi a écrit : > > From: Dave Stevenson <dave.stevenson@raspberrypi.com> > > > > This is the format used by monochrome 12bit image sensors. > > > > Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > --- > > .../userspace-api/media/v4l/pixfmt-y12p.rst | 38 +++++++++++++++++++ > > .../userspace-api/media/v4l/yuv-formats.rst | 1 + > > drivers/media/v4l2-core/v4l2-ioctl.c | 1 + > > include/uapi/linux/videodev2.h | 1 + > > 4 files changed, 41 insertions(+) > > create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > new file mode 100644 > > index 000000000000..b2eb4a72724d > > --- /dev/null > > +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > @@ -0,0 +1,38 @@ > > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later > > + > > +.. _V4L2-PIX-FMT-Y12P: > > + > > +****************************** > > +V4L2_PIX_FMT_Y12P ('Y12P') > > +****************************** > > + > > +Grey-scale image as a MIPI RAW12 packed array > > + > > + > > +Description > > +=========== > > + > > +This is a packed grey-scale image format with a depth of 12 bits per > > +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes > > +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4 > > +least significants bits of each pixel, in the same order. > > This is an interesting arrangement, which make me feel that Y12P is perhaps bit > too generic ? Perhaps something like: > > V4L2_PIX_FMT_Y12_MIPI > > That being said, I don't mind if you reserve the nice and short name for the > first occurrence of such format in 20 years (it might equally be the last). Will > they do the same for Y10, by storing 4 bytes of higher 8bit of 4 pixels, and > packing the remaining lower 2 bits packed in the fif bytes ? Cause for this one, > we'd have confusion, since CODEC usually just place all the bits in order over 5 > bytes here (which have its own issues of course). We already have V4L2_PIX_FMT_Y10P defined for the MIPI packing for 10bit luma-only. https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html This is only extending the definitions for the other bit depths using the same pattern. Adding the P is also the same pattern as for the Bayer formats - V4L2_PIX_FMT_SRGGB10 for the 10bit unpacked to 16bit, and V4L2_PIX_FMT_SRGGB10P for the MIPI packed variant. I'm not inventing anything new here :) Dave > > + > > +**Byte Order.** > > +Each cell is one byte. > > + > > +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}| > > + > > + > > +.. flat-table:: > > + :header-rows: 0 > > + :stub-columns: 0 > > + :widths: 2 1 1 1 > > + > > + > > + - - start + 0: > > + - Y'\ :sub:`00high` > > + - Y'\ :sub:`01high` > > + - Y'\ :sub:`01low`\ (bits 7--4) > > + > > + Y'\ :sub:`00low`\ (bits 3--0) > > + > > diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst > > index 24b34cdfa6fe..7c9ccfdd94cd 100644 > > --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst > > +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst > > @@ -267,6 +267,7 @@ image. > > pixfmt-packed-yuv > > pixfmt-yuv-planar > > pixfmt-yuv-luma > > + pixfmt-y12p > > pixfmt-y8i > > pixfmt-y12i > > pixfmt-uv8 > > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c > > index 33076af4dfdb..483498c55899 100644 > > --- a/drivers/media/v4l2-core/v4l2-ioctl.c > > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c > > @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) > > case V4L2_PIX_FMT_Y16_BE: descr = "16-bit Greyscale BE"; break; > > case V4L2_PIX_FMT_Y10BPACK: descr = "10-bit Greyscale (Packed)"; break; > > case V4L2_PIX_FMT_Y10P: descr = "10-bit Greyscale (MIPI Packed)"; break; > > + case V4L2_PIX_FMT_Y12P: descr = "12-bit Greyscale (MIPI Packed)"; break; > > case V4L2_PIX_FMT_IPU3_Y10: descr = "10-bit greyscale (IPU3 Packed)"; break; > > case V4L2_PIX_FMT_Y8I: descr = "Interleaved 8-bit Greyscale"; break; > > case V4L2_PIX_FMT_Y12I: descr = "Interleaved 12-bit Greyscale"; break; > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > > index a8015e5e7fa4..11ebf9b22ccb 100644 > > --- a/include/uapi/linux/videodev2.h > > +++ b/include/uapi/linux/videodev2.h > > @@ -598,6 +598,7 @@ struct v4l2_pix_format { > > /* Grey bit-packed formats */ > > #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ > > #define V4L2_PIX_FMT_Y10P v4l2_fourcc('Y', '1', '0', 'P') /* 10 Greyscale, MIPI RAW10 packed */ > > +#define V4L2_PIX_FMT_Y12P v4l2_fourcc('Y', '1', '2', 'P') /* 12 Greyscale, MIPI RAW12 packed */ > > #define V4L2_PIX_FMT_IPU3_Y10 v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */ > > > > /* Palette formats */ >
Le vendredi 09 février 2024 à 19:28 +0000, Dave Stevenson a écrit : > Hi Nicolas > > On Fri, 9 Feb 2024 at 17:53, Nicolas Dufresne <nicolas@ndufresne.ca> wrote: > > > > Le vendredi 09 février 2024 à 17:48 +0100, Jacopo Mondi a écrit : > > > From: Dave Stevenson <dave.stevenson@raspberrypi.com> > > > > > > This is the format used by monochrome 12bit image sensors. > > > > > > Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> > > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > > --- > > > .../userspace-api/media/v4l/pixfmt-y12p.rst | 38 +++++++++++++++++++ > > > .../userspace-api/media/v4l/yuv-formats.rst | 1 + > > > drivers/media/v4l2-core/v4l2-ioctl.c | 1 + > > > include/uapi/linux/videodev2.h | 1 + > > > 4 files changed, 41 insertions(+) > > > create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > > > > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > > new file mode 100644 > > > index 000000000000..b2eb4a72724d > > > --- /dev/null > > > +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > > @@ -0,0 +1,38 @@ > > > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later > > > + > > > +.. _V4L2-PIX-FMT-Y12P: > > > + > > > +****************************** > > > +V4L2_PIX_FMT_Y12P ('Y12P') > > > +****************************** > > > + > > > +Grey-scale image as a MIPI RAW12 packed array > > > + > > > + > > > +Description > > > +=========== > > > + > > > +This is a packed grey-scale image format with a depth of 12 bits per > > > +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes > > > +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4 > > > +least significants bits of each pixel, in the same order. > > > > This is an interesting arrangement, which make me feel that Y12P is perhaps bit > > too generic ? Perhaps something like: > > > > V4L2_PIX_FMT_Y12_MIPI > > > > That being said, I don't mind if you reserve the nice and short name for the > > first occurrence of such format in 20 years (it might equally be the last). Will > > they do the same for Y10, by storing 4 bytes of higher 8bit of 4 pixels, and > > packing the remaining lower 2 bits packed in the fif bytes ? Cause for this one, > > we'd have confusion, since CODEC usually just place all the bits in order over 5 > > bytes here (which have its own issues of course). > > We already have V4L2_PIX_FMT_Y10P defined for the MIPI packing for > 10bit luma-only. > https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html > > This is only extending the definitions for the other bit depths using > the same pattern. > > Adding the P is also the same pattern as for the Bayer formats - > V4L2_PIX_FMT_SRGGB10 for the 10bit unpacked to 16bit, and > V4L2_PIX_FMT_SRGGB10P for the MIPI packed variant. > > I'm not inventing anything new here :) A bit sad, but what can we do, I keep missing patches ;-P Nicolas > > Dave > > > > + > > > +**Byte Order.** > > > +Each cell is one byte. > > > + > > > +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}| > > > + > > > + > > > +.. flat-table:: > > > + :header-rows: 0 > > > + :stub-columns: 0 > > > + :widths: 2 1 1 1 > > > + > > > + > > > + - - start + 0: > > > + - Y'\ :sub:`00high` > > > + - Y'\ :sub:`01high` > > > + - Y'\ :sub:`01low`\ (bits 7--4) > > > + > > > + Y'\ :sub:`00low`\ (bits 3--0) > > > + > > > diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst > > > index 24b34cdfa6fe..7c9ccfdd94cd 100644 > > > --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst > > > +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst > > > @@ -267,6 +267,7 @@ image. > > > pixfmt-packed-yuv > > > pixfmt-yuv-planar > > > pixfmt-yuv-luma > > > + pixfmt-y12p > > > pixfmt-y8i > > > pixfmt-y12i > > > pixfmt-uv8 > > > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c > > > index 33076af4dfdb..483498c55899 100644 > > > --- a/drivers/media/v4l2-core/v4l2-ioctl.c > > > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c > > > @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) > > > case V4L2_PIX_FMT_Y16_BE: descr = "16-bit Greyscale BE"; break; > > > case V4L2_PIX_FMT_Y10BPACK: descr = "10-bit Greyscale (Packed)"; break; > > > case V4L2_PIX_FMT_Y10P: descr = "10-bit Greyscale (MIPI Packed)"; break; > > > + case V4L2_PIX_FMT_Y12P: descr = "12-bit Greyscale (MIPI Packed)"; break; > > > case V4L2_PIX_FMT_IPU3_Y10: descr = "10-bit greyscale (IPU3 Packed)"; break; > > > case V4L2_PIX_FMT_Y8I: descr = "Interleaved 8-bit Greyscale"; break; > > > case V4L2_PIX_FMT_Y12I: descr = "Interleaved 12-bit Greyscale"; break; > > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > > > index a8015e5e7fa4..11ebf9b22ccb 100644 > > > --- a/include/uapi/linux/videodev2.h > > > +++ b/include/uapi/linux/videodev2.h > > > @@ -598,6 +598,7 @@ struct v4l2_pix_format { > > > /* Grey bit-packed formats */ > > > #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ > > > #define V4L2_PIX_FMT_Y10P v4l2_fourcc('Y', '1', '0', 'P') /* 10 Greyscale, MIPI RAW10 packed */ > > > +#define V4L2_PIX_FMT_Y12P v4l2_fourcc('Y', '1', '2', 'P') /* 12 Greyscale, MIPI RAW12 packed */ > > > #define V4L2_PIX_FMT_IPU3_Y10 v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */ > > > > > > /* Palette formats */ > >
On Fri, 9 Feb 2024 at 21:15, Nicolas Dufresne <nicolas@ndufresne.ca> wrote: > > Le vendredi 09 février 2024 à 19:28 +0000, Dave Stevenson a écrit : > > Hi Nicolas > > > > On Fri, 9 Feb 2024 at 17:53, Nicolas Dufresne <nicolas@ndufresne.ca> wrote: > > > > > > Le vendredi 09 février 2024 à 17:48 +0100, Jacopo Mondi a écrit : > > > > From: Dave Stevenson <dave.stevenson@raspberrypi.com> > > > > > > > > This is the format used by monochrome 12bit image sensors. > > > > > > > > Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> > > > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > > > --- > > > > .../userspace-api/media/v4l/pixfmt-y12p.rst | 38 +++++++++++++++++++ > > > > .../userspace-api/media/v4l/yuv-formats.rst | 1 + > > > > drivers/media/v4l2-core/v4l2-ioctl.c | 1 + > > > > include/uapi/linux/videodev2.h | 1 + > > > > 4 files changed, 41 insertions(+) > > > > create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > > > > > > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > > > new file mode 100644 > > > > index 000000000000..b2eb4a72724d > > > > --- /dev/null > > > > +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > > > @@ -0,0 +1,38 @@ > > > > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later > > > > + > > > > +.. _V4L2-PIX-FMT-Y12P: > > > > + > > > > +****************************** > > > > +V4L2_PIX_FMT_Y12P ('Y12P') > > > > +****************************** > > > > + > > > > +Grey-scale image as a MIPI RAW12 packed array > > > > + > > > > + > > > > +Description > > > > +=========== > > > > + > > > > +This is a packed grey-scale image format with a depth of 12 bits per > > > > +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes > > > > +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4 > > > > +least significants bits of each pixel, in the same order. > > > > > > This is an interesting arrangement, which make me feel that Y12P is perhaps bit > > > too generic ? Perhaps something like: > > > > > > V4L2_PIX_FMT_Y12_MIPI > > > > > > That being said, I don't mind if you reserve the nice and short name for the > > > first occurrence of such format in 20 years (it might equally be the last). Will > > > they do the same for Y10, by storing 4 bytes of higher 8bit of 4 pixels, and > > > packing the remaining lower 2 bits packed in the fif bytes ? Cause for this one, > > > we'd have confusion, since CODEC usually just place all the bits in order over 5 > > > bytes here (which have its own issues of course). > > > > We already have V4L2_PIX_FMT_Y10P defined for the MIPI packing for > > 10bit luma-only. > > https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html > > > > This is only extending the definitions for the other bit depths using > > the same pattern. > > > > Adding the P is also the same pattern as for the Bayer formats - > > V4L2_PIX_FMT_SRGGB10 for the 10bit unpacked to 16bit, and > > V4L2_PIX_FMT_SRGGB10P for the MIPI packed variant. > > > > I'm not inventing anything new here :) > > A bit sad, but what can we do, I keep missing patches ;-P Not recently though. V4L2_PIX_FMT_Y10P was added in July 2018. [1] The use of V4L2_PIX_FMT_Sxxxx10P for Bayer format MIPI 10 bit packing was added in Dec 2014 [2] Dave [1] 6e15bec49f36 media: v4l: Add new 10-bit packed grayscale format [2] 4353e36ee84d [media] v4l: Add packed Bayer raw10 pixel formats > Nicolas > > > > > Dave > > > > > > + > > > > +**Byte Order.** > > > > +Each cell is one byte. > > > > + > > > > +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}| > > > > + > > > > + > > > > +.. flat-table:: > > > > + :header-rows: 0 > > > > + :stub-columns: 0 > > > > + :widths: 2 1 1 1 > > > > + > > > > + > > > > + - - start + 0: > > > > + - Y'\ :sub:`00high` > > > > + - Y'\ :sub:`01high` > > > > + - Y'\ :sub:`01low`\ (bits 7--4) > > > > + > > > > + Y'\ :sub:`00low`\ (bits 3--0) > > > > + > > > > diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst > > > > index 24b34cdfa6fe..7c9ccfdd94cd 100644 > > > > --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst > > > > +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst > > > > @@ -267,6 +267,7 @@ image. > > > > pixfmt-packed-yuv > > > > pixfmt-yuv-planar > > > > pixfmt-yuv-luma > > > > + pixfmt-y12p > > > > pixfmt-y8i > > > > pixfmt-y12i > > > > pixfmt-uv8 > > > > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c > > > > index 33076af4dfdb..483498c55899 100644 > > > > --- a/drivers/media/v4l2-core/v4l2-ioctl.c > > > > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c > > > > @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) > > > > case V4L2_PIX_FMT_Y16_BE: descr = "16-bit Greyscale BE"; break; > > > > case V4L2_PIX_FMT_Y10BPACK: descr = "10-bit Greyscale (Packed)"; break; > > > > case V4L2_PIX_FMT_Y10P: descr = "10-bit Greyscale (MIPI Packed)"; break; > > > > + case V4L2_PIX_FMT_Y12P: descr = "12-bit Greyscale (MIPI Packed)"; break; > > > > case V4L2_PIX_FMT_IPU3_Y10: descr = "10-bit greyscale (IPU3 Packed)"; break; > > > > case V4L2_PIX_FMT_Y8I: descr = "Interleaved 8-bit Greyscale"; break; > > > > case V4L2_PIX_FMT_Y12I: descr = "Interleaved 12-bit Greyscale"; break; > > > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > > > > index a8015e5e7fa4..11ebf9b22ccb 100644 > > > > --- a/include/uapi/linux/videodev2.h > > > > +++ b/include/uapi/linux/videodev2.h > > > > @@ -598,6 +598,7 @@ struct v4l2_pix_format { > > > > /* Grey bit-packed formats */ > > > > #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ > > > > #define V4L2_PIX_FMT_Y10P v4l2_fourcc('Y', '1', '0', 'P') /* 10 Greyscale, MIPI RAW10 packed */ > > > > +#define V4L2_PIX_FMT_Y12P v4l2_fourcc('Y', '1', '2', 'P') /* 12 Greyscale, MIPI RAW12 packed */ > > > > #define V4L2_PIX_FMT_IPU3_Y10 v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */ > > > > > > > > /* Palette formats */ > > > >
Hi Jacopo, On Fri, Feb 09, 2024 at 05:48:16PM +0100, Jacopo Mondi wrote: > From: Dave Stevenson <dave.stevenson@raspberrypi.com> > > This is the format used by monochrome 12bit image sensors. > > Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > --- > .../userspace-api/media/v4l/pixfmt-y12p.rst | 38 +++++++++++++++++++ > .../userspace-api/media/v4l/yuv-formats.rst | 1 + > drivers/media/v4l2-core/v4l2-ioctl.c | 1 + > include/uapi/linux/videodev2.h | 1 + > 4 files changed, 41 insertions(+) > create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > new file mode 100644 > index 000000000000..b2eb4a72724d > --- /dev/null > +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > @@ -0,0 +1,38 @@ > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later > + > +.. _V4L2-PIX-FMT-Y12P: > + > +****************************** > +V4L2_PIX_FMT_Y12P ('Y12P') > +****************************** You have extra asterisks here. > + > +Grey-scale image as a MIPI RAW12 packed array I think you may mention it aligns with MIPI CSI-2 but the same packing may be used elsewhere, it's fairly trivial. The similar Bayer format definitions don't mention this. > + > + > +Description > +=========== > + > +This is a packed grey-scale image format with a depth of 12 bits per > +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes > +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4 > +least significants bits of each pixel, in the same order. > + > +**Byte Order.** > +Each cell is one byte. > + > +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}| > + > + > +.. flat-table:: > + :header-rows: 0 > + :stub-columns: 0 > + :widths: 2 1 1 1 > + > + > + - - start + 0: > + - Y'\ :sub:`00high` > + - Y'\ :sub:`01high` > + - Y'\ :sub:`01low`\ (bits 7--4) > + Is the newline here intentional? > + Y'\ :sub:`00low`\ (bits 3--0) > + > diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst > index 24b34cdfa6fe..7c9ccfdd94cd 100644 > --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst > +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst > @@ -267,6 +267,7 @@ image. > pixfmt-packed-yuv > pixfmt-yuv-planar > pixfmt-yuv-luma > + pixfmt-y12p > pixfmt-y8i > pixfmt-y12i > pixfmt-uv8 > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c > index 33076af4dfdb..483498c55899 100644 > --- a/drivers/media/v4l2-core/v4l2-ioctl.c > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c > @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) > case V4L2_PIX_FMT_Y16_BE: descr = "16-bit Greyscale BE"; break; > case V4L2_PIX_FMT_Y10BPACK: descr = "10-bit Greyscale (Packed)"; break; > case V4L2_PIX_FMT_Y10P: descr = "10-bit Greyscale (MIPI Packed)"; break; > + case V4L2_PIX_FMT_Y12P: descr = "12-bit Greyscale (MIPI Packed)"; break; > case V4L2_PIX_FMT_IPU3_Y10: descr = "10-bit greyscale (IPU3 Packed)"; break; > case V4L2_PIX_FMT_Y8I: descr = "Interleaved 8-bit Greyscale"; break; > case V4L2_PIX_FMT_Y12I: descr = "Interleaved 12-bit Greyscale"; break; > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > index a8015e5e7fa4..11ebf9b22ccb 100644 > --- a/include/uapi/linux/videodev2.h > +++ b/include/uapi/linux/videodev2.h > @@ -598,6 +598,7 @@ struct v4l2_pix_format { > /* Grey bit-packed formats */ > #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ > #define V4L2_PIX_FMT_Y10P v4l2_fourcc('Y', '1', '0', 'P') /* 10 Greyscale, MIPI RAW10 packed */ > +#define V4L2_PIX_FMT_Y12P v4l2_fourcc('Y', '1', '2', 'P') /* 12 Greyscale, MIPI RAW12 packed */ > #define V4L2_PIX_FMT_IPU3_Y10 v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */ > > /* Palette formats */
Hello On Mon, Feb 12, 2024 at 11:58:32AM +0000, Dave Stevenson wrote: > On Fri, 9 Feb 2024 at 21:15, Nicolas Dufresne <nicolas@ndufresne.ca> wrote: > > > > Le vendredi 09 février 2024 à 19:28 +0000, Dave Stevenson a écrit : > > > Hi Nicolas > > > > > > On Fri, 9 Feb 2024 at 17:53, Nicolas Dufresne <nicolas@ndufresne.ca> wrote: > > > > > > > > Le vendredi 09 février 2024 à 17:48 +0100, Jacopo Mondi a écrit : > > > > > From: Dave Stevenson <dave.stevenson@raspberrypi.com> > > > > > > > > > > This is the format used by monochrome 12bit image sensors. > > > > > > > > > > Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> > > > > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > > > > --- > > > > > .../userspace-api/media/v4l/pixfmt-y12p.rst | 38 +++++++++++++++++++ > > > > > .../userspace-api/media/v4l/yuv-formats.rst | 1 + > > > > > drivers/media/v4l2-core/v4l2-ioctl.c | 1 + > > > > > include/uapi/linux/videodev2.h | 1 + > > > > > 4 files changed, 41 insertions(+) > > > > > create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > > > > > > > > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > > > > new file mode 100644 > > > > > index 000000000000..b2eb4a72724d > > > > > --- /dev/null > > > > > +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst > > > > > @@ -0,0 +1,38 @@ > > > > > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later > > > > > + > > > > > +.. _V4L2-PIX-FMT-Y12P: > > > > > + > > > > > +****************************** > > > > > +V4L2_PIX_FMT_Y12P ('Y12P') > > > > > +****************************** > > > > > + > > > > > +Grey-scale image as a MIPI RAW12 packed array > > > > > + > > > > > + > > > > > +Description > > > > > +=========== > > > > > + > > > > > +This is a packed grey-scale image format with a depth of 12 bits per > > > > > +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes > > > > > +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4 > > > > > +least significants bits of each pixel, in the same order. > > > > > > > > This is an interesting arrangement, which make me feel that Y12P is perhaps bit > > > > too generic ? Perhaps something like: > > > > > > > > V4L2_PIX_FMT_Y12_MIPI > > > > > > > > That being said, I don't mind if you reserve the nice and short name for the > > > > first occurrence of such format in 20 years (it might equally be the last). Will > > > > they do the same for Y10, by storing 4 bytes of higher 8bit of 4 pixels, and > > > > packing the remaining lower 2 bits packed in the fif bytes ? Cause for this one, > > > > we'd have confusion, since CODEC usually just place all the bits in order over 5 > > > > bytes here (which have its own issues of course). > > > > > > We already have V4L2_PIX_FMT_Y10P defined for the MIPI packing for > > > 10bit luma-only. > > > https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html > > > > > > This is only extending the definitions for the other bit depths using > > > the same pattern. > > > I now wonder why creating two new files instead of adding Y12P and Y14P to the table of luma-only formats we have in the above mentioned file. In the notes at the bottom of the page we can indeed report that the P variants of the Y10 Y12 and Y14 formats are packed according to the MIPI CSI-2 specification, even if, as Dave said, this is a pretty standard convention for the educated readers of the v4l2 spec. In facts, this is what has been done already for the existing luma formats in: af4f45057695 ("media: doc: pixfmt-yuv: Move all luma-only YUV formats to common file") So I guess it's correct to keep expanding the existing file instead of adding new ones. Sorry for not having realized it earlier. > > > Adding the P is also the same pattern as for the Bayer formats - > > > V4L2_PIX_FMT_SRGGB10 for the 10bit unpacked to 16bit, and > > > V4L2_PIX_FMT_SRGGB10P for the MIPI packed variant. > > > > > > I'm not inventing anything new here :) > > > > A bit sad, but what can we do, I keep missing patches ;-P > > Not recently though. > > V4L2_PIX_FMT_Y10P was added in July 2018. [1] > The use of V4L2_PIX_FMT_Sxxxx10P for Bayer format MIPI 10 bit packing > was added in Dec 2014 [2] > > Dave > > [1] 6e15bec49f36 media: v4l: Add new 10-bit packed grayscale format > [2] 4353e36ee84d [media] v4l: Add packed Bayer raw10 pixel formats > > > Nicolas > > > > > > > > Dave > > > > > > > > + > > > > > +**Byte Order.** > > > > > +Each cell is one byte. > > > > > + > > > > > +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}| > > > > > + > > > > > + > > > > > +.. flat-table:: > > > > > + :header-rows: 0 > > > > > + :stub-columns: 0 > > > > > + :widths: 2 1 1 1 > > > > > + > > > > > + > > > > > + - - start + 0: > > > > > + - Y'\ :sub:`00high` > > > > > + - Y'\ :sub:`01high` > > > > > + - Y'\ :sub:`01low`\ (bits 7--4) > > > > > + > > > > > + Y'\ :sub:`00low`\ (bits 3--0) > > > > > + > > > > > diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst > > > > > index 24b34cdfa6fe..7c9ccfdd94cd 100644 > > > > > --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst > > > > > +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst > > > > > @@ -267,6 +267,7 @@ image. > > > > > pixfmt-packed-yuv > > > > > pixfmt-yuv-planar > > > > > pixfmt-yuv-luma > > > > > + pixfmt-y12p > > > > > pixfmt-y8i > > > > > pixfmt-y12i > > > > > pixfmt-uv8 > > > > > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c > > > > > index 33076af4dfdb..483498c55899 100644 > > > > > --- a/drivers/media/v4l2-core/v4l2-ioctl.c > > > > > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c > > > > > @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) > > > > > case V4L2_PIX_FMT_Y16_BE: descr = "16-bit Greyscale BE"; break; > > > > > case V4L2_PIX_FMT_Y10BPACK: descr = "10-bit Greyscale (Packed)"; break; > > > > > case V4L2_PIX_FMT_Y10P: descr = "10-bit Greyscale (MIPI Packed)"; break; > > > > > + case V4L2_PIX_FMT_Y12P: descr = "12-bit Greyscale (MIPI Packed)"; break; > > > > > case V4L2_PIX_FMT_IPU3_Y10: descr = "10-bit greyscale (IPU3 Packed)"; break; > > > > > case V4L2_PIX_FMT_Y8I: descr = "Interleaved 8-bit Greyscale"; break; > > > > > case V4L2_PIX_FMT_Y12I: descr = "Interleaved 12-bit Greyscale"; break; > > > > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > > > > > index a8015e5e7fa4..11ebf9b22ccb 100644 > > > > > --- a/include/uapi/linux/videodev2.h > > > > > +++ b/include/uapi/linux/videodev2.h > > > > > @@ -598,6 +598,7 @@ struct v4l2_pix_format { > > > > > /* Grey bit-packed formats */ > > > > > #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ > > > > > #define V4L2_PIX_FMT_Y10P v4l2_fourcc('Y', '1', '0', 'P') /* 10 Greyscale, MIPI RAW10 packed */ > > > > > +#define V4L2_PIX_FMT_Y12P v4l2_fourcc('Y', '1', '2', 'P') /* 12 Greyscale, MIPI RAW12 packed */ > > > > > #define V4L2_PIX_FMT_IPU3_Y10 v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */ > > > > > > > > > > /* Palette formats */ > > > > > >
diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst new file mode 100644 index 000000000000..b2eb4a72724d --- /dev/null +++ b/Documentation/userspace-api/media/v4l/pixfmt-y12p.rst @@ -0,0 +1,38 @@ +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later + +.. _V4L2-PIX-FMT-Y12P: + +****************************** +V4L2_PIX_FMT_Y12P ('Y12P') +****************************** + +Grey-scale image as a MIPI RAW12 packed array + + +Description +=========== + +This is a packed grey-scale image format with a depth of 12 bits per +pixel. Two consecutive pixels are packed into 3 bytes. The first 2 bytes +contain the 8 high order bits of the pixels, and the 3rd byte contains the 4 +least significants bits of each pixel, in the same order. + +**Byte Order.** +Each cell is one byte. + +.. tabularcolumns:: |p{2.2cm}|p{1.2cm}|p{1.2cm}|p{3.1cm}| + + +.. flat-table:: + :header-rows: 0 + :stub-columns: 0 + :widths: 2 1 1 1 + + + - - start + 0: + - Y'\ :sub:`00high` + - Y'\ :sub:`01high` + - Y'\ :sub:`01low`\ (bits 7--4) + + Y'\ :sub:`00low`\ (bits 3--0) + diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst index 24b34cdfa6fe..7c9ccfdd94cd 100644 --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst @@ -267,6 +267,7 @@ image. pixfmt-packed-yuv pixfmt-yuv-planar pixfmt-yuv-luma + pixfmt-y12p pixfmt-y8i pixfmt-y12i pixfmt-uv8 diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c index 33076af4dfdb..483498c55899 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -1311,6 +1311,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) case V4L2_PIX_FMT_Y16_BE: descr = "16-bit Greyscale BE"; break; case V4L2_PIX_FMT_Y10BPACK: descr = "10-bit Greyscale (Packed)"; break; case V4L2_PIX_FMT_Y10P: descr = "10-bit Greyscale (MIPI Packed)"; break; + case V4L2_PIX_FMT_Y12P: descr = "12-bit Greyscale (MIPI Packed)"; break; case V4L2_PIX_FMT_IPU3_Y10: descr = "10-bit greyscale (IPU3 Packed)"; break; case V4L2_PIX_FMT_Y8I: descr = "Interleaved 8-bit Greyscale"; break; case V4L2_PIX_FMT_Y12I: descr = "Interleaved 12-bit Greyscale"; break; diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index a8015e5e7fa4..11ebf9b22ccb 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -598,6 +598,7 @@ struct v4l2_pix_format { /* Grey bit-packed formats */ #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ #define V4L2_PIX_FMT_Y10P v4l2_fourcc('Y', '1', '0', 'P') /* 10 Greyscale, MIPI RAW10 packed */ +#define V4L2_PIX_FMT_Y12P v4l2_fourcc('Y', '1', '2', 'P') /* 12 Greyscale, MIPI RAW12 packed */ #define V4L2_PIX_FMT_IPU3_Y10 v4l2_fourcc('i', 'p', '3', 'y') /* IPU3 packed 10-bit greyscale */ /* Palette formats */