diff mbox

[v3,4/5] v4l: Add V4L2_PIX_FMT_NV16M and V4L2_PIX_FMT_NV61M formats

Message ID 1374757213-20194-5-git-send-email-laurent.pinchart@ideasonboard.com (mailing list archive)
State New, archived
Headers show

Commit Message

Laurent Pinchart July 25, 2013, 1 p.m. UTC
From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

NV16M and NV61M are planar YCbCr 4:2:2 and YCrCb 4:2:2 formats with a
luma plane followed by an interleaved chroma plane. The planes are not
required to be contiguous in memory, and the formats can only be used
with the multi-planar formats API.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
---
 Documentation/DocBook/media/v4l/pixfmt-nv16m.xml | 170 +++++++++++++++++++++++
 Documentation/DocBook/media/v4l/pixfmt.xml       |   1 +
 include/uapi/linux/videodev2.h                   |   2 +
 3 files changed, 173 insertions(+)
 create mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv16m.xml

Comments

sakari.ailus@iki.fi July 30, 2013, 11:09 a.m. UTC | #1
On Thu, Jul 25, 2013 at 03:00:12PM +0200, Laurent Pinchart wrote:
> From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> 
> NV16M and NV61M are planar YCbCr 4:2:2 and YCrCb 4:2:2 formats with a
> luma plane followed by an interleaved chroma plane. The planes are not
> required to be contiguous in memory, and the formats can only be used
> with the multi-planar formats API.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> ---
>  Documentation/DocBook/media/v4l/pixfmt-nv16m.xml | 170 +++++++++++++++++++++++
>  Documentation/DocBook/media/v4l/pixfmt.xml       |   1 +
>  include/uapi/linux/videodev2.h                   |   2 +
>  3 files changed, 173 insertions(+)
>  create mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv16m.xml
> 
> diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml b/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml
> new file mode 100644
> index 0000000..84a8bb3
> --- /dev/null
> +++ b/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml
> @@ -0,0 +1,170 @@
> +    <refentry>
> +      <refmeta>
> +	<refentrytitle>V4L2_PIX_FMT_NV16M ('NM16'), V4L2_PIX_FMT_NV61M ('NM61')</refentrytitle>
> +	&manvol;
> +      </refmeta>
> +      <refnamediv>
> +	<refname id="V4L2-PIX-FMT-NV16M"><constant>V4L2_PIX_FMT_NV16M</constant></refname>
> +	<refname id="V4L2-PIX-FMT-NV61M"><constant>V4L2_PIX_FMT_NV61M</constant></refname>
> +	<refpurpose>Variation of <constant>V4L2_PIX_FMT_NV16</constant> and <constant>V4L2_PIX_FMT_NV61</constant> with planes
> +	  non contiguous in memory. </refpurpose>
> +      </refnamediv>
> +      <refsect1>
> +	<title>Description</title>
> +
> +	<para>This is a multi-planar, two-plane version of the YUV 4:2:0 format.
> +The three components are separated into two sub-images or planes.
> +<constant>V4L2_PIX_FMT_NV16M</constant> differs from <constant>V4L2_PIX_FMT_NV16
> +</constant> in that the two planes are non-contiguous in memory, i.e. the chroma
> +plane do not necessarily immediately follows the luma plane.
> +The luminance data occupies the first plane. The Y plane has one byte per pixel.
> +In the second plane there is a chrominance data with alternating chroma samples.
> +The CbCr plane is the same width and height, in bytes, as the Y plane.
> +Each CbCr pair belongs to four pixels. For example,
> +Cb<subscript>0</subscript>/Cr<subscript>0</subscript> belongs to
> +Y'<subscript>00</subscript>, Y'<subscript>01</subscript>,
> +Y'<subscript>10</subscript>, Y'<subscript>11</subscript>.
> +<constant>V4L2_PIX_FMT_NV61M</constant> is the same as <constant>V4L2_PIX_FMT_NV16M</constant>
> +except the Cb and Cr bytes are swapped, the CrCb plane starts with a Cr byte.</para>
> +
> +	<para><constant>V4L2_PIX_FMT_NV16M</constant> is intended to be
> +used only in drivers and applications that support the multi-planar API,
> +described in <xref linkend="planar-apis"/>. </para>

I think you could refer to V4L2_PIX_FMT_NV61M or alternatively move the
sentence explaining V4L2_PIX_FMT_NV61M after the above. Up to you.

