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 <laurent.pinchart+renesas@xxxxxxxxxxxxxxxx> > --- > 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></refnam > e> + <refname > id="V4L2-PIX-FMT-YVU422M"><constant>V4L2_PIX_FMT_YVU422M</constant></refnam > e> + <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></refnam > e> + <refname > id="V4L2-PIX-FMT-YVU444M"><constant>V4L2_PIX_FMT_YVU444M</constant></refnam > e> + <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.. */ -- Regards, Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html