v4l: Add V4L2_PIX_FMT_NV24 and V4L2_PIX_FMT_NV42 formats

Message ID 1313734460-7479-1-git-send-email-laurent.pinchart@ideasonboard.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Laurent Pinchart Aug. 19, 2011, 6:14 a.m. UTC
NV24 and NV42 are planar YCbCr 4:4:4 and YCrCb 4:4:4 formats with a
luma plane followed by an interleaved chroma plane.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 Documentation/DocBook/media/v4l/pixfmt-nv24.xml |  128 +++++++++++++++++++++++
 Documentation/DocBook/media/v4l/pixfmt.xml      |    1 +
 include/linux/videodev2.h                       |    2 +
 3 files changed, 131 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv24.xml

This format will be used by an fbdev driver. I'm already posting the patch for
for review and will send a pull request later.
  

Comments

Sakari Ailus Aug. 20, 2011, 5:26 a.m. UTC | #1
Hi Laurent,

Thanks for the patch.

On Fri, Aug 19, 2011 at 08:14:20AM +0200, Laurent Pinchart wrote:
> NV24 and NV42 are planar YCbCr 4:4:4 and YCrCb 4:4:4 formats with a
> luma plane followed by an interleaved chroma plane.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
>  Documentation/DocBook/media/v4l/pixfmt-nv24.xml |  128 +++++++++++++++++++++++
>  Documentation/DocBook/media/v4l/pixfmt.xml      |    1 +
>  include/linux/videodev2.h                       |    2 +
>  3 files changed, 131 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv24.xml
> 
> This format will be used by an fbdev driver. I'm already posting the patch for
> for review and will send a pull request later.
> 
> diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv24.xml b/Documentation/DocBook/media/v4l/pixfmt-nv24.xml
> new file mode 100644
> index 0000000..e77301d
> --- /dev/null
> +++ b/Documentation/DocBook/media/v4l/pixfmt-nv24.xml
> @@ -0,0 +1,128 @@
> +    <refentry>
> +      <refmeta>
> +	<refentrytitle>V4L2_PIX_FMT_NV24 ('NV24'), V4L2_PIX_FMT_NV42 ('NV42')</refentrytitle>
> +	&manvol;
> +      </refmeta>
> +      <refnamediv>
> +	<refname id="V4L2-PIX-FMT-NV24"><constant>V4L2_PIX_FMT_NV24</constant></refname>
> +	<refname id="V4L2-PIX-FMT-NV42"><constant>V4L2_PIX_FMT_NV42</constant></refname>
> +	<refpurpose>Formats with full horizontal and vertical
> +chroma resolutions, also known as YUV 4:4:4. One luminance and one
> +chrominance plane with alternating chroma samples as opposed to
> +<constant>V4L2_PIX_FMT_YVU420</constant></refpurpose>
> +      </refnamediv>
> +      <refsect1>
> +	<title>Description</title>
> +
> +	<para>These are two-plane versions of the YUV 4:4:4 format.
> +The three components are separated into two sub-images or planes. The
> +Y plane is first. The Y plane has one byte per pixel. For

Are all 8 bits being used per sample, or is there padding?

> +<constant>V4L2_PIX_FMT_NV24</constant>, a combined CbCr plane
> +immediately follows the Y plane in memory.  The CbCr plane is the same
> +width and height, in pixels, as the Y plane (and of the image).
> +Each line contains one CbCr pair per pixel.

How may bits / bytes per Cb / Cr sample? Perhaps you could mention this once
somewhere if all have the same.

> +<constant>V4L2_PIX_FMT_NV42</constant> is the same except the Cb and
> +Cr bytes are swapped, the CrCb plane starts with a Cr byte.</para>
> +	<para>If the Y plane has pad bytes after each row, then the
> +CbCr plane has twice as many pad bytes after its rows.</para>

[clip]

Cheers,
  
Laurent Pinchart Aug. 21, 2011, 11:17 p.m. UTC | #2
Hi Sakari,

On Saturday 20 August 2011 07:26:17 Sakari Ailus wrote:
> Hi Laurent,
> 
> Thanks for the patch.

And thanks for the comments.