Reviewed-by: Sakari Ailus <sakari.ailus@iki.fi>
Laurent Pinchart July 30, 2013, 11:16 a.m. UTC | #2
Hi Sakari,

Thank you for the review.

On Tuesday 30 July 2013 14:09:34 Sakari Ailus wrote:
> On Thu, Jul 25, 2013 at 03:00:12PM +0200, Laurent Pinchart wrote:
> > From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> > 
> > NV16M and NV61M are planar YCbCr 4:2:2 and YCrCb 4:2:2 formats with a
> > luma plane followed by an interleaved chroma plane. The planes are not
> > required to be contiguous in memory, and the formats can only be used
> > with the multi-planar formats API.
> > 
> > Signed-off-by: Laurent Pinchart
> > <laurent.pinchart+renesas@ideasonboard.com>
> > Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> > ---
> > 
> >  Documentation/DocBook/media/v4l/pixfmt-nv16m.xml | 170 ++++++++++++++++++
> >  Documentation/DocBook/media/v4l/pixfmt.xml       |   1 +
> >  include/uapi/linux/videodev2.h                   |   2 +
> >  3 files changed, 173 insertions(+)
> >  create mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv16m.xml
> > 
> > diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml
> > b/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml new file mode 100644
> > index 0000000..84a8bb3
> > --- /dev/null
> > +++ b/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml
> > @@ -0,0 +1,170 @@
> > +    <refentry>
> > +      <refmeta>
> > +	<refentrytitle>V4L2_PIX_FMT_NV16M ('NM16'), V4L2_PIX_FMT_NV61M
> > ('NM61')</refentrytitle> +	&manvol;
> > +      </refmeta>
> > +      <refnamediv>
> > +	<refname
> > id="V4L2-PIX-FMT-NV16M"><constant>V4L2_PIX_FMT_NV16M</constant></refname>
> > +	<refname
> > id="V4L2-PIX-FMT-NV61M"><constant>V4L2_PIX_FMT_NV61M</constant></refname>
> > +	<refpurpose>Variation of <constant>V4L2_PIX_FMT_NV16</constant> and
> > <constant>V4L2_PIX_FMT_NV61</constant> with planes +	  non contiguous in
> > memory. </refpurpose>
> > +      </refnamediv>
> > +      <refsect1>
> > +	<title>Description</title>
> > +
> > +	<para>This is a multi-planar, two-plane version of the YUV 4:2:0 
format.
> > +The three components are separated into two sub-images or planes.
> > +<constant>V4L2_PIX_FMT_NV16M</constant> differs from
> > <constant>V4L2_PIX_FMT_NV16 +</constant> in that the two planes are
> > non-contiguous in memory, i.e. the chroma +plane do not necessarily
> > immediately follows the luma plane.
> > +The luminance data occupies the first plane. The Y plane has one byte per
> > pixel. +In the second plane there is a chrominance data with alternating
> > chroma samples. +The CbCr plane is the same width and height, in bytes,
> > as the Y plane. +Each CbCr pair belongs to four pixels. For example,
> > +Cb<subscript>0</subscript>/Cr<subscript>0</subscript> belongs to
> > +Y'<subscript>00</subscript>, Y'<subscript>01</subscript>,
> > +Y'<subscript>10</subscript>, Y'<subscript>11</subscript>.
> > +<constant>V4L2_PIX_FMT_NV61M</constant> is the same as
> > <constant>V4L2_PIX_FMT_NV16M</constant> +except the Cb and Cr bytes are
> > swapped, the CrCb plane starts with a Cr byte.</para> +
> > +	<para><constant>V4L2_PIX_FMT_NV16M</constant> is intended to be
> > +used only in drivers and applications that support the multi-planar API,
> > +described in <xref linkend="planar-apis"/>. </para>
> 
> I think you could refer to V4L2_PIX_FMT_NV61M or alternatively move the
> sentence explaining V4L2_PIX_FMT_NV61M after the above. Up to you.

Something like

        <para><constant>V4L2_PIX_FMT_NV16M</constant> and 
<constant>V4L2_PIX_FMT_NV61M</constant> are intended to be used only in 
drivers and applications that support the multi-planar API, described in 
<xref linkend="planar-apis"/>. </para>

?

