From: Hans Verkuil <hverkuil@xs4all.nl>
To: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>,
linux-media@vger.kernel.org
Cc: linux-sh@vger.kernel.org
Subject: Re: [PATCH 2/3] v4l: Add YUV 4:2:2 and YUV 4:4:4 tri-planar non-contiguous formats
Date: Fri, 22 Jan 2016 12:22:27 +0000 [thread overview]
Message-ID: <56A21F03.4080709@xs4all.nl> (raw)
In-Reply-To: <1452485264-11328-3-git-send-email-laurent.pinchart+renesas@ideasonboard.com>
On 01/11/2016 05:07 AM, Laurent Pinchart wrote:
> The formats use three planes through the multiplanar API, allowing for
> non-contiguous planes in memory.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Thanks!
Hans
> ---
> 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 @@
> + <refentry>
> + <refmeta>
> + <refentrytitle>V4L2_PIX_FMT_YUV422M ('YM16'), V4L2_PIX_FMT_YVU422M ('YM61')</refentrytitle>
> + &manvol;
> + </refmeta>
> + <refnamediv>
> + <refname id="V4L2-PIX-FMT-YUV422M"><constant>V4L2_PIX_FMT_YUV422M</constant></refname>
> + <refname id="V4L2-PIX-FMT-YVU422M"><constant>V4L2_PIX_FMT_YVU422M</constant></refname>
> + <refpurpose>Planar formats with ½ horizontal resolution, also
> + known as YUV and YVU 4:2:2</refpurpose>
> + </refnamediv>
> +
> + <refsect1>
> + <title>Description</title>
> +
> + <para>This is a multi-planar format, as opposed to a packed format.
> +The three components are separated into three sub-images or planes.</para>
> +
> + <para>The Y plane is first. The Y plane has one byte per pixel.
> +For <constant>V4L2_PIX_FMT_YUV422M</constant> 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,
> +Cb<subscript>0</subscript> belongs to Y'<subscript>00</subscript>,
> +Y'<subscript>01</subscript>. The Cr data, just like the Cb plane, is
> +in the third plane. </para>
> +
> + <para><constant>V4L2_PIX_FMT_YVU422M</constant> is the same except
> +the Cr data is stored in the second plane and the Cb data in the third plane.
> +</para>
> +
> + <para>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).</para>
> +
> + <para><constant>V4L2_PIX_FMT_YUV422M</constant> and
> +<constant>V4L2_PIX_FMT_YVU422M</constant> are intended to be
> +used only in drivers and applications that support the multi-planar API,
> +described in <xref linkend="planar-apis"/>. </para>
> +
> + <example>
> + <title><constant>V4L2_PIX_FMT_YUV422M</constant> 4 × 4
> +pixel image</title>
> +
> + <formalpara>
> + <title>Byte Order.</title>
> + <para>Each cell is one byte.
> + <informaltable frame="none">
> + <tgroup cols="5" align="center">
> + <colspec align="left" colwidth="2*" />
> + <tbody valign="top">
> + <row>
> + <entry>start0 + 0:</entry>
> + <entry>Y'<subscript>00</subscript></entry>
> + <entry>Y'<subscript>01</subscript></entry>
> + <entry>Y'<subscript>02</subscript></entry>
> + <entry>Y'<subscript>03</subscript></entry>
> + </row>
> + <row>
> + <entry>start0 + 4:</entry>
> + <entry>Y'<subscript>10</subscript></entry>
> + <entry>Y'<subscript>11</subscript></entry>
> + <entry>Y'<subscript>12</subscript></entry>
> + <entry>Y'<subscript>13</subscript></entry>
> + </row>
> + <row>
> + <entry>start0 + 8:</entry>
> + <entry>Y'<subscript>20</subscript></entry>
> + <entry>Y'<subscript>21</subscript></entry>
> + <entry>Y'<subscript>22</subscript></entry>
> + <entry>Y'<subscript>23</subscript></entry>
> + </row>
> + <row>
> + <entry>start0 + 12:</entry>
> + <entry>Y'<subscript>30</subscript></entry>
> + <entry>Y'<subscript>31</subscript></entry>
> + <entry>Y'<subscript>32</subscript></entry>
> + <entry>Y'<subscript>33</subscript></entry>
> + </row>
> + <row><entry></entry></row>
> + <row>
> + <entry>start1 + 0:</entry>
> + <entry>Cb<subscript>00</subscript></entry>
> + <entry>Cb<subscript>01</subscript></entry>
> + </row>
> + <row>
> + <entry>start1 + 2:</entry>
> + <entry>Cb<subscript>10</subscript></entry>
> + <entry>Cb<subscript>11</subscript></entry>
> + </row>
> + <row>
> + <entry>start1 + 4:</entry>
> + <entry>Cb<subscript>20</subscript></entry>
> + <entry>Cb<subscript>21</subscript></entry>
> + </row>
> + <row>
> + <entry>start1 + 6:</entry>
> + <entry>Cb<subscript>30</subscript></entry>
> + <entry>Cb<subscript>31</subscript></entry>
> + </row>
> + <row><entry></entry></row>
> + <row>
> + <entry>start2 + 0:</entry>
> + <entry>Cr<subscript>00</subscript></entry>
> + <entry>Cr<subscript>01</subscript></entry>
> + </row>
> + <row>
> + <entry>start2 + 2:</entry>
> + <entry>Cr<subscript>10</subscript></entry>
> + <entry>Cr<subscript>11</subscript></entry>
> + </row>
> + <row>
> + <entry>start2 + 4:</entry>
> + <entry>Cr<subscript>20</subscript></entry>
> + <entry>Cr<subscript>21</subscript></entry>
> + </row>
> + <row>
> + <entry>start2 + 6:</entry>
> + <entry>Cr<subscript>30</subscript></entry>
> + <entry>Cr<subscript>31</subscript></entry>
> + </row>
> + </tbody>
> + </tgroup>
> + </informaltable>
> + </para>
> + </formalpara>
> +
> + <formalpara>
> + <title>Color Sample Location.</title>
> + <para>
> + <informaltable frame="none">
> + <tgroup cols="7" align="center">
> + <tbody valign="top">
> + <row>
> + <entry></entry>
> + <entry>0</entry><entry></entry><entry>1</entry><entry></entry>
> + <entry>2</entry><entry></entry><entry>3</entry>
> + </row>
> + <row>
> + <entry>0</entry>
> + <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry>
> + <entry>Y</entry><entry>C</entry><entry>Y</entry>
> + </row>
> + <row>
> + <entry>1</entry>
> + <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry>
> + <entry>Y</entry><entry>C</entry><entry>Y</entry>
> + </row>
> + <row>
> + <entry>2</entry>
> + <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry>
> + <entry>Y</entry><entry>C</entry><entry>Y</entry>
> + </row>
> + <row>
> + <entry>3</entry>
> + <entry>Y</entry><entry>C</entry><entry>Y</entry><entry></entry>
> + <entry>Y</entry><entry>C</entry><entry>Y</entry>
> + </row>
> + </tbody>
> + </tgroup>
> + </informaltable>
> + </para>
> + </formalpara>
> + </example>
> + </refsect1>
> + </refentry>
> 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 @@
> + <refentry>
> + <refmeta>
> + <refentrytitle>V4L2_PIX_FMT_YUV444M ('YM24'), V4L2_PIX_FMT_YVU444M ('YM42')</refentrytitle>
> + &manvol;
> + </refmeta>
> + <refnamediv>
> + <refname id="V4L2-PIX-FMT-YUV444M"><constant>V4L2_PIX_FMT_YUV444M</constant></refname>
> + <refname id="V4L2-PIX-FMT-YVU444M"><constant>V4L2_PIX_FMT_YVU444M</constant></refname>
> + <refpurpose>Planar formats with full horizontal resolution, also
> + known as YUV and YVU 4:4:4</refpurpose>
> + </refnamediv>
> +
> + <refsect1>
> + <title>Description</title>
> +
> + <para>This is a multi-planar format, as opposed to a packed format.
> +The three components are separated into three sub-images or planes.</para>
> +
> + <para>The Y plane is first. The Y plane has one byte per pixel.
> +For <constant>V4L2_PIX_FMT_YUV444M</constant> 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.
> +</para>
> +
> + <para><constant>V4L2_PIX_FMT_YVU444M</constant> is the same except
> +the Cr data is stored in the second plane and the Cb data in the third plane.
> +</para>
> + <para>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.</para>
> +
> + <para><constant>V4L2_PIX_FMT_YUV444M</constant> and
> +<constant>V4L2_PIX_FMT_YUV444M</constant> are intended to be
> +used only in drivers and applications that support the multi-planar API,
> +described in <xref linkend="planar-apis"/>. </para>
> +
> + <example>
> + <title><constant>V4L2_PIX_FMT_YUV444M</constant> 4 × 4
> +pixel image</title>
> +
> + <formalpara>
> + <title>Byte Order.</title>
> + <para>Each cell is one byte.
> + <informaltable frame="none">
> + <tgroup cols="5" align="center">
> + <colspec align="left" colwidth="2*" />
> + <tbody valign="top">
> + <row>
> + <entry>start0 + 0:</entry>
> + <entry>Y'<subscript>00</subscript></entry>
> + <entry>Y'<subscript>01</subscript></entry>
> + <entry>Y'<subscript>02</subscript></entry>
> + <entry>Y'<subscript>03</subscript></entry>
> + </row>
> + <row>
> + <entry>start0 + 4:</entry>
> + <entry>Y'<subscript>10</subscript></entry>
> + <entry>Y'<subscript>11</subscript></entry>
> + <entry>Y'<subscript>12</subscript></entry>
> + <entry>Y'<subscript>13</subscript></entry>
> + </row>
> + <row>
> + <entry>start0 + 8:</entry>
> + <entry>Y'<subscript>20</subscript></entry>
> + <entry>Y'<subscript>21</subscript></entry>
> + <entry>Y'<subscript>22</subscript></entry>
> + <entry>Y'<subscript>23</subscript></entry>
> + </row>
> + <row>
> + <entry>start0 + 12:</entry>
> + <entry>Y'<subscript>30</subscript></entry>
> + <entry>Y'<subscript>31</subscript></entry>
> + <entry>Y'<subscript>32</subscript></entry>
> + <entry>Y'<subscript>33</subscript></entry>
> + </row>
> + <row><entry></entry></row>
> + <row>
> + <entry>start1 + 0:</entry>
> + <entry>Cb<subscript>00</subscript></entry>
> + <entry>Cb<subscript>01</subscript></entry>
> + <entry>Cb<subscript>02</subscript></entry>
> + <entry>Cb<subscript>03</subscript></entry>
> + </row>
> + <row>
> + <entry>start1 + 4:</entry>
> + <entry>Cb<subscript>10</subscript></entry>
> + <entry>Cb<subscript>11</subscript></entry>
> + <entry>Cb<subscript>12</subscript></entry>
> + <entry>Cb<subscript>13</subscript></entry>
> + </row>
> + <row>
> + <entry>start1 + 8:</entry>
> + <entry>Cb<subscript>20</subscript></entry>
> + <entry>Cb<subscript>21</subscript></entry>
> + <entry>Cb<subscript>22</subscript></entry>
> + <entry>Cb<subscript>23</subscript></entry>
> + </row>
> + <row>
> + <entry>start1 + 12:</entry>
> + <entry>Cb<subscript>20</subscript></entry>
> + <entry>Cb<subscript>21</subscript></entry>
> + <entry>Cb<subscript>32</subscript></entry>
> + <entry>Cb<subscript>33</subscript></entry>
> + </row>
> + <row><entry></entry></row>
> + <row>
> + <entry>start2 + 0:</entry>
> + <entry>Cr<subscript>00</subscript></entry>
> + <entry>Cr<subscript>01</subscript></entry>
> + <entry>Cr<subscript>02</subscript></entry>
> + <entry>Cr<subscript>03</subscript></entry>
> + </row>
> + <row>
> + <entry>start2 + 4:</entry>
> + <entry>Cr<subscript>10</subscript></entry>
> + <entry>Cr<subscript>11</subscript></entry>
> + <entry>Cr<subscript>12</subscript></entry>
> + <entry>Cr<subscript>13</subscript></entry>
> + </row>
> + <row>
> + <entry>start2 + 8:</entry>
> + <entry>Cr<subscript>20</subscript></entry>
> + <entry>Cr<subscript>21</subscript></entry>
> + <entry>Cr<subscript>22</subscript></entry>
> + <entry>Cr<subscript>23</subscript></entry>
> + </row>
> + <row>
> + <entry>start2 + 12:</entry>
> + <entry>Cr<subscript>30</subscript></entry>
> + <entry>Cr<subscript>31</subscript></entry>
> + <entry>Cr<subscript>32</subscript></entry>
> + <entry>Cr<subscript>33</subscript></entry>
> + </row>
> + </tbody>
> + </tgroup>
> + </informaltable>
> + </para>
> + </formalpara>
> +
> + <formalpara>
> + <title>Color Sample Location.</title>
> + <para>
> + <informaltable frame="none">
> + <tgroup cols="7" align="center">
> + <tbody valign="top">
> + <row>
> + <entry></entry>
> + <entry>0</entry><entry></entry><entry>1</entry><entry></entry>
> + <entry>2</entry><entry></entry><entry>3</entry>
> + </row>
> + <row>
> + <entry>0</entry>
> + <entry>YC</entry><entry></entry><entry>YC</entry><entry></entry>
> + <entry>YC</entry><entry></entry><entry>YC</entry>
> + </row>
> + <row>
> + <entry>1</entry>
> + <entry>YC</entry><entry></entry><entry>YC</entry><entry></entry>
> + <entry>YC</entry><entry></entry><entry>YC</entry>
> + </row>
> + <row>
> + <entry>2</entry>
> + <entry>YC</entry><entry></entry><entry>YC</entry><entry></entry>
> + <entry>YC</entry><entry></entry><entry>YC</entry>
> + </row>
> + <row>
> + <entry>3</entry>
> + <entry>YC</entry><entry></entry><entry>YC</entry><entry></entry>
> + <entry>YC</entry><entry></entry><entry>YC</entry>
> + </row>
> + </tbody>
> + </tgroup>
> + </informaltable>
> + </para>
> + </formalpara>
> + </example>
> + </refsect1>
> + </refentry>
> 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.</para>
> &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.. */
>
next prev parent reply other threads:[~2016-01-22 12:22 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-11 4:07 [PATCH 0/3] VSP1: Add support for tri-planar memory formats Laurent Pinchart
2016-01-11 4:07 ` [PATCH 1/3] v4l: Merge the YUV and YVU 4:2:0 tri-planar non-contiguous formats docs Laurent Pinchart
2016-01-22 12:22 ` Hans Verkuil
2016-01-11 4:07 ` [PATCH 2/3] v4l: Add YUV 4:2:2 and YUV 4:4:4 tri-planar non-contiguous formats Laurent Pinchart
2016-01-21 22:22 ` Laurent Pinchart
2016-01-22 12:22 ` Hans Verkuil [this message]
2016-01-11 4:07 ` [PATCH 3/3] v4l: vsp1: Add tri-planar memory formats support Laurent Pinchart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56A21F03.4080709@xs4all.nl \
--to=hverkuil@xs4all.nl \
--cc=laurent.pinchart+renesas@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).