> On Fri, Aug 19, 2011 at 08:14:20AM +0200, Laurent Pinchart wrote:
> > NV24 and NV42 are planar YCbCr 4:4:4 and YCrCb 4:4:4 formats with a
> > luma plane followed by an interleaved chroma plane.
> > 
> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > ---
> > 
> >  Documentation/DocBook/media/v4l/pixfmt-nv24.xml |  128
> >  +++++++++++++++++++++++ Documentation/DocBook/media/v4l/pixfmt.xml     
> >  |    1 +
> >  include/linux/videodev2.h                       |    2 +
> >  3 files changed, 131 insertions(+), 0 deletions(-)
> >  create mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv24.xml
> > 
> > This format will be used by an fbdev driver. I'm already posting the
> > patch for for review and will send a pull request later.
> > 
> > diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv24.xml
> > b/Documentation/DocBook/media/v4l/pixfmt-nv24.xml new file mode 100644
> > index 0000000..e77301d
> > --- /dev/null
> > +++ b/Documentation/DocBook/media/v4l/pixfmt-nv24.xml
> > @@ -0,0 +1,128 @@
> > +    <refentry>
> > +      <refmeta>
> > +	<refentrytitle>V4L2_PIX_FMT_NV24 ('NV24'), V4L2_PIX_FMT_NV42
> > ('NV42')</refentrytitle> +	&manvol;
> > +      </refmeta>
> > +      <refnamediv>
> > +	<refname
> > id="V4L2-PIX-FMT-NV24"><constant>V4L2_PIX_FMT_NV24</constant></refname>
> > +	<refname
> > id="V4L2-PIX-FMT-NV42"><constant>V4L2_PIX_FMT_NV42</constant></refname>
> > +	<refpurpose>Formats with full horizontal and vertical
> > +chroma resolutions, also known as YUV 4:4:4. One luminance and one
> > +chrominance plane with alternating chroma samples as opposed to
> > +<constant>V4L2_PIX_FMT_YVU420</constant></refpurpose>
> > +      </refnamediv>
> > +      <refsect1>
> > +	<title>Description</title>
> > +
> > +	<para>These are two-plane versions of the YUV 4:4:4 format.
> > +The three components are separated into two sub-images or planes. The
> > +Y plane is first. The Y plane has one byte per pixel. For
> 
> Are all 8 bits being used per sample, or is there padding?

All 8 bits are used, as in all YUV planar formats. Do you think that's worth 
mentioning ?

> > +<constant>V4L2_PIX_FMT_NV24</constant>, a combined CbCr plane
> > +immediately follows the Y plane in memory.  The CbCr plane is the same
> > +width and height, in pixels, as the Y plane (and of the image).
> > +Each line contains one CbCr pair per pixel.
> 
> How may bits / bytes per Cb / Cr sample? Perhaps you could mention this
> once somewhere if all have the same.

All YUV planar formats use 8 bits for each Cb and Cr samples. I will clarify 
this.

> > +<constant>V4L2_PIX_FMT_NV42</constant> is the same except the Cb and
> > +Cr bytes are swapped, the CrCb plane starts with a Cr byte.</para>
> > +	<para>If the Y plane has pad bytes after each row, then the
> > +CbCr plane has twice as many pad bytes after its rows.</para>
> 
> [clip]
> 
> Cheers,
  
