Message ID | 568efbd75290e286b8ad9e7347b5f43745121020.camel@intel.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Add luma 16-bit interlaced pixel format | expand |
Hi Dmitry, Thank you for the patch. On Mon, Aug 26, 2024 at 04:04:23PM +0300, Dmitry Perchanov wrote: > The formats added by this patch are: > > V4L2_PIX_FMT_Y16I > > Interlaced lumina format primary use in RealSense > Depth cameras with stereo stream for left and right > image sensors. > > Signed-off-by: Dmitry Perchanov <dmitry.perchanov@intel.com> > --- > .../userspace-api/media/v4l/pixfmt-y16i.rst | 74 +++++++++++++++++++ > .../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, 77 insertions(+) > create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y16i.rst > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y16i.rst b/Documentation/userspace-api/media/v4l/pixfmt-y16i.rst > new file mode 100644 > index 000000000000..fe4f441cd63c > --- /dev/null > +++ b/Documentation/userspace-api/media/v4l/pixfmt-y16i.rst > @@ -0,0 +1,74 @@ > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later > + > +.. _V4L2-PIX-FMT-Y16I: > + > +************************** > +V4L2_PIX_FMT_Y16I ('Y16I') > +************************** > + > +Interleaved grey-scale image, e.g. from a stereo-pair > + > + > +Description > +=========== > + > +This is a grey-scale image with a depth of 16 bits per pixel, but with > +pixels from 2 sources interleaved and unpacked. Each pixel is stored > +in a 16-bit word in the little-endian order. > +The first pixel is from the left source. You can reflow this to 80 columns: This is a grey-scale image with a depth of 16 bits per pixel, but with pixels from 2 sources interleaved and unpacked. Each pixel is stored in a 16-bit word in the little-endian order. The first pixel is from the left source. With this, Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> I can make that change locally, no need to send a new version just for this. > + > +**Pixel unpacked representation.** > +Left/Right pixels 16-bit unpacked - 16-bit for each interleaved pixel. > + > +.. flat-table:: > + :header-rows: 0 > + :stub-columns: 0 > + > + * - Y'\ :sub:`0L[7:0]` > + - Y'\ :sub:`0L[15:8]` > + - Y'\ :sub:`0R[7:0]` > + - Y'\ :sub:`0R[15:8]` > + > +**Byte Order.** > +Each cell is one byte. > + > +.. flat-table:: > + :header-rows: 0 > + :stub-columns: 0 > + > + * - start + 0: > + - Y'\ :sub:`00Llow` > + - Y'\ :sub:`00Lhigh` > + - Y'\ :sub:`00Rlow` > + - Y'\ :sub:`00Rhigh` > + - Y'\ :sub:`01Llow` > + - Y'\ :sub:`01Lhigh` > + - Y'\ :sub:`01Rlow` > + - Y'\ :sub:`01Rhigh` > + * - start + 8: > + - Y'\ :sub:`10Llow` > + - Y'\ :sub:`10Lhigh` > + - Y'\ :sub:`10Rlow` > + - Y'\ :sub:`10Rhigh` > + - Y'\ :sub:`11Llow` > + - Y'\ :sub:`11Lhigh` > + - Y'\ :sub:`11Rlow` > + - Y'\ :sub:`11Rhigh` > + * - start + 16: > + - Y'\ :sub:`20Llow` > + - Y'\ :sub:`20Lhigh` > + - Y'\ :sub:`20Rlow` > + - Y'\ :sub:`20Rhigh` > + - Y'\ :sub:`21Llow` > + - Y'\ :sub:`21Lhigh` > + - Y'\ :sub:`21Rlow` > + - Y'\ :sub:`21Rhigh` > + * - start + 24: > + - Y'\ :sub:`30Llow` > + - Y'\ :sub:`30Lhigh` > + - Y'\ :sub:`30Rlow` > + - Y'\ :sub:`30Rhigh` > + - Y'\ :sub:`31Llow` > + - Y'\ :sub:`31Lhigh` > + - Y'\ :sub:`31Rlow` > + - Y'\ :sub:`31Rhigh` > diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst > index 24b34cdfa6fe..78ee406d7647 100644 > --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst > +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst > @@ -269,5 +269,6 @@ image. > pixfmt-yuv-luma > pixfmt-y8i > pixfmt-y12i > + pixfmt-y16i > pixfmt-uv8 > pixfmt-m420 > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c > index 5eb4d797d259..4fffa5739895 100644 > --- a/drivers/media/v4l2-core/v4l2-ioctl.c > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c > @@ -1327,6 +1327,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) > case V4L2_PIX_FMT_Y14P: descr = "14-bit Greyscale (MIPI Packed)"; break; > case V4L2_PIX_FMT_Y8I: descr = "Interleaved 8-bit Greyscale"; break; > case V4L2_PIX_FMT_Y12I: descr = "Interleaved 12-bit Greyscale"; break; > + case V4L2_PIX_FMT_Y16I: descr = "Interleaved 16-bit Greyscale"; break; > case V4L2_PIX_FMT_Z16: descr = "16-bit Depth"; break; > case V4L2_PIX_FMT_INZI: descr = "Planar 10:16 Greyscale Depth"; break; > case V4L2_PIX_FMT_CNF4: descr = "4-bit Depth Confidence (Packed)"; break; > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > index 4e91362da6da..46f616e43ad6 100644 > --- a/include/uapi/linux/videodev2.h > +++ b/include/uapi/linux/videodev2.h > @@ -797,6 +797,7 @@ struct v4l2_pix_format { > #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */ > #define V4L2_PIX_FMT_Y8I v4l2_fourcc('Y', '8', 'I', ' ') /* Greyscale 8-bit L/R interleaved */ > #define V4L2_PIX_FMT_Y12I v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */ > +#define V4L2_PIX_FMT_Y16I v4l2_fourcc('Y', '1', '6', 'I') /* Greyscale 16-bit L/R interleaved */ > #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */ > #define V4L2_PIX_FMT_MT21C v4l2_fourcc('M', 'T', '2', '1') /* Mediatek compressed block mode */ > #define V4L2_PIX_FMT_MM21 v4l2_fourcc('M', 'M', '2', '1') /* Mediatek 8-bit block mode, two non-contiguous planes */
Hi, just cosmetic comment. Le lundi 26 août 2024 à 16:04 +0300, Dmitry Perchanov a écrit : > The formats added by this patch are: > > V4L2_PIX_FMT_Y16I > > Interlaced lumina format primary use in RealSense Here we specify the format as interlaced ... > Depth cameras with stereo stream for left and right > image sensors. > > Signed-off-by: Dmitry Perchanov <dmitry.perchanov@intel.com> > --- > .../userspace-api/media/v4l/pixfmt-y16i.rst | 74 +++++++++++++++++++ > .../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, 77 insertions(+) > create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y16i.rst > > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y16i.rst b/Documentation/userspace-api/media/v4l/pixfmt-y16i.rst > new file mode 100644 > index 000000000000..fe4f441cd63c > --- /dev/null > +++ b/Documentation/userspace-api/media/v4l/pixfmt-y16i.rst > @@ -0,0 +1,74 @@ > +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later > + > +.. _V4L2-PIX-FMT-Y16I: > + > +************************** > +V4L2_PIX_FMT_Y16I ('Y16I') > +************************** > + > +Interleaved grey-scale image, e.g. from a stereo-pair > + > + > +Description > +=========== > + > +This is a grey-scale image with a depth of 16 bits per pixel, but with > +pixels from 2 sources interleaved and unpacked. Each pixel is stored ... But document it as interleaved. Id unify the wording as interleaved everywhere if you don't mind. My weak argument is that interlaced is largely used in the media subsystem to refer to the technique of passing half the image data, alternating between top and bottom field. In that context, we then use interleave to describe on method of line/field storage (we also have sequential and alternate method supported). Nicolas > +in a 16-bit word in the little-endian order. > +The first pixel is from the left source. > + > +**Pixel unpacked representation.** > +Left/Right pixels 16-bit unpacked - 16-bit for each interleaved pixel. > + > +.. flat-table:: > + :header-rows: 0 > + :stub-columns: 0 > + > + * - Y'\ :sub:`0L[7:0]` > + - Y'\ :sub:`0L[15:8]` > + - Y'\ :sub:`0R[7:0]` > + - Y'\ :sub:`0R[15:8]` > + > +**Byte Order.** > +Each cell is one byte. > + > +.. flat-table:: > + :header-rows: 0 > + :stub-columns: 0 > + > + * - start + 0: > + - Y'\ :sub:`00Llow` > + - Y'\ :sub:`00Lhigh` > + - Y'\ :sub:`00Rlow` > + - Y'\ :sub:`00Rhigh` > + - Y'\ :sub:`01Llow` > + - Y'\ :sub:`01Lhigh` > + - Y'\ :sub:`01Rlow` > + - Y'\ :sub:`01Rhigh` > + * - start + 8: > + - Y'\ :sub:`10Llow` > + - Y'\ :sub:`10Lhigh` > + - Y'\ :sub:`10Rlow` > + - Y'\ :sub:`10Rhigh` > + - Y'\ :sub:`11Llow` > + - Y'\ :sub:`11Lhigh` > + - Y'\ :sub:`11Rlow` > + - Y'\ :sub:`11Rhigh` > + * - start + 16: > + - Y'\ :sub:`20Llow` > + - Y'\ :sub:`20Lhigh` > + - Y'\ :sub:`20Rlow` > + - Y'\ :sub:`20Rhigh` > + - Y'\ :sub:`21Llow` > + - Y'\ :sub:`21Lhigh` > + - Y'\ :sub:`21Rlow` > + - Y'\ :sub:`21Rhigh` > + * - start + 24: > + - Y'\ :sub:`30Llow` > + - Y'\ :sub:`30Lhigh` > + - Y'\ :sub:`30Rlow` > + - Y'\ :sub:`30Rhigh` > + - Y'\ :sub:`31Llow` > + - Y'\ :sub:`31Lhigh` > + - Y'\ :sub:`31Rlow` > + - Y'\ :sub:`31Rhigh` > diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst > index 24b34cdfa6fe..78ee406d7647 100644 > --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst > +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst > @@ -269,5 +269,6 @@ image. > pixfmt-yuv-luma > pixfmt-y8i > pixfmt-y12i > + pixfmt-y16i > pixfmt-uv8 > pixfmt-m420 > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c > index 5eb4d797d259..4fffa5739895 100644 > --- a/drivers/media/v4l2-core/v4l2-ioctl.c > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c > @@ -1327,6 +1327,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) > case V4L2_PIX_FMT_Y14P: descr = "14-bit Greyscale (MIPI Packed)"; break; > case V4L2_PIX_FMT_Y8I: descr = "Interleaved 8-bit Greyscale"; break; > case V4L2_PIX_FMT_Y12I: descr = "Interleaved 12-bit Greyscale"; break; > + case V4L2_PIX_FMT_Y16I: descr = "Interleaved 16-bit Greyscale"; break; > case V4L2_PIX_FMT_Z16: descr = "16-bit Depth"; break; > case V4L2_PIX_FMT_INZI: descr = "Planar 10:16 Greyscale Depth"; break; > case V4L2_PIX_FMT_CNF4: descr = "4-bit Depth Confidence (Packed)"; break; > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > index 4e91362da6da..46f616e43ad6 100644 > --- a/include/uapi/linux/videodev2.h > +++ b/include/uapi/linux/videodev2.h > @@ -797,6 +797,7 @@ struct v4l2_pix_format { > #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */ > #define V4L2_PIX_FMT_Y8I v4l2_fourcc('Y', '8', 'I', ' ') /* Greyscale 8-bit L/R interleaved */ > #define V4L2_PIX_FMT_Y12I v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */ > +#define V4L2_PIX_FMT_Y16I v4l2_fourcc('Y', '1', '6', 'I') /* Greyscale 16-bit L/R interleaved */ > #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */ > #define V4L2_PIX_FMT_MT21C v4l2_fourcc('M', 'T', '2', '1') /* Mediatek compressed block mode */ > #define V4L2_PIX_FMT_MM21 v4l2_fourcc('M', 'M', '2', '1') /* Mediatek 8-bit block mode, two non-contiguous planes */
diff --git a/Documentation/userspace-api/media/v4l/pixfmt-y16i.rst b/Documentation/userspace-api/media/v4l/pixfmt-y16i.rst new file mode 100644 index 000000000000..fe4f441cd63c --- /dev/null +++ b/Documentation/userspace-api/media/v4l/pixfmt-y16i.rst @@ -0,0 +1,74 @@ +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later + +.. _V4L2-PIX-FMT-Y16I: + +************************** +V4L2_PIX_FMT_Y16I ('Y16I') +************************** + +Interleaved grey-scale image, e.g. from a stereo-pair + + +Description +=========== + +This is a grey-scale image with a depth of 16 bits per pixel, but with +pixels from 2 sources interleaved and unpacked. Each pixel is stored +in a 16-bit word in the little-endian order. +The first pixel is from the left source. + +**Pixel unpacked representation.** +Left/Right pixels 16-bit unpacked - 16-bit for each interleaved pixel. + +.. flat-table:: + :header-rows: 0 + :stub-columns: 0 + + * - Y'\ :sub:`0L[7:0]` + - Y'\ :sub:`0L[15:8]` + - Y'\ :sub:`0R[7:0]` + - Y'\ :sub:`0R[15:8]` + +**Byte Order.** +Each cell is one byte. + +.. flat-table:: + :header-rows: 0 + :stub-columns: 0 + + * - start + 0: + - Y'\ :sub:`00Llow` + - Y'\ :sub:`00Lhigh` + - Y'\ :sub:`00Rlow` + - Y'\ :sub:`00Rhigh` + - Y'\ :sub:`01Llow` + - Y'\ :sub:`01Lhigh` + - Y'\ :sub:`01Rlow` + - Y'\ :sub:`01Rhigh` + * - start + 8: + - Y'\ :sub:`10Llow` + - Y'\ :sub:`10Lhigh` + - Y'\ :sub:`10Rlow` + - Y'\ :sub:`10Rhigh` + - Y'\ :sub:`11Llow` + - Y'\ :sub:`11Lhigh` + - Y'\ :sub:`11Rlow` + - Y'\ :sub:`11Rhigh` + * - start + 16: + - Y'\ :sub:`20Llow` + - Y'\ :sub:`20Lhigh` + - Y'\ :sub:`20Rlow` + - Y'\ :sub:`20Rhigh` + - Y'\ :sub:`21Llow` + - Y'\ :sub:`21Lhigh` + - Y'\ :sub:`21Rlow` + - Y'\ :sub:`21Rhigh` + * - start + 24: + - Y'\ :sub:`30Llow` + - Y'\ :sub:`30Lhigh` + - Y'\ :sub:`30Rlow` + - Y'\ :sub:`30Rhigh` + - Y'\ :sub:`31Llow` + - Y'\ :sub:`31Lhigh` + - Y'\ :sub:`31Rlow` + - Y'\ :sub:`31Rhigh` diff --git a/Documentation/userspace-api/media/v4l/yuv-formats.rst b/Documentation/userspace-api/media/v4l/yuv-formats.rst index 24b34cdfa6fe..78ee406d7647 100644 --- a/Documentation/userspace-api/media/v4l/yuv-formats.rst +++ b/Documentation/userspace-api/media/v4l/yuv-formats.rst @@ -269,5 +269,6 @@ image. pixfmt-yuv-luma pixfmt-y8i pixfmt-y12i + pixfmt-y16i pixfmt-uv8 pixfmt-m420 diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c index 5eb4d797d259..4fffa5739895 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -1327,6 +1327,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) case V4L2_PIX_FMT_Y14P: descr = "14-bit Greyscale (MIPI Packed)"; break; case V4L2_PIX_FMT_Y8I: descr = "Interleaved 8-bit Greyscale"; break; case V4L2_PIX_FMT_Y12I: descr = "Interleaved 12-bit Greyscale"; break; + case V4L2_PIX_FMT_Y16I: descr = "Interleaved 16-bit Greyscale"; break; case V4L2_PIX_FMT_Z16: descr = "16-bit Depth"; break; case V4L2_PIX_FMT_INZI: descr = "Planar 10:16 Greyscale Depth"; break; case V4L2_PIX_FMT_CNF4: descr = "4-bit Depth Confidence (Packed)"; break; diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index 4e91362da6da..46f616e43ad6 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -797,6 +797,7 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */ #define V4L2_PIX_FMT_Y8I v4l2_fourcc('Y', '8', 'I', ' ') /* Greyscale 8-bit L/R interleaved */ #define V4L2_PIX_FMT_Y12I v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */ +#define V4L2_PIX_FMT_Y16I v4l2_fourcc('Y', '1', '6', 'I') /* Greyscale 16-bit L/R interleaved */ #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */ #define V4L2_PIX_FMT_MT21C v4l2_fourcc('M', 'T', '2', '1') /* Mediatek compressed block mode */ #define V4L2_PIX_FMT_MM21 v4l2_fourcc('M', 'M', '2', '1') /* Mediatek 8-bit block mode, two non-contiguous planes */
The formats added by this patch are: V4L2_PIX_FMT_Y16I Interlaced lumina format primary use in RealSense Depth cameras with stereo stream for left and right image sensors. Signed-off-by: Dmitry Perchanov <dmitry.perchanov@intel.com> --- .../userspace-api/media/v4l/pixfmt-y16i.rst | 74 +++++++++++++++++++ .../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, 77 insertions(+) create mode 100644 Documentation/userspace-api/media/v4l/pixfmt-y16i.rst