From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Date: Thu, 21 Jan 2016 22:22:41 +0000 Subject: Re: [PATCH 2/3] v4l: Add YUV 4:2:2 and YUV 4:4:4 tri-planar non-contiguous formats Message-Id: <1525315.ufCbO0H8af@avalon> List-Id: References: <1452485264-11328-1-git-send-email-laurent.pinchart+renesas@ideasonboard.com> <1452485264-11328-3-git-send-email-laurent.pinchart+renesas@ideasonboard.com> In-Reply-To: <1452485264-11328-3-git-send-email-laurent.pinchart+renesas@ideasonboard.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Hans Verkuil Cc: linux-media@vger.kernel.org, linux-sh@vger.kernel.org Hi Hans, You've requested changes to the previous version of this patch (merging the YUV and YVU variants), could you review this one as well as patch 1/3 in this series ? On Monday 11 January 2016 06:07:43 Laurent Pinchart wrote: > The formats use three planes through the multiplanar API, allowing for > non-contiguous planes in memory. > > Signed-off-by: Laurent Pinchart > --- > Documentation/DocBook/media/v4l/pixfmt-yuv422m.xml | 166 ++++++++++++++++++ > Documentation/DocBook/media/v4l/pixfmt-yuv444m.xml | 177 ++++++++++++++++++ > Documentation/DocBook/media/v4l/pixfmt.xml | 2 + > drivers/media/v4l2-core/v4l2-ioctl.c | 4 + > include/uapi/linux/videodev2.h | 4 + > 5 files changed, 353 insertions(+) > create mode 100644 Documentation/DocBook/media/v4l/pixfmt-yuv422m.xml > create mode 100644 Documentation/DocBook/media/v4l/pixfmt-yuv444m.xml > > diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv422m.xml > b/Documentation/DocBook/media/v4l/pixfmt-yuv422m.xml new file mode 100644 > index 000000000000..dd502802cb75 > --- /dev/null > +++ b/Documentation/DocBook/media/v4l/pixfmt-yuv422m.xml > @@ -0,0 +1,166 @@ > + > + > + V4L2_PIX_FMT_YUV422M ('YM16'), V4L2_PIX_FMT_YVU422M > ('YM61') + &manvol; > + > + > + id="V4L2-PIX-FMT-YUV422M">V4L2_PIX_FMT_YUV422M e> + id="V4L2-PIX-FMT-YVU422M">V4L2_PIX_FMT_YVU422M e> + Planar formats with ½ horizontal resolution, also > + known as YUV and YVU 4:2:2 > + > + > + > + Description > + > + This is a multi-planar format, as opposed to a packed format. > +The three components are separated into three sub-images or planes. > + > + The Y plane is first. The Y plane has one byte per pixel. > +For V4L2_PIX_FMT_YUV422M the Cb data > +constitutes the second plane which is half the width of the Y plane (and of > the +image). Each Cb belongs to two pixels. For example, > +Cb0 belongs to Y'00, > +Y'01. The Cr data, just like the Cb plane, is > +in the third plane. > + > + V4L2_PIX_FMT_YVU422M is the same except > +the Cr data is stored in the second plane and the Cb data in the third > plane. + > + > + If the Y plane has pad bytes after each row, then the Cb > +and Cr planes have half as many pad bytes after their rows. In other > +words, two Cx rows (including padding) is exactly as long as one Y row > +(including padding). > + > + V4L2_PIX_FMT_YUV422M and > +V4L2_PIX_FMT_YVU422M are intended to be > +used only in drivers and applications that support the multi-planar API, > +described in . > + > + > + <constant>V4L2_PIX_FMT_YUV422M</constant> 4 × 4 > +pixel image > + > + > + Byte Order. > + Each cell is one byte. > + > + > + > + > + > + start0 + 0: > + Y'00 > + Y'01 > + Y'02 > + Y'03 > + > + > + start0 + 4: > + Y'10 > + Y'11 > + Y'12 > + Y'13 > + > + > + start0 + 8: > + Y'20 > + Y'21 > + Y'22 > + Y'23 > + > + > + start0 + 12: > + Y'30 > + Y'31 > + Y'32 > + Y'33 > + > + > + > + start1 + 0: > + Cb00 > + Cb01 > + > + > + start1 + 2: > + Cb10 > + Cb11 > + > + > + start1 + 4: > + Cb20 > + Cb21 > + > + > + start1 + 6: > + Cb30 > + Cb31 > + > + > + > + start2 + 0: > + Cr00 > + Cr01 > + > + > + start2 + 2: > + Cr10 > + Cr11 > + > + > + start2 + 4: > + Cr20 > + Cr21 > + > + > + start2 + 6: > + Cr30 > + Cr31 > + > + > + > + > + > + > + > + > + Color Sample Location. > + > + > + > + > + > + > + 01 > + 23 > + > + > + 0 > + YCY > + YCY > + > + > + 1 > + YCY > + YCY > + > + > + 2 > + YCY > + YCY > + > + > + 3 > + YCY > + YCY > + > + > + > + > + > + > + > + > + > diff --git a/Documentation/DocBook/media/v4l/pixfmt-yuv444m.xml > b/Documentation/DocBook/media/v4l/pixfmt-yuv444m.xml new file mode 100644 > index 000000000000..1b7335940bc7 > --- /dev/null > +++ b/Documentation/DocBook/media/v4l/pixfmt-yuv444m.xml > @@ -0,0 +1,177 @@ > + > + > + V4L2_PIX_FMT_YUV444M ('YM24'), V4L2_PIX_FMT_YVU444M > ('YM42') + &manvol; > + > + > + id="V4L2-PIX-FMT-YUV444M">V4L2_PIX_FMT_YUV444M e> + id="V4L2-PIX-FMT-YVU444M">V4L2_PIX_FMT_YVU444M e> + Planar formats with full horizontal resolution, also > + known as YUV and YVU 4:4:4 > + > + > + > + Description > + > + This is a multi-planar format, as opposed to a packed format. > +The three components are separated into three sub-images or planes. > + > + The Y plane is first. The Y plane has one byte per pixel. > +For V4L2_PIX_FMT_YUV444M the Cb data > +constitutes the second plane which is the same width and height as the Y > plane +(and as the image). The Cr data, just like the Cb plane, is in the > third plane. + > + > + V4L2_PIX_FMT_YVU444M is the same except > +the Cr data is stored in the second plane and the Cb data in the third > plane. + > + If the Y plane has pad bytes after each row, then the Cb > +and Cr planes have the same number of pad bytes after their rows. > + > + V4L2_PIX_FMT_YUV444M and > +V4L2_PIX_FMT_YUV444M are intended to be > +used only in drivers and applications that support the multi-planar API, > +described in . > + > + > + <constant>V4L2_PIX_FMT_YUV444M</constant> 4 × 4 > +pixel image > + > + > + Byte Order. > + Each cell is one byte. > + > + > + > + > + > + start0 + 0: > + Y'00 > + Y'01 > + Y'02 > + Y'03 > + > + > + start0 + 4: > + Y'10 > + Y'11 > + Y'12 > + Y'13 > + > + > + start0 + 8: > + Y'20 > + Y'21 > + Y'22 > + Y'23 > + > + > + start0 + 12: > + Y'30 > + Y'31 > + Y'32 > + Y'33 > + > + > + > + start1 + 0: > + Cb00 > + Cb01 > + Cb02 > + Cb03 > + > + > + start1 + 4: > + Cb10 > + Cb11 > + Cb12 > + Cb13 > + > + > + start1 + 8: > + Cb20 > + Cb21 > + Cb22 > + Cb23 > + > + > + start1 + 12: > + Cb20 > + Cb21 > + Cb32 > + Cb33 > + > + > + > + start2 + 0: > + Cr00 > + Cr01 > + Cr02 > + Cr03 > + > + > + start2 + 4: > + Cr10 > + Cr11 > + Cr12 > + Cr13 > + > + > + start2 + 8: > + Cr20 > + Cr21 > + Cr22 > + Cr23 > + > + > + start2 + 12: > + Cr30 > + Cr31 > + Cr32 > + Cr33 > + > + > + > + > + > + > + > + > + Color Sample Location. > + > + > + > + > + > + > + 01 > + 23 > + > + > + 0 > + YCYC > + YCYC > + > + > + 1 > + YCYC > + YCYC > + > + > + 2 > + YCYC > + YCYC > + > + > + 3 > + YCYC > + YCYC > + > + > + > + > + > + > + > + > + > diff --git a/Documentation/DocBook/media/v4l/pixfmt.xml > b/Documentation/DocBook/media/v4l/pixfmt.xml index > 9e77ff353feb..2f02f9441443 100644 > --- a/Documentation/DocBook/media/v4l/pixfmt.xml > +++ b/Documentation/DocBook/media/v4l/pixfmt.xml > @@ -1628,6 +1628,8 @@ information. > &sub-y41p; > &sub-yuv420; > &sub-yuv420m; > + &sub-yuv422m; > + &sub-yuv444m; > &sub-yuv410; > &sub-yuv422p; > &sub-yuv411p; > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c > b/drivers/media/v4l2-core/v4l2-ioctl.c index 8a018c6dd16a..14843090fd61 > 100644 > --- a/drivers/media/v4l2-core/v4l2-ioctl.c > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c > @@ -1191,6 +1191,10 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc > *fmt) case V4L2_PIX_FMT_NV12MT_16X16: descr = "Y/CbCr 4:2:0 (16x16 MB, > N-C)"; break; case V4L2_PIX_FMT_YUV420M: descr = "Planar YUV 4:2:0 (N- C)"; > break; case V4L2_PIX_FMT_YVU420M: descr = "Planar YVU 4:2:0 (N-C)"; break; > + case V4L2_PIX_FMT_YUV422M: descr = "Planar YUV 4:2:2 (N-C)"; break; > + case V4L2_PIX_FMT_YVU422M: descr = "Planar YVU 4:2:2 (N-C)"; break; > + case V4L2_PIX_FMT_YUV444M: descr = "Planar YUV 4:4:4 (N-C)"; break; > + case V4L2_PIX_FMT_YVU444M: descr = "Planar YVU 4:4:4 (N-C)"; break; case > V4L2_PIX_FMT_SBGGR8: descr = "8-bit Bayer BGBG/GRGR"; break; case > V4L2_PIX_FMT_SGBRG8: descr = "8-bit Bayer GBGB/RGRG"; break; case > V4L2_PIX_FMT_SGRBG8: descr = "8-bit Bayer GRGR/BGBG"; break; diff --git > a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index > 14cd5ebfee6d..466458422385 100644 > --- a/include/uapi/linux/videodev2.h > +++ b/include/uapi/linux/videodev2.h > @@ -546,6 +546,10 @@ struct v4l2_pix_format { > /* three non contiguous planes - Y, Cb, Cr */ > #define V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12 YUV420 > planar */ #define V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* > 12 YVU420 planar */ +#define V4L2_PIX_FMT_YUV422M v4l2_fourcc('Y', 'M', > '1', '6') /* 16 YUV422 planar */ +#define V4L2_PIX_FMT_YVU422M > v4l2_fourcc('Y', 'M', '6', '1') /* 16 YVU422 planar */ +#define > V4L2_PIX_FMT_YUV444M v4l2_fourcc('Y', 'M', '2', '4') /* 24 YUV444 planar > */ +#define V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2') /* 24 > YVU444 planar */ > > /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */ > #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') /* 8 BGBG.. > GRGR.. */ -- Regards, Laurent Pinchart