Sakari Ailus Aug. 22, 2011, 3:38 p.m. UTC | #3
On Mon, Aug 22, 2011 at 01:17:16AM +0200, Laurent Pinchart wrote:
> Hi Sakari,
> 
> On Saturday 20 August 2011 07:26:17 Sakari Ailus wrote:
> > Hi Laurent,
> > 
> > Thanks for the patch.
> 
> And thanks for the comments.
> 
> > On Fri, Aug 19, 2011 at 08:14:20AM +0200, Laurent Pinchart wrote:
> > > NV24 and NV42 are planar YCbCr 4:4:4 and YCrCb 4:4:4 formats with a
> > > luma plane followed by an interleaved chroma plane.
> > > 
> > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > > ---
> > > 
> > >  Documentation/DocBook/media/v4l/pixfmt-nv24.xml |  128
> > >  +++++++++++++++++++++++ Documentation/DocBook/media/v4l/pixfmt.xml     
> > >  |    1 +
> > >  include/linux/videodev2.h                       |    2 +
> > >  3 files changed, 131 insertions(+), 0 deletions(-)
> > >  create mode 100644 Documentation/DocBook/media/v4l/pixfmt-nv24.xml
> > > 
> > > This format will be used by an fbdev driver. I'm already posting the
> > > patch for for review and will send a pull request later.
> > > 
> > > diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv24.xml
> > > b/Documentation/DocBook/media/v4l/pixfmt-nv24.xml new file mode 100644
> > > index 0000000..e77301d
> > > --- /dev/null
> > > +++ b/Documentation/DocBook/media/v4l/pixfmt-nv24.xml
> > > @@ -0,0 +1,128 @@
> > > +    <refentry>
> > > +      <refmeta>
> > > +	<refentrytitle>V4L2_PIX_FMT_NV24 ('NV24'), V4L2_PIX_FMT_NV42
> > > ('NV42')</refentrytitle> +	&manvol;
> > > +      </refmeta>
> > > +      <refnamediv>
> > > +	<refname
> > > id="V4L2-PIX-FMT-NV24"><constant>V4L2_PIX_FMT_NV24</constant></refname>
> > > +	<refname
> > > id="V4L2-PIX-FMT-NV42"><constant>V4L2_PIX_FMT_NV42</constant></refname>
> > > +	<refpurpose>Formats with full horizontal and vertical
> > > +chroma resolutions, also known as YUV 4:4:4. One luminance and one
> > > +chrominance plane with alternating chroma samples as opposed to
> > > +<constant>V4L2_PIX_FMT_YVU420</constant></refpurpose>
> > > +      </refnamediv>
> > > +      <refsect1>
> > > +	<title>Description</title>
> > > +
> > > +	<para>These are two-plane versions of the YUV 4:4:4 format.
> > > +The three components are separated into two sub-images or planes. The
> > > +Y plane is first. The Y plane has one byte per pixel. For
> > 
> > Are all 8 bits being used per sample, or is there padding?
> 
> All 8 bits are used, as in all YUV planar formats. Do you think that's worth 
> mentioning ?

I think this should definitely be mentioned, but if the same issue touches
all the YUV formats, I guess it doesn't need to be in this patch.

E.g. many (if not most) raw bayer formats contain padding.

> > > +<constant>V4L2_PIX_FMT_NV24</constant>, a combined CbCr plane
> > > +immediately follows the Y plane in memory.  The CbCr plane is the same
> > > +width and height, in pixels, as the Y plane (and of the image).
> > > +Each line contains one CbCr pair per pixel.
> > 
> > How may bits / bytes per Cb / Cr sample? Perhaps you could mention this
> > once somewhere if all have the same.
> 
> All YUV planar formats use 8 bits for each Cb and Cr samples. I will clarify 
> this.

Yes, I think the size per sample is important.
  

Patch