> Reviewed-by: Sakari Ailus <sakari.ailus@iki.fi>
sakari.ailus@iki.fi July 30, 2013, 11:32 a.m. UTC | #3
On Tue, Jul 30, 2013 at 01:16:54PM +0200, Laurent Pinchart wrote:
...
> > > +	<para>This is a multi-planar, two-plane version of the YUV 4:2:0 
> format.
> > > +The three components are separated into two sub-images or planes.
> > > +<constant>V4L2_PIX_FMT_NV16M</constant> differs from
> > > <constant>V4L2_PIX_FMT_NV16 +</constant> in that the two planes are
> > > non-contiguous in memory, i.e. the chroma +plane do not necessarily
> > > immediately follows the luma plane.
> > > +The luminance data occupies the first plane. The Y plane has one byte per
> > > pixel. +In the second plane there is a chrominance data with alternating
> > > chroma samples. +The CbCr plane is the same width and height, in bytes,
> > > as the Y plane. +Each CbCr pair belongs to four pixels. For example,
> > > +Cb<subscript>0</subscript>/Cr<subscript>0</subscript> belongs to
> > > +Y'<subscript>00</subscript>, Y'<subscript>01</subscript>,
> > > +Y'<subscript>10</subscript>, Y'<subscript>11</subscript>.
> > > +<constant>V4L2_PIX_FMT_NV61M</constant> is the same as
> > > <constant>V4L2_PIX_FMT_NV16M</constant> +except the Cb and Cr bytes are
> > > swapped, the CrCb plane starts with a Cr byte.</para> +
> > > +	<para><constant>V4L2_PIX_FMT_NV16M</constant> is intended to be
> > > +used only in drivers and applications that support the multi-planar API,
> > > +described in <xref linkend="planar-apis"/>. </para>
> > 
> > I think you could refer to V4L2_PIX_FMT_NV61M or alternatively move the
> > sentence explaining V4L2_PIX_FMT_NV61M after the above. Up to you.
> 
> Something like
> 
>         <para><constant>V4L2_PIX_FMT_NV16M</constant> and 
> <constant>V4L2_PIX_FMT_NV61M</constant> are intended to be used only in 
> drivers and applications that support the multi-planar API, described in 

Fine for me.
diff mbox

Patch

diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml b/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml
new file mode 100644
index 0000000..84a8bb3
--- /dev/null
+++ b/Documentation/DocBook/media/v4l/pixfmt-nv16m.xml
@@ -0,0 +1,170 @@ 
+    <refentry>
+      <refmeta>
+	<refentrytitle>V4L2_PIX_FMT_NV16M ('NM16'), V4L2_PIX_FMT_NV61M ('NM61')</refentrytitle>
+	&manvol;
+      </refmeta>
+      <refnamediv>
+	<refname id="V4L2-PIX-FMT-NV16M"><constant>V4L2_PIX_FMT_NV16M</constant></refname>
+	<refname id="V4L2-PIX-FMT-NV61M"><constant>V4L2_PIX_FMT_NV61M</constant></refname>
+	<refpurpose>Variation of <constant>V4L2_PIX_FMT_NV16</constant> and <constant>V4L2_PIX_FMT_NV61</constant> with planes
+	  non contiguous in memory. </refpurpose>
+      </refnamediv>
+      <refsect1>
+	<title>Description</title>
+
+	<para>This is a multi-planar, two-plane version of the YUV 4:2:0 format.
+The three components are separated into two sub-images or planes.
+<constant>V4L2_PIX_FMT_NV16M</constant> differs from <constant>V4L2_PIX_FMT_NV16
+</constant> in that the two planes are non-contiguous in memory, i.e. the chroma
+plane do not necessarily immediately follows the luma plane.
+The luminance data occupies the first plane. The Y plane has one byte per pixel.
+In the second plane there is a chrominance data with alternating chroma samples.
+The CbCr plane is the same width and height, in bytes, as the Y plane.
+Each CbCr pair belongs to four pixels. For example,
+Cb<subscript>0</subscript>/Cr<subscript>0</subscript> belongs to
+Y'<subscript>00</subscript>, Y'<subscript>01</subscript>,
+Y'<subscript>10</subscript>, Y'<subscript>11</subscript>.
+<constant>V4L2_PIX_FMT_NV61M</constant> is the same as <constant>V4L2_PIX_FMT_NV16M</constant>
+except the Cb and Cr bytes are swapped, the CrCb plane starts with a Cr byte.</para>
+
+	<para><constant>V4L2_PIX_FMT_NV16M</constant> is 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_NV16M</constant> 4 &times; 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&nbsp;+&nbsp;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&nbsp;+&nbsp;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&nbsp;+&nbsp;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&nbsp;+&nbsp;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&nbsp;+&nbsp;0:</entry>
+		      <entry>Cb<subscript>00</subscript></entry>
+		      <entry>Cr<subscript>00</subscript></entry>
+		      <entry>Cb<subscript>02</subscript></entry>
+		      <entry>Cr<subscript>02</subscript></entry>
+		    </row>
+		    <row>
+		      <entry>start1&nbsp;+&nbsp;4:</entry>
+		      <entry>Cb<subscript>10</subscript></entry>
+		      <entry>Cr<subscript>10</subscript></entry>
+		      <entry>Cb<subscript>12</subscript></entry>
+		      <entry>Cr<subscript>12</subscript></entry>
+		    </row>
+		    <row>
+		      <entry>start1&nbsp;+&nbsp;8:</entry>
+		      <entry>Cb<subscript>20</subscript></entry>
+		      <entry>Cr<subscript>20</subscript></entry>
+		      <entry>Cb<subscript>22</subscript></entry>
+		      <entry>Cr<subscript>22</subscript></entry>
+		    </row>
+		    <row>
+		      <entry>start1&nbsp;+&nbsp;12:</entry>
+		      <entry>Cb<subscript>30</subscript></entry>
+		      <entry>Cr<subscript>30</subscript></entry>
+		      <entry>Cb<subscript>32</subscript></entry>
+		      <entry>Cr<subscript>32</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></entry><entry>Y</entry><entry></entry>
+		      <entry>Y</entry><entry></entry><entry>Y</entry>
+		    </row>
+		    <row>
+		      <entry></entry>
+		      <entry></entry><entry>C</entry><entry></entry><entry></entry>
+		      <entry></entry><entry>C</entry><entry></entry>
+		    </row>
+		    <row>
+		      <entry>1</entry>
+		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
+		      <entry>Y</entry><entry></entry><entry>Y</entry>
+		    </row>
+		    <row>
+		      <entry></entry>
+		      <entry></entry><entry>C</entry><entry></entry><entry></entry>
+		      <entry></entry><entry>C</entry><entry></entry>
+		    </row>
+		    <row>
+		      <entry></entry>
+		    </row>
+		    <row>
+		      <entry>2</entry>
+		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
+		      <entry>Y</entry><entry></entry><entry>Y</entry>
+		    </row>
+		    <row>
+		      <entry></entry>
+		      <entry></entry><entry>C</entry><entry></entry><entry></entry>
+		      <entry></entry><entry>C</entry><entry></entry>
+		    </row>
+		    <row>
+		      <entry>3</entry>
+		      <entry>Y</entry><entry></entry><entry>Y</entry><entry></entry>
+		      <entry>Y</entry><entry></entry><entry>Y</entry>
+		    </row>
+		    <row>
+		      <entry></entry>
+		      <entry></entry><entry>C</entry><entry></entry><entry></entry>
+		      <entry></entry><entry>C</entry><entry></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 99b8d2a..16db350 100644
--- a/Documentation/DocBook/media/v4l/pixfmt.xml
+++ b/Documentation/DocBook/media/v4l/pixfmt.xml
@@ -718,6 +718,7 @@  information.</para>
     &sub-nv12m;
     &sub-nv12mt;
     &sub-nv16;
+    &sub-nv16m;
     &sub-nv24;
     &sub-m420;
   </section>
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 95ef455..fec0c20 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -348,6 +348,8 @@  struct v4l2_pix_format {
 /* two non contiguous planes - one Y, one Cr + Cb interleaved  */
 #define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */
 #define V4L2_PIX_FMT_NV21M   v4l2_fourcc('N', 'M', '2', '1') /* 21  Y/CrCb 4:2:0  */
+#define V4L2_PIX_FMT_NV16M   v4l2_fourcc('N', 'M', '1', '6') /* 16  Y/CbCr 4:2:2  */
+#define V4L2_PIX_FMT_NV61M   v4l2_fourcc('N', 'M', '6', '1') /* 16  Y/CrCb 4:2:2  */
 #define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
 #define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 macroblocks */