On Tuesday, January 04, 2011 05:20:45 Pawel Osciak wrote:
> Add DocBook documentation for the new multi-planar API extensions to the
> Video for Linux 2 API DocBook.
>
> Signed-off-by: Pawel Osciak <[email protected]>
> ---
> Documentation/DocBook/media-entities.tmpl | 4 +
> Documentation/DocBook/v4l/common.xml | 2 +
> Documentation/DocBook/v4l/compat.xml | 11 +
> Documentation/DocBook/v4l/dev-capture.xml | 13 +-
> Documentation/DocBook/v4l/dev-output.xml | 13 +-
> Documentation/DocBook/v4l/func-mmap.xml | 10 +-
> Documentation/DocBook/v4l/func-munmap.xml | 3 +-
> Documentation/DocBook/v4l/io.xml | 242
> +++++++++++++++++++++----
> Documentation/DocBook/v4l/pixfmt.xml | 114 +++++++++++-
> Documentation/DocBook/v4l/planar-apis.xml | 79 ++++++++
> Documentation/DocBook/v4l/v4l2.xml | 21 ++-
> Documentation/DocBook/v4l/vidioc-enum-fmt.xml | 2 +
> Documentation/DocBook/v4l/vidioc-g-fmt.xml | 15 ++-
> Documentation/DocBook/v4l/vidioc-qbuf.xml | 24 ++-
> Documentation/DocBook/v4l/vidioc-querybuf.xml | 14 +-
> Documentation/DocBook/v4l/vidioc-querycap.xml | 14 ++
> 16 files changed, 515 insertions(+), 66 deletions(-)
> create mode 100644 Documentation/DocBook/v4l/planar-apis.xml
>
> diff --git a/Documentation/DocBook/media-entities.tmpl
> b/Documentation/DocBook/media-entities.tmpl
> index be34dcb..74923d7 100644
> --- a/Documentation/DocBook/media-entities.tmpl
> +++ b/Documentation/DocBook/media-entities.tmpl
> @@ -129,6 +129,7 @@
> <!ENTITY v4l2-audioout "struct <link
> linkend='v4l2-audioout'>v4l2_audioout</link>">
> <!ENTITY v4l2-bt-timings "struct <link
> linkend='v4l2-bt-timings'>v4l2_bt_timings</link>">
> <!ENTITY v4l2-buffer "struct <link
> linkend='v4l2-buffer'>v4l2_buffer</link>">
> +<!ENTITY v4l2-plane "struct <link
> linkend='v4l2-plane'>v4l2_plane</link>">
> <!ENTITY v4l2-capability "struct <link
> linkend='v4l2-capability'>v4l2_capability</link>">
> <!ENTITY v4l2-captureparm "struct <link
> linkend='v4l2-captureparm'>v4l2_captureparm</link>">
> <!ENTITY v4l2-clip "struct <link linkend='v4l2-clip'>v4l2_clip</link>">
> @@ -167,6 +168,8 @@
> <!ENTITY v4l2-output "struct <link
> linkend='v4l2-output'>v4l2_output</link>">
> <!ENTITY v4l2-outputparm "struct <link
> linkend='v4l2-outputparm'>v4l2_outputparm</link>">
> <!ENTITY v4l2-pix-format "struct <link
> linkend='v4l2-pix-format'>v4l2_pix_format</link>">
> +<!ENTITY v4l2-pix-format-mplane "struct <link
> linkend='v4l2-pix-format-mplane'>v4l2_pix_format_mplane</link>">
> +<!ENTITY v4l2-plane-pix-format "struct <link
> linkend='v4l2-plane-pix-format'>v4l2_plane_pix_format</link>">
> <!ENTITY v4l2-queryctrl "struct <link
> linkend='v4l2-queryctrl'>v4l2_queryctrl</link>">
> <!ENTITY v4l2-querymenu "struct <link
> linkend='v4l2-querymenu'>v4l2_querymenu</link>">
> <!ENTITY v4l2-rect "struct <link linkend='v4l2-rect'>v4l2_rect</link>">
> @@ -202,6 +205,7 @@
> <!-- Subsections -->
> <!ENTITY sub-biblio SYSTEM "v4l/biblio.xml">
> <!ENTITY sub-common SYSTEM "v4l/common.xml">
> +<!ENTITY sub-planar-apis SYSTEM "v4l/planar-apis.xml">
> <!ENTITY sub-compat SYSTEM "v4l/compat.xml">
> <!ENTITY sub-controls SYSTEM "v4l/controls.xml">
> <!ENTITY sub-dev-capture SYSTEM "v4l/dev-capture.xml">
> diff --git a/Documentation/DocBook/v4l/common.xml
> b/Documentation/DocBook/v4l/common.xml
> index cea23e1..dbab79c 100644
> --- a/Documentation/DocBook/v4l/common.xml
> +++ b/Documentation/DocBook/v4l/common.xml
> @@ -846,6 +846,8 @@ conversion routine or library for integration into
> applications.</para>
> </section>
> </section>
>
> + &sub-planar-apis;
> +
> <section id="crop">
> <title>Image Cropping, Insertion and Scaling</title>
>
> diff --git a/Documentation/DocBook/v4l/compat.xml
> b/Documentation/DocBook/v4l/compat.xml
> index c9ce61d..1461878 100644
> --- a/Documentation/DocBook/v4l/compat.xml
> +++ b/Documentation/DocBook/v4l/compat.xml
> @@ -2353,6 +2353,17 @@ that used it. It was originally scheduled for removal
> in 2.6.35.
> </listitem>
> </orderedlist>
> </section>
> + <section>
> + <title>V4L2 in Linux 2.6.38</title>
> + <orderedlist>
> + <listitem>
> + <para>Muti-planar API added. Does not affect the compatibility of
Typo: Muti -> Multi
> + current drivers and applications. See
> + <link linkend="planar-apis">multi-planar API</link>
> + for details.</para>
> + </listitem>
> + </orderedlist>
> + </section>
>
> <section id="other">
> <title>Relation of V4L2 to other Linux multimedia APIs</title>
> diff --git a/Documentation/DocBook/v4l/dev-capture.xml
> b/Documentation/DocBook/v4l/dev-capture.xml
> index 32807e4..2237c66 100644
> --- a/Documentation/DocBook/v4l/dev-capture.xml
> +++ b/Documentation/DocBook/v4l/dev-capture.xml
> @@ -18,7 +18,8 @@ files are used for video output devices.</para>
> <title>Querying Capabilities</title>
>
> <para>Devices supporting the video capture interface set the
> -<constant>V4L2_CAP_VIDEO_CAPTURE</constant> flag in the
> +<constant>V4L2_CAP_VIDEO_CAPTURE</constant> or
> +<constant>V4L2_CAP_VIDEO_CAPTURE_MPLANE</constant> flag in the
> <structfield>capabilities</structfield> field of &v4l2-capability;
> returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions
> they may also support the <link linkend="overlay">video overlay</link>
> @@ -64,9 +65,11 @@ linkend="crop" />.</para>
>
> <para>To query the current image format applications set the
> <structfield>type</structfield> field of a &v4l2-format; to
> -<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> and call the
> +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> or
> +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant> and call the
> &VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill
> -the &v4l2-pix-format; <structfield>pix</structfield> member of the
> +the &v4l2-pix-format; <structfield>pix</structfield> or the
> +&v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member of the
> <structfield>fmt</structfield> union.</para>
>
> <para>To request different parameters applications set the
> @@ -84,8 +87,8 @@ adjust the parameters and finally return the actual
> parameters as
> without disabling I/O or possibly time consuming hardware
> preparations.</para>
>
> - <para>The contents of &v4l2-pix-format; are discussed in <xref
> -linkend="pixfmt" />. See also the specification of the
> + <para>The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane;
> +are discussed in <xref linkend="pixfmt" />. See also the specification of the
> <constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant>
> and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video
> capture devices must implement both the
> diff --git a/Documentation/DocBook/v4l/dev-output.xml
> b/Documentation/DocBook/v4l/dev-output.xml
> index 63c3c20..919e22c 100644
> --- a/Documentation/DocBook/v4l/dev-output.xml
> +++ b/Documentation/DocBook/v4l/dev-output.xml
> @@ -17,7 +17,8 @@ files are used for video capture devices.</para>
> <title>Querying Capabilities</title>
>
> <para>Devices supporting the video output interface set the
> -<constant>V4L2_CAP_VIDEO_OUTPUT</constant> flag in the
> +<constant>V4L2_CAP_VIDEO_OUTPUT</constant> or
> +<constant>V4L2_CAP_VIDEO_OUTPUT_MPLANE</constant> flag in the
> <structfield>capabilities</structfield> field of &v4l2-capability;
> returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions
> they may also support the <link linkend="raw-vbi">raw VBI
> @@ -60,9 +61,11 @@ linkend="crop" />.</para>
>
> <para>To query the current image format applications set the
> <structfield>type</structfield> field of a &v4l2-format; to
> -<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> and call the
> +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> or
> +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant> and call the
> &VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill
> -the &v4l2-pix-format; <structfield>pix</structfield> member of the
> +the &v4l2-pix-format; <structfield>pix</structfield> or the
> +&v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member of the
> <structfield>fmt</structfield> union.</para>
>
> <para>To request different parameters applications set the
> @@ -80,8 +83,8 @@ adjust the parameters and finally return the actual
> parameters as
> without disabling I/O or possibly time consuming hardware
> preparations.</para>
>
> - <para>The contents of &v4l2-pix-format; are discussed in <xref
> -linkend="pixfmt" />. See also the specification of the
> + <para>The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane;
> +are discussed in <xref linkend="pixfmt" />. See also the specification of the
> <constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant>
> and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video
> output devices must implement both the
> diff --git a/Documentation/DocBook/v4l/func-mmap.xml
> b/Documentation/DocBook/v4l/func-mmap.xml
> index 2e2fc39..92eb176 100644
> --- a/Documentation/DocBook/v4l/func-mmap.xml
> +++ b/Documentation/DocBook/v4l/func-mmap.xml
> @@ -45,7 +45,10 @@ just specify a <constant>NULL</constant> pointer
> here.</para>
> <listitem>
> <para>Length of the memory area to map. This must be the
> same value as returned by the driver in the &v4l2-buffer;
> -<structfield>length</structfield> field.</para>
> +<structfield>length</structfield> field for
for -> for the
> +single-planar API, and the same value as returned by the driver
> +in the &v4l2-plane; <structfield>length</structfield> field for the
> +multi-planar API.</para>
> </listitem>
> </varlistentry>
> <varlistentry>
> @@ -106,7 +109,10 @@ flag.</para>
> <listitem>
> <para>Offset of the buffer in device memory. This must be the
> same value as returned by the driver in the &v4l2-buffer;
> -<structfield>m</structfield> union <structfield>offset</structfield>
> field.</para>
> +<structfield>m</structfield> union <structfield>offset</structfield> field
> for
for -> for the
> +single-planar API, and the same value as returned by the driver
> +in the &v4l2-plane; <structfield>m</structfield> union
> +<structfield>mem_offset</structfield> field for the multi-planar API.</para>
> </listitem>
> </varlistentry>
> </variablelist>
> diff --git a/Documentation/DocBook/v4l/func-munmap.xml
> b/Documentation/DocBook/v4l/func-munmap.xml
> index 502ed49..e2c4190 100644
> --- a/Documentation/DocBook/v4l/func-munmap.xml
> +++ b/Documentation/DocBook/v4l/func-munmap.xml
> @@ -37,7 +37,8 @@
> <para>Length of the mapped buffer. This must be the same
> value as given to <function>mmap()</function> and returned by the
> driver in the &v4l2-buffer; <structfield>length</structfield>
> -field.</para>
> +field for the single-planar API and in the &v4l2-plane;
> +<structfield>length</structfield> field for the multi-planar API.</para>
> </listitem>
> </varlistentry>
> </variablelist>
> diff --git a/Documentation/DocBook/v4l/io.xml
> b/Documentation/DocBook/v4l/io.xml
> index d424886..26fdd7c 100644
> --- a/Documentation/DocBook/v4l/io.xml
> +++ b/Documentation/DocBook/v4l/io.xml
> @@ -121,18 +121,22 @@ mapped.</para>
> <para>Before applications can access the buffers they must map
> them into their address space with the &func-mmap; function. The
> location of the buffers in device memory can be determined with the
> -&VIDIOC-QUERYBUF; ioctl. The <structfield>m.offset</structfield> and
> -<structfield>length</structfield> returned in a &v4l2-buffer; are
> -passed as sixth and second parameter to the
> -<function>mmap()</function> function. The offset and length values
> -must not be modified. Remember the buffers are allocated in physical
> -memory, as opposed to virtual memory which can be swapped out to disk.
> -Applications should free the buffers as soon as possible with the
> -&func-munmap; function.</para>
> +&VIDIOC-QUERYBUF; ioctl. In single-planar API case, the
in -> in the
> +<structfield>m.offset</structfield> and <structfield>length</structfield>
> +returned in a &v4l2-buffer; are passed as sixth and second parameter to the
> +<function>mmap()</function> function. When using multi-planar API,
using -> using the
> +struct &v4l2-buffer; contains an array of &v4l2-plane; structures, each
> +containing its own <structfield>m.offset</structfield> and
> +<structfield>length</structfield>. When using multi-planar API, every
using the
> +plane of every buffer has to be mapped separately, so the number of
> +calls to &func-mmap; should be equal to number of buffers times number of
> +planes in each buffer. The offset and length values must not be modified.
> +Remember, the buffers are allocated in physical memory, as opposed to virtual
> +memory, which can be swapped out to disk. Applications should free the
> buffers
> +as soon as possible with the &func-munmap; function.</para>
>
> <example>
> - <title>Mapping buffers</title>
> -
> + <title>Mapping buffers in single-planar API</title>
in -> in the
> <programlisting>
> &v4l2-requestbuffers; reqbuf;
> struct {
> @@ -201,6 +205,88 @@ for (i = 0; i < reqbuf.count; i++)
> </programlisting>
> </example>
>
> + <example>
> + <title>Mapping buffers in multi-planar API</title>
in the
> + <programlisting>
> +&v4l2-requestbuffers; reqbuf;
> +/* Our current format uses 3 planes per buffer */
> +#define FMT_NUM_PLANES = 3;
> +
> +struct {
> + void *start[FMT_NUM_PLANES];
> + size_t length[FMT_NUM_PLANES];
> +} *buffers;
> +unsigned int i, j;
> +
> +memset (&reqbuf, 0, sizeof (reqbuf));
No space before (
> +reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
> +reqbuf.memory = V4L2_MEMORY_MMAP;
> +reqbuf.count = 20;
> +
> +if (-1 == ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf)) {
Ditto. Same below.
It's also better to do 'if (ioctl() < 0) {'
> + if (errno == EINVAL)
> + printf ("Video capturing or mmap-streaming is not supported\n");
> + else
> + perror ("VIDIOC_REQBUFS");
> +
> + exit (EXIT_FAILURE);
> +}
> +
> +/* We want at least five buffers. */
> +
> +if (reqbuf.count < 5) {
> + /* You may need to free the buffers here. */
> + printf ("Not enough buffer memory\n");
> + exit (EXIT_FAILURE);
> +}
> +
> +buffers = calloc (reqbuf.count, sizeof (*buffers));
> +assert (buffers != NULL);
> +
> +for (i = 0; i < reqbuf.count; i++) {
> + &v4l2-buffer; buffer;
> + &v4l2-plane; planes[FMT_NUM_PLANES];
> +
> + memset (&buffer, 0, sizeof (buffer));
> + buffer.type = reqbuf.type;
> + buffer.memory = V4L2_MEMORY_MMAP;
> + buffer.index = i;
> + /* length in struct v4l2_buffer in multi-planar API stores the size
> + * of planes array. */
> + buffer.length = FMT_NUM_PLANES;
> + buffer.m.planes = planes;
> +
> + if (-1 == ioctl (fd, &VIDIOC-QUERYBUF;, &buffer)) {
> + perror ("VIDIOC_QUERYBUF");
> + exit (EXIT_FAILURE);
> + }
> +
> + /* Every plane has to be mapped separately */
> + for (j = 0; j < FMT_NUM_PLANES; j++) {
> + buffers[i].length[j] = buffer.m.planes[j].length; /* remember
> for munmap() */
> +
> + buffers[i].start[j] = mmap (NULL, buffer.m.planes[j].length,
> + PROT_READ | PROT_WRITE, /* recommended */
> + MAP_SHARED, /* recommended */
> + fd, buffer.m.planes[j].m.offset);
> +
> + if (MAP_FAILED == buffers[i].start[j]) {
> + /* If you do not exit here you should unmap() and free()
> + the buffers and planes mapped so far. */
> + perror ("mmap");
> + exit (EXIT_FAILURE);
> + }
> + }
> +}
> +
> +/* Cleanup. */
> +
> +for (i = 0; i < reqbuf.count; i++)
> + for (j = 0; j < FMT_NUM_PLANES; j++)
> + munmap (buffers[i].start[j], buffers[i].length[j]);
> + </programlisting>
> + </example>
> +
> <para>Conceptually streaming drivers maintain two buffer queues, an
> incoming
> and an outgoing queue. They separate the synchronous capture or output
> operation locked to a video clock from the application which is
> @@ -286,13 +372,13 @@ pointer method (not only memory mapping) is supported
> must be
> determined by calling the &VIDIOC-REQBUFS; ioctl.</para>
>
> <para>This I/O method combines advantages of the read/write and
> -memory mapping methods. Buffers are allocated by the application
> +memory mapping methods. Buffers (planes) are allocated by the application
> itself, and can reside for example in virtual or shared memory. Only
> pointers to data are exchanged, these pointers and meta-information
> -are passed in &v4l2-buffer;. The driver must be switched
> -into user pointer I/O mode by calling the &VIDIOC-REQBUFS; with the
> -desired buffer type. No buffers are allocated beforehands,
> -consequently they are not indexed and cannot be queried like mapped
> +are passed in &v4l2-buffer; (or in &v4l2-plane; in multi-planar API case).
in the multi-planar
> +The driver must be switched into user pointer I/O mode by calling the
> +&VIDIOC-REQBUFS; with the desired buffer type. No buffers (planes) are
> allocated
> +beforehand, consequently they are not indexed and cannot be queried like
> mapped
> buffers with the <constant>VIDIOC_QUERYBUF</constant> ioctl.</para>
>
> <example>
> @@ -316,7 +402,7 @@ if (ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf) == -1) {
> </programlisting>
> </example>
>
> - <para>Buffer addresses and sizes are passed on the fly with the
> + <para>Buffer (plane) addresses and sizes are passed on the fly with the
> &VIDIOC-QBUF; ioctl. Although buffers are commonly cycled,
> applications can pass different addresses and sizes at each
> <constant>VIDIOC_QBUF</constant> call. If required by the hardware the
> @@ -396,11 +482,18 @@ rest should be evident.</para>
> <title>Buffers</title>
>
> <para>A buffer contains data exchanged by application and
> -driver using one of the Streaming I/O methods. Only pointers to
> -buffers are exchanged, the data itself is not copied. These pointers,
> -together with meta-information like timestamps or field parity, are
> -stored in a struct <structname>v4l2_buffer</structname>, argument to
> -the &VIDIOC-QUERYBUF;, &VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl.</para>
> +driver using one of the Streaming I/O methods. In multi-planar API, the
In the
> +data is held in planes, while the buffer structure acts as a container
> +for the planes. Only pointers to buffers (planes) are exchanged, the data
> +itself is not copied. These pointers, together with meta-information like
> +timestamps or field parity, are stored in a struct
> +<structname>v4l2_buffer</structname>, argument to
> +the &VIDIOC-QUERYBUF;, &VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl.
> +In multi-planar API, some plane-specific members of struct
In the
> +<structname>v4l2_buffer</structname>, such as pointers and sizes for each
> +plane, are stored in struct <structname>v4l2_plane</structname> instead.
> +In that case, struct <structname>v4l2_buffer</structname> contains an array
> of
> +plane structures.</para>
>
> <para>Nominally timestamps refer to the first data byte transmitted.
> In practice however the wide range of hardware covered by the V4L2 API
> @@ -551,26 +644,39 @@ in accordance with the selected I/O method.</entry>
> <entry></entry>
> <entry>__u32</entry>
> <entry><structfield>offset</structfield></entry>
> - <entry>When <structfield>memory</structfield> is
> -<constant>V4L2_MEMORY_MMAP</constant> this is the offset of the buffer
> -from the start of the device memory. The value is returned by the
> -driver and apart of serving as parameter to the &func-mmap; function
> -not useful for applications. See <xref linkend="mmap" /> for details.</entry>
> + <entry>For single-planar API and when
For the
> +<structfield>memory</structfield> is <constant>V4L2_MEMORY_MMAP</constant>
> this
> +is the offset of the buffer from the start of the device memory. The value is
> +returned by the driver and apart of serving as parameter to the &func-mmap;
> +function not useful for applications. See <xref linkend="mmap" /> for details
> + </entry>
> </row>
> <row>
> <entry></entry>
> <entry>unsigned long</entry>
> <entry><structfield>userptr</structfield></entry>
> - <entry>When <structfield>memory</structfield> is
> -<constant>V4L2_MEMORY_USERPTR</constant> this is a pointer to the
> -buffer (casted to unsigned long type) in virtual memory, set by the
> -application. See <xref linkend="userp" /> for details.</entry>
> + <entry>For single-planar API and when
For the
> +<structfield>memory</structfield> is <constant>V4L2_MEMORY_USERPTR</constant>
> +this is a pointer to the buffer (casted to unsigned long type) in virtual
> +memory, set by the application. See <xref linkend="userp" /> for details.
> + </entry>
> + </row>
> + <row>
> + <entry></entry>
> + <entry>struct v4l2_plane</entry>
> + <entry><structfield>*planes</structfield></entry>
> + <entry>When using multi-planar API, contains a userspace pointer
using the
> + to an array of &v4l2-plane;. The size of the array should be put
> + in the <structfield>length</structfield> field of this
> + <structname>v4l2_buffer</structname> structure.</entry>
> </row>
> <row>
> <entry>__u32</entry>
> <entry><structfield>length</structfield></entry>
> <entry></entry>
> - <entry>Size of the buffer (not the payload) in bytes.</entry>
> + <entry>Size of the buffer (not the payload) in bytes for
for the
> + single-planar API. For multi-planar API should contain the number
For the
> + of elements in the <structfield>planes</structfield> array.</entry>
> </row>
> <row>
> <entry>__u32</entry>
> @@ -596,6 +702,64 @@ should set this to 0.</entry>
> </tgroup>
> </table>
>
> + <table frame="none" pgwide="1" id="v4l2-plane">
> + <title>struct <structname>v4l2_plane</structname></title>
> + <tgroup cols="4">
> + &cs-ustr;
> + <tbody valign="top">
> + <row>
> + <entry>__u32</entry>
> + <entry><structfield>bytesused</structfield></entry>
> + <entry></entry>
> + <entry>The number of bytes occupied by data in the plane
> + (its payload).</entry>
> + </row>
> + <row>
> + <entry>__u32</entry>
> + <entry><structfield>length</structfield></entry>
> + <entry></entry>
> + <entry>Size in bytes of the plane (not its payload).</entry>
> + </row>
> + <row>
> + <entry>union</entry>
> + <entry><structfield>m</structfield></entry>
> + <entry></entry>
> + <entry></entry>
> + </row>
> + <row>
> + <entry></entry>
> + <entry>__u32</entry>
> + <entry><structfield>mem_offset</structfield></entry>
> + <entry>When memory type in the containing &v4l2-buffer; is
When the
> + <constant>V4L2_MEMORY_MMAP</constant>, this is the value that
> + should be passed to &func-mmap;, analogically to the
analogically -> similar
> + <structfield>offset</structfield> field in &v4l2-buffer;.</entry>
> + </row>
> + <row>
> + <entry></entry>
> + <entry>__unsigned long</entry>
> + <entry><structfield>userptr</structfield></entry>
> + <entry>When memory type in the containing &v4l2-buffer; is
When the
> + <constant>V4L2_MEMORY_USERPTR</constant>, a userspace pointer
a userspace -> this is a userspace
> + to memory allocated for this plane by an application.</entry>
> + </row>
> + <row>
> + <entry>__u32</entry>
> + <entry><structfield>data_offset</structfield></entry>
> + <entry></entry>
> + <entry>Offset in bytes to video data in the plane, if applicable.
> + </entry>
> + </row>
> + <row>
> + <entry>__u32</entry>
> + <entry><structfield>reserved[11]</structfield></entry>
> + <entry></entry>
> + <entry>Reserved for future use. Should be zero.</entry>
Who zeroes this? Driver and/or application?
> + </row>
> + </tbody>
> + </tgroup>
> + </table>
> +
> <table frame="none" pgwide="1" id="v4l2-buf-type">
> <title>enum v4l2_buf_type</title>
> <tgroup cols="3">
> @@ -604,13 +768,25 @@ should set this to 0.</entry>
> <row>
> <entry><constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant></entry>
> <entry>1</entry>
> - <entry>Buffer of a video capture stream, see <xref
> + <entry>Buffer of a video capture stream, single-planar API see <xref
<entry>Buffer of a single-plane video capture stream, see <xref
> + linkend="capture" />.</entry>
> + </row>
> + <row>
> +
> <entry><constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant></entry>
> + <entry>9</entry>
> + <entry>Buffer of a video capture stream, multi-planar API, see <xref
<entry>Buffer of a multi-planar video capture stream, see <xref
> linkend="capture" />.</entry>
> </row>
> <row>
> <entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant></entry>
> <entry>2</entry>
> - <entry>Buffer of a video output stream, see <xref
> + <entry>Buffer of a video output stream, single-planar API, see <xref
Ditto
> + linkend="output" />.</entry>
> + </row>
> + <row>
> +
> <entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant></entry>
> + <entry>10</entry>
> + <entry>Buffer of a video output stream, multi-planar API, see <xref
Ditto
> linkend="output" />.</entry>
> </row>
> <row>
> diff --git a/Documentation/DocBook/v4l/pixfmt.xml
> b/Documentation/DocBook/v4l/pixfmt.xml
> index cfffc88..1f27928 100644
> --- a/Documentation/DocBook/v4l/pixfmt.xml
> +++ b/Documentation/DocBook/v4l/pixfmt.xml
> @@ -2,12 +2,16 @@
>
> <para>The V4L2 API was primarily designed for devices exchanging
> image data with applications. The
> -<structname>v4l2_pix_format</structname> structure defines the format
> -and layout of an image in memory. Image formats are negotiated with
> -the &VIDIOC-S-FMT; ioctl. (The explanations here focus on video
> +<structname>v4l2_pix_format</structname> and
> <structname>v4l2_pix_format_mplane
> +</structname> structures define the format and layout of an image in memory.
> +The former is used with single-planar API, while the latter with its
The former is used with the single-planar API, while the latter is used with the
> +multi-planar version (see <xref linkend="planar-apis"/>). Image formats are
> +negotiated with the &VIDIOC-S-FMT; ioctl. (The explanations here focus on
> video
> capturing and output, for overlay frame buffer formats see also
> &VIDIOC-G-FBUF;.)</para>
>
> +<section>
> + <title>Single-planar format structure</title>
> <table pgwide="1" frame="none" id="v4l2-pix-format">
> <title>struct <structname>v4l2_pix_format</structname></title>
> <tgroup cols="3">
> @@ -106,6 +110,96 @@ set this field to zero.</entry>
> </tbody>
> </tgroup>
> </table>
> +</section>
> +
> +<section>
> + <title>Multi-planar format structures</title>
> + <para>The <structname>v4l2_plane_pix_format</structname> structures define
> + size and layout for each of the planes in a multi-planar format.
> + The <structname>v4l2_pix_format_mplane</structname> structure contains
> + information common to all planes (such as image width and height) and
> + an array of <structname>v4l2_plane_pix_format</structname> structures,
> + describing all planes of that format.</para>
> + <table pgwide="1" frame="none" id="v4l2-plane-pix-format">
> + <title>struct <structname>vl42_plane_pix_format</structname></title>
> + <tgroup cols="3">
> + &cs-str;
> + <tbody valign="top">
> + <row>
> + <entry>__u32</entry>
> + <entry><structfield>sizeimage</structfield></entry>
> + <entry>Maximum size in bytes required for image data in this plane.
> + </entry>
> + </row>
> + <row>
> + <entry>__u16</entry>
> + <entry><structfield>bytesperline</structfield></entry>
> + <entry>Distance in bytes between the leftmost pixels in two
> adjacent
> + lines.</entry>
> + </row>
> + <row>
> + <entry>__u16</entry>
> + <entry><structfield>reserved[7]</structfield></entry>
> + <entry>Reserved for future extensions. Should be zero.</entry>
Who zeroes this? Driver and/or application?
> + </row>
> + </tbody>
> + </tgroup>
> + </table>
> + <table pgwide="1" frame="none" id="v4l2-pix-format-mplane">
> + <title>struct <structname>v4l2_pix_format_mplane</structname></title>
> + <tgroup cols="3">
> + &cs-str;
> + <tbody valign="top">
> + <row>
> + <entry>__u32</entry>
> + <entry><structfield>width</structfield></entry>
> + <entry>Image width in pixels.</entry>
> + </row>
> + <row>
> + <entry>__u32</entry>
> + <entry><structfield>height</structfield></entry>
> + <entry>Image height in pixels.</entry>
> + </row>
> + <row>
> + <entry>__u32</entry>
> + <entry><structfield>pixelformat</structfield></entry>
> + <entry>The pixel format. Both single- and multi-planar four
> character
> +codes can be used.</entry>
> + </row>
> + <row>
> + <entry>&v4l2-field;</entry>
> + <entry><structfield>field</structfield></entry>
> + <entry>See &v4l2-pix-format;.</entry>
> + </row>
> + <row>
> + <entry>&v4l2-colorspace;</entry>
> + <entry><structfield>colorspace</structfield></entry>
> + <entry>See &v4l2-pix-format;.</entry>
> + </row>
> + <row>
> + <entry>&v4l2-plane-pix-format;</entry>
> +
> <entry><structfield>plane_fmt[VIDEO_MAX_PLANES]</structfield></entry>
> + <entry>An array of structures describing format of each plane this
> + pixel format consists of. The number of valid entries in this array
> + has to be put in the <structfield>num_planes</structfield>
> + field.</entry>
> + </row>
> + <row>
> + <entry>__u8</entry>
> + <entry><structfield>num_planes</structfield></entry>
> + <entry>Number of planes (i.e. separate memory buffers) for this
> format
> + and the number of valid entries in the
> + <structfield>plane_fmt</structfield> array.</entry>
> + </row>
> + <row>
> + <entry>__u8</entry>
> + <entry><structfield>reserved[11]</structfield></entry>
> + <entry>Reserved for future extensions. Should be zero.</entry>
Who zeroes this? Driver and/or application?
> + </row>
> + </tbody>
> + </tgroup>
> + </table>
> +</section>
>
> <section>
> <title>Standard Image Formats</title>
> @@ -142,11 +236,19 @@ leftmost pixel of the second row from the top, and so
> on. The last row
> has just as many pad bytes after it as the other rows.</para>
>
> <para>In V4L2 each format has an identifier which looks like
> -<constant>PIX_FMT_XXX</constant>, defined in the
> <filename>videodev2.h</filename>
> -header file. These identifiers
> -represent <link linkend="v4l2-fourcc">four character codes</link>
> +<constant>PIX_FMT_XXX</constant>, defined in the <link
> +linkend="videodev">videodev.h</link> header file. These identifiers
> +represent <link linkend="v4l2-fourcc">four character (FourCC) codes</link>
> which are also listed below, however they are not the same as those
> used in the Windows world.</para>
> +
> + <para>For some formats, data is stored in separate, discontiguous
> +memory buffers. Those formats are identified by a separate set of FourCC
> codes
> +and are referred to as "multi-planar formats". For example, a YUV422 frame is
> +normally stored in one memory buffer, but it can also be placed in two or
> three
> +separate buffers, with Y component in one buffer and CbCr components in
> another
> +in the 2-planar version and with each component in its own buffer in the
and -> or
> +3-planar case. Those sub-buffers are referred to as "planes".</para>
> </section>
>
> <section id="colorspaces">
> diff --git a/Documentation/DocBook/v4l/planar-apis.xml
> b/Documentation/DocBook/v4l/planar-apis.xml
> new file mode 100644
> index 0000000..ce89831
> --- /dev/null
> +++ b/Documentation/DocBook/v4l/planar-apis.xml
> @@ -0,0 +1,79 @@
> +<section id="planar-apis">
> + <title>Single- and multi-planar APIs</title>
> +
> + <para>Some devices require data for each input or output video frame
> + to be placed in discontiguous memory buffers. In such cases one
> + video frame has to be addressed using more than one memory address, i.e.
> one
> + pointer per "plane". A plane is a sub-buffer of current frame. For examples
> + of such formats see <xref linkend="pixfmt" />.</para>
> +
> + <para>Initially, V4L2 API did not support multi-planar buffers and a set of
> + extensions has been introduced to handle them. Those extensions constitute
> + what is being referred to as the "multi-planar API".</para>
> +
> + <para>Some of the V4L2 API calls and structures are interpreted
> differently,
> + depending on whether single- or multi-planar API is being used. An
> application
> + can choose whether to use one or the other by passing a corresponding
> buffer
> + type to its ioctl calls. Multi-planar versions of buffer types are
> suffixed with
> + an `_MPLANE' string. For a list of available multi-planar buffer types
> + see &v4l2-buf-type;.
> + </para>
> +
> + <section>
> + <title>Multi-planar formats</title>
> + <para>Multi-planar API introduces new multi-planar formats. Those formats
> + use a separate set of FourCC codes. It is important to distinguish
> between
> + the multi-planar API and a multi-planar format. Multi-planar API calls
> can
> + handle all single-planar formats as well, while single-planar API cannot
while -> while the
> + handle multi-planar formats. Applications do not have to switch between
> APIs
> + when handling both single- and multi-planar devices and should use the
> + multi-planar API version for both single- and multi-planar formats.
> + Drivers that do not support multi-planar API can still be handled with
> it,
> + utilizing a compatibility layer built into standard V4L2 ioctl handling.
> + </para>
> + </section>
> +
> + <section>
> + <title>Single and multi-planar API compatibility layer</title>
> + <para>In most cases, applications can use the multi-planar API with older
'In most cases': I know why, but we really need to work on converting those
drivers that still do not use video_ioctl2 :-(
Perhaps a footnote explaining this might be useful here.
> + drivers that support only its single-planar version and vice versa.
> + Appropriate conversion is done seamlessly for both applications and
> drivers
> + in the V4L2 core. The general rule of thumb is: as long as an application
> + uses formats that a driver supports, it can use either API (although use
> + of multi-planar formats is only possible with the multi-planar API). The
> + list of formats supported by a driver can be obtained using the
> + &VIDIOC-ENUM-FMT; call. It is possible, but discouraged, for a driver or
> + an application to support and use both versions of the API.</para>
> + </section>
> +
> + <section>
> + <title>Calls that distinguish between single and multi-planar
> APIs</title>
> + <variablelist>
> + <varlistentry>
> + <term>&VIDIOC-QUERYCAP;</term>
> + <listitem>Two additional multi-planar capabilities are added. They
> can
> + be set together with non-multi-planar ones for devices that support
> both
> + APIs.</listitem>
What happens if a driver supports only single-planar API, but the core adds
transparent support for multi-planar API? Are the MPLANE caps set or not?
I can't remember what we decided to do. Ditto for the other way around (driver
does only multi-planar, but core adds single-planar support).
> + </varlistentry>
> + <varlistentry>
> + <term>&VIDIOC-G-FMT;, &VIDIOC-S-FMT;, &VIDIOC-TRY-FMT;</term>
> + <listitem>New structures for describing multi-planar formats are
> added:
> + &v4l2-pix-format-mplane; and &v4l2-plane-pix-format;. Drivers may
> + define new multi-planar formats, which have distinct FourCC codes
> from
> + the existing single-planar ones.
> + </listitem>
> + </varlistentry>
> + <varlistentry>
> + <term>&VIDIOC-QBUF;, &VIDIOC-DQBUF;, &VIDIOC-QUERYBUF;</term>
> + <listitem>A new &v4l2-plane; structure for describing planes is
> added.
> + Arrays of this structure are passed in the new
> + <structfield>m.planes</structfield> field of &v4l2-buffer;.
> + </listitem>
> + </varlistentry>
> + <varlistentry>
> + <term>&VIDIOC-REQBUFS;</term>
> + <listitem>Will allocate multi-planar buffers as requested.</listitem>
> + </varlistentry>
> + </variablelist>
> + </section>
> +</section>
> diff --git a/Documentation/DocBook/v4l/v4l2.xml
> b/Documentation/DocBook/v4l/v4l2.xml
> index 839e93e..906819f 100644
> --- a/Documentation/DocBook/v4l/v4l2.xml
> +++ b/Documentation/DocBook/v4l/v4l2.xml
> @@ -85,6 +85,17 @@ Remote Controller chapter.</contrib>
> </address>
> </affiliation>
> </author>
> +
> + <author>
> + <firstname>Pawel</firstname>
> + <surname>Osciak</surname>
> + <contrib>Designed and documented the multi-planar API.</contrib>
> + <affiliation>
> + <address>
> + <email>pawel AT osciak.com</email>
> + </address>
> + </affiliation>
> + </author>
> </authorgroup>
>
> <copyright>
> @@ -101,7 +112,8 @@ Remote Controller chapter.</contrib>
> <year>2009</year>
> <year>2010</year>
> <holder>Bill Dirks, Michael H. Schimek, Hans Verkuil, Martin
> -Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab</holder>
> +Rubli, Andy Walls, Muralidharan Karicheri, Mauro Carvalho Chehab,
> + Pawel Osciak</holder>
> </copyright>
> <legalnotice>
> <para>Except when explicitly stated as GPL, programming examples within
> @@ -115,6 +127,13 @@ structs, ioctls) must be noted in more detail in the
> history chapter
> applications. -->
>
> <revision>
> + <revnumber>2.6.38</revnumber>
> + <authorinitials>po</authorinitials>
> + <revremark>Added the <link linkend="planar-apis">multi-planar
> API</link>.
> + </revremark>
> + </revision>
> +
> + <revision>
> <revnumber>2.6.37</revnumber>
> <date>2010-08-06</date>
> <authorinitials>hv</authorinitials>
> diff --git a/Documentation/DocBook/v4l/vidioc-enum-fmt.xml
> b/Documentation/DocBook/v4l/vidioc-enum-fmt.xml
> index 960d446..71d373b 100644
> --- a/Documentation/DocBook/v4l/vidioc-enum-fmt.xml
> +++ b/Documentation/DocBook/v4l/vidioc-enum-fmt.xml
> @@ -76,7 +76,9 @@ pixelformat</structfield> field.</entry>
> <entry>Type of the data stream, set by the application.
> Only these types are valid here:
> <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>,
> +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant>,
> <constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>,
> +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant>,
> <constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>, and custom (driver
> defined) types with code <constant>V4L2_BUF_TYPE_PRIVATE</constant>
> and higher.</entry>
> diff --git a/Documentation/DocBook/v4l/vidioc-g-fmt.xml
> b/Documentation/DocBook/v4l/vidioc-g-fmt.xml
> index 7c7d1b7..a4ae59b 100644
> --- a/Documentation/DocBook/v4l/vidioc-g-fmt.xml
> +++ b/Documentation/DocBook/v4l/vidioc-g-fmt.xml
> @@ -60,11 +60,13 @@ application.</para>
> <structfield>type</structfield> field of a struct
> <structname>v4l2_format</structname> to the respective buffer (stream)
> type. For example video capture devices use
> -<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>. When the application
> +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> or
> +<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant>. When the application
> calls the <constant>VIDIOC_G_FMT</constant> ioctl with a pointer to
> this structure the driver fills the respective member of the
> <structfield>fmt</structfield> union. In case of video capture devices
> -that is the &v4l2-pix-format; <structfield>pix</structfield> member.
> +that is either the &v4l2-pix-format; <structfield>pix</structfield> or
> +the &v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member.
> When the requested buffer type is not supported drivers return an
> &EINVAL;.</para>
>
> @@ -134,6 +136,15 @@ devices.</entry>
> </row>
> <row>
> <entry></entry>
> + <entry>&v4l2-pix-format-mplane;</entry>
> + <entry><structfield>pix_mp</structfield></entry>
> + <entry>Definition of an image format, see <xref
> + linkend="pixfmt" />, used by video capture and output
> +devices that support the <link linkend="planar-apis">multi-planar
> +version of the API</link>.</entry>
> + </row>
> + <row>
> + <entry></entry>
> <entry>&v4l2-window;</entry>
> <entry><structfield>win</structfield></entry>
> <entry>Definition of an overlaid image, see <xref
> diff --git a/Documentation/DocBook/v4l/vidioc-qbuf.xml
> b/Documentation/DocBook/v4l/vidioc-qbuf.xml
> index ab691eb..c9e3537 100644
> --- a/Documentation/DocBook/v4l/vidioc-qbuf.xml
> +++ b/Documentation/DocBook/v4l/vidioc-qbuf.xml
> @@ -64,7 +64,8 @@ zero to the number of buffers allocated with
> &VIDIOC-REQBUFS;
> contents of the struct <structname>v4l2_buffer</structname> returned
> by a &VIDIOC-QUERYBUF; ioctl will do as well. When the buffer is
> intended for output (<structfield>type</structfield> is
> -<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> or
> +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>,
> +<constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant>, or
> <constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant>) applications must also
> initialize the <structfield>bytesused</structfield>,
> <structfield>field</structfield> and
> @@ -75,7 +76,11 @@ supports capturing from specific video inputs and you want
> to specify a video
> input, then <structfield>flags</structfield> should be set to
> <constant>V4L2_BUF_FLAG_INPUT</constant> and the field
> <structfield>input</structfield> must be initialized to the desired input.
> -The <structfield>reserved</structfield> field must be set to 0.
> +The <structfield>reserved</structfield> field must be set to 0. When using
> +the <link linkend="planar-apis">multi-planar API</link>, the
> +<structfield>m.planes</structfield> field must contain a userspace pointer
> +to an array of &v4l2-plane; filled in and the
> <structfield>length</structfield>
to a filled-in array of
> +field must be set to the number of elements in that array.
> </para>
>
> <para>To enqueue a <link linkend="mmap">memory mapped</link>
> @@ -93,10 +98,13 @@ structure the driver sets the
> buffer applications set the <structfield>memory</structfield>
> field to <constant>V4L2_MEMORY_USERPTR</constant>, the
> <structfield>m.userptr</structfield> field to the address of the
> -buffer and <structfield>length</structfield> to its size.
> -When <constant>VIDIOC_QBUF</constant> is called with a pointer to this
> -structure the driver sets the <constant>V4L2_BUF_FLAG_QUEUED</constant>
> -flag and clears the <constant>V4L2_BUF_FLAG_MAPPED</constant> and
> +buffer and <structfield>length</structfield> to its size. When multi-planar
When the
> +API is used, <structfield>m.userptr</structfield> and
> +<structfield>length</structfield> members of the passed array of &v4l2-plane;
> +have to be used instead. When <constant>VIDIOC_QBUF</constant> is called with
> +a pointer to this structure the driver sets the
> +<constant>V4L2_BUF_FLAG_QUEUED</constant> flag and clears the
> +<constant>V4L2_BUF_FLAG_MAPPED</constant> and
> <constant>V4L2_BUF_FLAG_DONE</constant> flags in the
> <structfield>flags</structfield> field, or it returns an error code.
> This ioctl locks the memory pages of the buffer in physical memory,
> @@ -115,7 +123,9 @@ remaining fields or returns an error code. The driver may
> also set
> <constant>V4L2_BUF_FLAG_ERROR</constant> in the
> <structfield>flags</structfield>
> field. It indicates a non-critical (recoverable) streaming error. In such
> case
> the application may continue as normal, but should be aware that data in the
> -dequeued buffer might be corrupted.</para>
> +dequeued buffer might be corrupted. When using the multi-planar API, the
> +planes array does not have to be passed; the
> <structfield>m.planes</structfield>
> +member must be set to NULL in that case.</para>
>
> <para>By default <constant>VIDIOC_DQBUF</constant> blocks when no
> buffer is in the outgoing queue. When the
> diff --git a/Documentation/DocBook/v4l/vidioc-querybuf.xml
> b/Documentation/DocBook/v4l/vidioc-querybuf.xml
> index e649805..aad79a6 100644
> --- a/Documentation/DocBook/v4l/vidioc-querybuf.xml
> +++ b/Documentation/DocBook/v4l/vidioc-querybuf.xml
> @@ -61,6 +61,10 @@ buffer at any time after buffers have been allocated with
> the
> to the number of buffers allocated with &VIDIOC-REQBUFS;
> (&v4l2-requestbuffers; <structfield>count</structfield>) minus one.
> The <structfield>reserved</structfield> field should to set to 0.
> +When using the <link linkend="planar-apis">multi-planar API</link>, the
> +<structfield>m.planes</structfield> field must contain a userspace pointer
> to an
> +array of &v4l2-plane; and the <structfield>length</structfield> field has
> +to be set to the number of elements in that array.
> After calling <constant>VIDIOC_QUERYBUF</constant> with a pointer to
> this structure drivers return an error code or fill the rest of
> the structure.</para>
> @@ -70,11 +74,13 @@ the structure.</para>
> <constant>V4L2_BUF_FLAG_QUEUED</constant> and
> <constant>V4L2_BUF_FLAG_DONE</constant> flags will be valid. The
> <structfield>memory</structfield> field will be set to the current
> -I/O method, the <structfield>m.offset</structfield>
> +I/O method. For single-planar API, the <structfield>m.offset</structfield>
For the
> contains the offset of the buffer from the start of the device memory,
> -the <structfield>length</structfield> field its size. The driver may
> -or may not set the remaining fields and flags, they are meaningless in
> -this context.</para>
> +the <structfield>length</structfield> field its size. For multi-planar API,
For the
> +fields <structfield>m.mem_offset</structfield> and
> +<structfield>length</structfield> in <structfield>m.planes</structfield>
> array
in -> in the
> +elements will be used instead. The driver may or may not set the remaining
> +fields and flags, they are meaningless in this context.</para>
>
> <para>The <structname>v4l2_buffer</structname> structure is
> specified in <xref linkend="buffer" />.</para>
> diff --git a/Documentation/DocBook/v4l/vidioc-querycap.xml
> b/Documentation/DocBook/v4l/vidioc-querycap.xml
> index d499da9..5192bca 100644
> --- a/Documentation/DocBook/v4l/vidioc-querycap.xml
> +++ b/Documentation/DocBook/v4l/vidioc-querycap.xml
> @@ -146,12 +146,26 @@ this array to zero.</entry>
> linkend="capture">Video Capture</link> interface.</entry>
> </row>
> <row>
> + <entry><constant>V4L2_CAP_VIDEO_CAPTURE_MPLANE</constant></entry>
> + <entry>0x00001000</entry>
> + <entry>The device supports the <link
> +linkend="capture">Video Capture</link> interface through the
> +<link linkend="planar-apis">multi-planar API</link>.</entry>
> + </row>
> + <row>
> <entry><constant>V4L2_CAP_VIDEO_OUTPUT</constant></entry>
> <entry>0x00000002</entry>
> <entry>The device supports the <link
> linkend="output">Video Output</link> interface.</entry>
> </row>
> <row>
> + <entry><constant>V4L2_CAP_VIDEO_OUTPUT_MPLANE</constant></entry>
> + <entry>0x00002000</entry>
> + <entry>The device supports the <link
> +linkend="output">Video Output</link> interface through the
> +<link linkend="planar-apis">multi-planar API</link>.</entry>
> + </row>
> + <row>
> <entry><constant>V4L2_CAP_VIDEO_OVERLAY</constant></entry>
> <entry>0x00000004</entry>
> <entry>The device supports the <link
>
Thank you for the documentation!
Regards,
Hans
--
Hans Verkuil - video4linux developer - sponsored by Cisco
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html