diff --git a/Documentation/DocBook/media/v4l/pixfmt-nv24.xml b/Documentation/DocBook/media/v4l/pixfmt-nv24.xml
new file mode 100644
index 0000000..e77301d
--- /dev/null
+++ b/Documentation/DocBook/media/v4l/pixfmt-nv24.xml
@@ -0,0 +1,128 @@ 
+    <refentry>
+      <refmeta>
+	<refentrytitle>V4L2_PIX_FMT_NV24 ('NV24'), V4L2_PIX_FMT_NV42 ('NV42')</refentrytitle>
+	&manvol;
+      </refmeta>
+      <refnamediv>
+	<refname id="V4L2-PIX-FMT-NV24"><constant>V4L2_PIX_FMT_NV24</constant></refname>
+	<refname id="V4L2-PIX-FMT-NV42"><constant>V4L2_PIX_FMT_NV42</constant></refname>
+	<refpurpose>Formats with full horizontal and vertical
+chroma resolutions, also known as YUV 4:4:4. One luminance and one
+chrominance plane with alternating chroma samples as opposed to
+<constant>V4L2_PIX_FMT_YVU420</constant></refpurpose>
+      </refnamediv>
+      <refsect1>
+	<title>Description</title>
+
+	<para>These are two-plane versions of the YUV 4:4:4 format.
+The three components are separated into two sub-images or planes. The
+Y plane is first. The Y plane has one byte per pixel. For
+<constant>V4L2_PIX_FMT_NV24</constant>, a combined CbCr plane
+immediately follows the Y plane in memory.  The CbCr plane is the same
+width and height, in pixels, as the Y plane (and of the image).
+Each line contains one CbCr pair per pixel.
+<constant>V4L2_PIX_FMT_NV42</constant> is the same except the Cb and
+Cr bytes are swapped, the CrCb plane starts with a Cr byte.</para>
+
+	<para>If the Y plane has pad bytes after each row, then the
+CbCr plane has twice as many pad bytes after its rows.</para>
+
+	<example>
+	  <title><constant>V4L2_PIX_FMT_NV24</constant> 4 &times; 4
+pixel image</title>
+
+	  <formalpara>
+	    <title>Byte Order.</title>
+	    <para>Each cell is one byte.
+		<informaltable frame="none">
+		<tgroup cols="9" align="center">
+		  <colspec align="left" colwidth="2*" />
+		  <tbody valign="top">
+		    <row>
+		      <entry>start&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>start&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>start&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>start&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>start&nbsp;+&nbsp;16:</entry>
+		      <entry>Cb<subscript>00</subscript></entry>
+		      <entry>Cr<subscript>00</subscript></entry>
+		      <entry>Cb<subscript>01</subscript></entry>
+		      <entry>Cr<subscript>01</subscript></entry>
+		      <entry>Cb<subscript>02</subscript></entry>
+		      <entry>Cr<subscript>02</subscript></entry>
+		      <entry>Cb<subscript>03</subscript></entry>
+		      <entry>Cr<subscript>03</subscript></entry>
+		    </row>
+		    <row>
+		      <entry>start&nbsp;+&nbsp;24:</entry>
+		      <entry>Cb<subscript>10</subscript></entry>
+		      <entry>Cr<subscript>10</subscript></entry>
+		      <entry>Cb<subscript>11</subscript></entry>
+		      <entry>Cr<subscript>11</subscript></entry>
+		      <entry>Cb<subscript>12</subscript></entry>
+		      <entry>Cr<subscript>12</subscript></entry>
+		      <entry>Cb<subscript>13</subscript></entry>
+		      <entry>Cr<subscript>13</subscript></entry>
+		    </row>
+		    <row>
+		      <entry>start&nbsp;+&nbsp;32:</entry>
+		      <entry>Cb<subscript>20</subscript></entry>
+		      <entry>Cr<subscript>20</subscript></entry>
+		      <entry>Cb<subscript>21</subscript></entry>
+		      <entry>Cr<subscript>21</subscript></entry>
+		      <entry>Cb<subscript>22</subscript></entry>
+		      <entry>Cr<subscript>22</subscript></entry>
+		      <entry>Cb<subscript>23</subscript></entry>
+		      <entry>Cr<subscript>23</subscript></entry>
+		    </row>
+		    <row>
+		      <entry>start&nbsp;+&nbsp;40:</entry>
+		      <entry>Cb<subscript>30</subscript></entry>
+		      <entry>Cr<subscript>30</subscript></entry>
+		      <entry>Cb<subscript>31</subscript></entry>
+		      <entry>Cr<subscript>31</subscript></entry>
+		      <entry>Cb<subscript>32</subscript></entry>
+		      <entry>Cr<subscript>32</subscript></entry>
+		      <entry>Cb<subscript>33</subscript></entry>
+		      <entry>Cr<subscript>33</subscript></entry>
+		    </row>
+		  </tbody>
+		</tgroup>
+		</informaltable>
+	      </para>
+	  </formalpara>
+	</example>
+      </refsect1>
+    </refentry>
+
+  <!--
+Local Variables:
+mode: sgml
+sgml-parent-document: "pixfmt.sgml"
+indent-tabs-mode: nil
+End:
+  -->
diff --git a/Documentation/DocBook/media/v4l/pixfmt.xml b/Documentation/DocBook/media/v4l/pixfmt.xml
index 2ff6b77..aef4615 100644
--- a/Documentation/DocBook/media/v4l/pixfmt.xml
+++ b/Documentation/DocBook/media/v4l/pixfmt.xml
@@ -714,6 +714,7 @@  information.</para>
     &sub-nv12m;
     &sub-nv12mt;
     &sub-nv16;
+    &sub-nv24;
     &sub-m420;
   </section>
 
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
index fca24cc..8225163 100644
--- a/include/linux/videodev2.h
+++ b/include/linux/videodev2.h
@@ -343,6 +343,8 @@  struct v4l2_pix_format {
 #define V4L2_PIX_FMT_NV21    v4l2_fourcc('N', 'V', '2', '1') /* 12  Y/CrCb 4:2:0  */
 #define V4L2_PIX_FMT_NV16    v4l2_fourcc('N', 'V', '1', '6') /* 16  Y/CbCr 4:2:2  */
 #define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */
+#define V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /* 24  Y/CbCr 4:4:4  */
+#define V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V', '4', '2') /* 24  Y/CrCb 4:4:4  */
 
 /* 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  */