diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-24 12:50:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-24 12:50:13 -0400 |
commit | 76d21c563569bcea6bc67d65cc2c460cff643058 (patch) | |
tree | 4dd2c9846ea7838077099646418978e354df1680 /Documentation/DocBook/v4l/io.xml | |
parent | 6e50e9f9f4a8277b4d76de417ca77cf3921bd524 (diff) | |
parent | 472af2b05bdefcaee7e754e22cbf131110017ad6 (diff) |
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (442 commits)
[media] videobuf2-dma-contig: make cookie() return a pointer to dma_addr_t
[media] sh_mobile_ceu_camera: Do not call vb2's mem_ops directly
[media] V4L: soc-camera: explicitly require V4L2_BUF_TYPE_VIDEO_CAPTURE
[media] v4l: soc-camera: Store negotiated buffer settings
[media] rc: interim support for 32-bit NEC-ish scancodes
[media] mceusb: topseed 0x0011 needs gen3 init for tx to work
[media] lirc_zilog: error out if buffer read bytes != chunk size
[media] lirc: silence some compile warnings
[media] hdpvr: use same polling interval as other OS
[media] ir-kbd-i2c: pass device code w/key in hauppauge case
[media] rc/keymaps: Remove the obsolete rc-rc5-tv keymap
[media] remove the old RC_MAP_HAUPPAUGE_NEW RC map
[media] rc/keymaps: Rename Hauppauge table as rc-hauppauge
[media] rc-rc5-hauppauge-new: Fix Hauppauge Grey mapping
[media] rc-rc5-hauppauge-new: Add support for the old Black RC
[media] rc-rc5-hauppauge-new: Add the old control to the table
[media] rc-winfast: Fix the keycode tables
[media] a800: Fix a few wrong IR key assignments
[media] opera1: Use multimedia keys instead of an app-specific mapping
[media] dw2102: Use multimedia keys instead of an app-specific mapping
...
Fix up trivial conflicts (remove/modify and some real conflicts) in:
arch/arm/mach-omap2/devices.c
drivers/staging/Kconfig
drivers/staging/Makefile
drivers/staging/dabusb/dabusb.c
drivers/staging/dabusb/dabusb.h
drivers/staging/easycap/easycap_ioctl.c
drivers/staging/usbvideo/usbvideo.c
drivers/staging/usbvideo/vicam.c
Diffstat (limited to 'Documentation/DocBook/v4l/io.xml')
-rw-r--r-- | Documentation/DocBook/v4l/io.xml | 283 |
1 files changed, 232 insertions, 51 deletions
diff --git a/Documentation/DocBook/v4l/io.xml b/Documentation/DocBook/v4l/io.xml index d424886beda0..227e7ac45a06 100644 --- a/Documentation/DocBook/v4l/io.xml +++ b/Documentation/DocBook/v4l/io.xml | |||
@@ -121,18 +121,22 @@ mapped.</para> | |||
121 | <para>Before applications can access the buffers they must map | 121 | <para>Before applications can access the buffers they must map |
122 | them into their address space with the &func-mmap; function. The | 122 | them into their address space with the &func-mmap; function. The |
123 | location of the buffers in device memory can be determined with the | 123 | location of the buffers in device memory can be determined with the |
124 | &VIDIOC-QUERYBUF; ioctl. The <structfield>m.offset</structfield> and | 124 | &VIDIOC-QUERYBUF; ioctl. In the single-planar API case, the |
125 | <structfield>length</structfield> returned in a &v4l2-buffer; are | 125 | <structfield>m.offset</structfield> and <structfield>length</structfield> |
126 | passed as sixth and second parameter to the | 126 | returned in a &v4l2-buffer; are passed as sixth and second parameter to the |
127 | <function>mmap()</function> function. The offset and length values | 127 | <function>mmap()</function> function. When using the multi-planar API, |
128 | must not be modified. Remember the buffers are allocated in physical | 128 | struct &v4l2-buffer; contains an array of &v4l2-plane; structures, each |
129 | memory, as opposed to virtual memory which can be swapped out to disk. | 129 | containing its own <structfield>m.offset</structfield> and |
130 | Applications should free the buffers as soon as possible with the | 130 | <structfield>length</structfield>. When using the multi-planar API, every |
131 | &func-munmap; function.</para> | 131 | plane of every buffer has to be mapped separately, so the number of |
132 | calls to &func-mmap; should be equal to number of buffers times number of | ||
133 | planes in each buffer. The offset and length values must not be modified. | ||
134 | Remember, the buffers are allocated in physical memory, as opposed to virtual | ||
135 | memory, which can be swapped out to disk. Applications should free the buffers | ||
136 | as soon as possible with the &func-munmap; function.</para> | ||
132 | 137 | ||
133 | <example> | 138 | <example> |
134 | <title>Mapping buffers</title> | 139 | <title>Mapping buffers in the single-planar API</title> |
135 | |||
136 | <programlisting> | 140 | <programlisting> |
137 | &v4l2-requestbuffers; reqbuf; | 141 | &v4l2-requestbuffers; reqbuf; |
138 | struct { | 142 | struct { |
@@ -141,63 +145,145 @@ struct { | |||
141 | } *buffers; | 145 | } *buffers; |
142 | unsigned int i; | 146 | unsigned int i; |
143 | 147 | ||
144 | memset (&reqbuf, 0, sizeof (reqbuf)); | 148 | memset(&reqbuf, 0, sizeof(reqbuf)); |
145 | reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | 149 | reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; |
146 | reqbuf.memory = V4L2_MEMORY_MMAP; | 150 | reqbuf.memory = V4L2_MEMORY_MMAP; |
147 | reqbuf.count = 20; | 151 | reqbuf.count = 20; |
148 | 152 | ||
149 | if (-1 == ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf)) { | 153 | if (-1 == ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf)) { |
150 | if (errno == EINVAL) | 154 | if (errno == EINVAL) |
151 | printf ("Video capturing or mmap-streaming is not supported\n"); | 155 | printf("Video capturing or mmap-streaming is not supported\n"); |
152 | else | 156 | else |
153 | perror ("VIDIOC_REQBUFS"); | 157 | perror("VIDIOC_REQBUFS"); |
154 | 158 | ||
155 | exit (EXIT_FAILURE); | 159 | exit(EXIT_FAILURE); |
156 | } | 160 | } |
157 | 161 | ||
158 | /* We want at least five buffers. */ | 162 | /* We want at least five buffers. */ |
159 | 163 | ||
160 | if (reqbuf.count < 5) { | 164 | if (reqbuf.count < 5) { |
161 | /* You may need to free the buffers here. */ | 165 | /* You may need to free the buffers here. */ |
162 | printf ("Not enough buffer memory\n"); | 166 | printf("Not enough buffer memory\n"); |
163 | exit (EXIT_FAILURE); | 167 | exit(EXIT_FAILURE); |
164 | } | 168 | } |
165 | 169 | ||
166 | buffers = calloc (reqbuf.count, sizeof (*buffers)); | 170 | buffers = calloc(reqbuf.count, sizeof(*buffers)); |
167 | assert (buffers != NULL); | 171 | assert(buffers != NULL); |
168 | 172 | ||
169 | for (i = 0; i < reqbuf.count; i++) { | 173 | for (i = 0; i < reqbuf.count; i++) { |
170 | &v4l2-buffer; buffer; | 174 | &v4l2-buffer; buffer; |
171 | 175 | ||
172 | memset (&buffer, 0, sizeof (buffer)); | 176 | memset(&buffer, 0, sizeof(buffer)); |
173 | buffer.type = reqbuf.type; | 177 | buffer.type = reqbuf.type; |
174 | buffer.memory = V4L2_MEMORY_MMAP; | 178 | buffer.memory = V4L2_MEMORY_MMAP; |
175 | buffer.index = i; | 179 | buffer.index = i; |
176 | 180 | ||
177 | if (-1 == ioctl (fd, &VIDIOC-QUERYBUF;, &buffer)) { | 181 | if (-1 == ioctl (fd, &VIDIOC-QUERYBUF;, &buffer)) { |
178 | perror ("VIDIOC_QUERYBUF"); | 182 | perror("VIDIOC_QUERYBUF"); |
179 | exit (EXIT_FAILURE); | 183 | exit(EXIT_FAILURE); |
180 | } | 184 | } |
181 | 185 | ||
182 | buffers[i].length = buffer.length; /* remember for munmap() */ | 186 | buffers[i].length = buffer.length; /* remember for munmap() */ |
183 | 187 | ||
184 | buffers[i].start = mmap (NULL, buffer.length, | 188 | buffers[i].start = mmap(NULL, buffer.length, |
185 | PROT_READ | PROT_WRITE, /* recommended */ | 189 | PROT_READ | PROT_WRITE, /* recommended */ |
186 | MAP_SHARED, /* recommended */ | 190 | MAP_SHARED, /* recommended */ |
187 | fd, buffer.m.offset); | 191 | fd, buffer.m.offset); |
188 | 192 | ||
189 | if (MAP_FAILED == buffers[i].start) { | 193 | if (MAP_FAILED == buffers[i].start) { |
190 | /* If you do not exit here you should unmap() and free() | 194 | /* If you do not exit here you should unmap() and free() |
191 | the buffers mapped so far. */ | 195 | the buffers mapped so far. */ |
192 | perror ("mmap"); | 196 | perror("mmap"); |
193 | exit (EXIT_FAILURE); | 197 | exit(EXIT_FAILURE); |
198 | } | ||
199 | } | ||
200 | |||
201 | /* Cleanup. */ | ||
202 | |||
203 | for (i = 0; i < reqbuf.count; i++) | ||
204 | munmap(buffers[i].start, buffers[i].length); | ||
205 | </programlisting> | ||
206 | </example> | ||
207 | |||
208 | <example> | ||
209 | <title>Mapping buffers in the multi-planar API</title> | ||
210 | <programlisting> | ||
211 | &v4l2-requestbuffers; reqbuf; | ||
212 | /* Our current format uses 3 planes per buffer */ | ||
213 | #define FMT_NUM_PLANES = 3; | ||
214 | |||
215 | struct { | ||
216 | void *start[FMT_NUM_PLANES]; | ||
217 | size_t length[FMT_NUM_PLANES]; | ||
218 | } *buffers; | ||
219 | unsigned int i, j; | ||
220 | |||
221 | memset(&reqbuf, 0, sizeof(reqbuf)); | ||
222 | reqbuf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; | ||
223 | reqbuf.memory = V4L2_MEMORY_MMAP; | ||
224 | reqbuf.count = 20; | ||
225 | |||
226 | if (ioctl(fd, &VIDIOC-REQBUFS;, &reqbuf) < 0) { | ||
227 | if (errno == EINVAL) | ||
228 | printf("Video capturing or mmap-streaming is not supported\n"); | ||
229 | else | ||
230 | perror("VIDIOC_REQBUFS"); | ||
231 | |||
232 | exit(EXIT_FAILURE); | ||
233 | } | ||
234 | |||
235 | /* We want at least five buffers. */ | ||
236 | |||
237 | if (reqbuf.count < 5) { | ||
238 | /* You may need to free the buffers here. */ | ||
239 | printf("Not enough buffer memory\n"); | ||
240 | exit(EXIT_FAILURE); | ||
241 | } | ||
242 | |||
243 | buffers = calloc(reqbuf.count, sizeof(*buffers)); | ||
244 | assert(buffers != NULL); | ||
245 | |||
246 | for (i = 0; i < reqbuf.count; i++) { | ||
247 | &v4l2-buffer; buffer; | ||
248 | &v4l2-plane; planes[FMT_NUM_PLANES]; | ||
249 | |||
250 | memset(&buffer, 0, sizeof(buffer)); | ||
251 | buffer.type = reqbuf.type; | ||
252 | buffer.memory = V4L2_MEMORY_MMAP; | ||
253 | buffer.index = i; | ||
254 | /* length in struct v4l2_buffer in multi-planar API stores the size | ||
255 | * of planes array. */ | ||
256 | buffer.length = FMT_NUM_PLANES; | ||
257 | buffer.m.planes = planes; | ||
258 | |||
259 | if (ioctl(fd, &VIDIOC-QUERYBUF;, &buffer) < 0) { | ||
260 | perror("VIDIOC_QUERYBUF"); | ||
261 | exit(EXIT_FAILURE); | ||
262 | } | ||
263 | |||
264 | /* Every plane has to be mapped separately */ | ||
265 | for (j = 0; j < FMT_NUM_PLANES; j++) { | ||
266 | buffers[i].length[j] = buffer.m.planes[j].length; /* remember for munmap() */ | ||
267 | |||
268 | buffers[i].start[j] = mmap(NULL, buffer.m.planes[j].length, | ||
269 | PROT_READ | PROT_WRITE, /* recommended */ | ||
270 | MAP_SHARED, /* recommended */ | ||
271 | fd, buffer.m.planes[j].m.offset); | ||
272 | |||
273 | if (MAP_FAILED == buffers[i].start[j]) { | ||
274 | /* If you do not exit here you should unmap() and free() | ||
275 | the buffers and planes mapped so far. */ | ||
276 | perror("mmap"); | ||
277 | exit(EXIT_FAILURE); | ||
278 | } | ||
194 | } | 279 | } |
195 | } | 280 | } |
196 | 281 | ||
197 | /* Cleanup. */ | 282 | /* Cleanup. */ |
198 | 283 | ||
199 | for (i = 0; i < reqbuf.count; i++) | 284 | for (i = 0; i < reqbuf.count; i++) |
200 | munmap (buffers[i].start, buffers[i].length); | 285 | for (j = 0; j < FMT_NUM_PLANES; j++) |
286 | munmap(buffers[i].start[j], buffers[i].length[j]); | ||
201 | </programlisting> | 287 | </programlisting> |
202 | </example> | 288 | </example> |
203 | 289 | ||
@@ -286,13 +372,13 @@ pointer method (not only memory mapping) is supported must be | |||
286 | determined by calling the &VIDIOC-REQBUFS; ioctl.</para> | 372 | determined by calling the &VIDIOC-REQBUFS; ioctl.</para> |
287 | 373 | ||
288 | <para>This I/O method combines advantages of the read/write and | 374 | <para>This I/O method combines advantages of the read/write and |
289 | memory mapping methods. Buffers are allocated by the application | 375 | memory mapping methods. Buffers (planes) are allocated by the application |
290 | itself, and can reside for example in virtual or shared memory. Only | 376 | itself, and can reside for example in virtual or shared memory. Only |
291 | pointers to data are exchanged, these pointers and meta-information | 377 | pointers to data are exchanged, these pointers and meta-information |
292 | are passed in &v4l2-buffer;. The driver must be switched | 378 | are passed in &v4l2-buffer; (or in &v4l2-plane; in the multi-planar API case). |
293 | into user pointer I/O mode by calling the &VIDIOC-REQBUFS; with the | 379 | The driver must be switched into user pointer I/O mode by calling the |
294 | desired buffer type. No buffers are allocated beforehands, | 380 | &VIDIOC-REQBUFS; with the desired buffer type. No buffers (planes) are allocated |
295 | consequently they are not indexed and cannot be queried like mapped | 381 | beforehand, consequently they are not indexed and cannot be queried like mapped |
296 | buffers with the <constant>VIDIOC_QUERYBUF</constant> ioctl.</para> | 382 | buffers with the <constant>VIDIOC_QUERYBUF</constant> ioctl.</para> |
297 | 383 | ||
298 | <example> | 384 | <example> |
@@ -316,7 +402,7 @@ if (ioctl (fd, &VIDIOC-REQBUFS;, &reqbuf) == -1) { | |||
316 | </programlisting> | 402 | </programlisting> |
317 | </example> | 403 | </example> |
318 | 404 | ||
319 | <para>Buffer addresses and sizes are passed on the fly with the | 405 | <para>Buffer (plane) addresses and sizes are passed on the fly with the |
320 | &VIDIOC-QBUF; ioctl. Although buffers are commonly cycled, | 406 | &VIDIOC-QBUF; ioctl. Although buffers are commonly cycled, |
321 | applications can pass different addresses and sizes at each | 407 | applications can pass different addresses and sizes at each |
322 | <constant>VIDIOC_QBUF</constant> call. If required by the hardware the | 408 | <constant>VIDIOC_QBUF</constant> call. If required by the hardware the |
@@ -396,11 +482,18 @@ rest should be evident.</para> | |||
396 | <title>Buffers</title> | 482 | <title>Buffers</title> |
397 | 483 | ||
398 | <para>A buffer contains data exchanged by application and | 484 | <para>A buffer contains data exchanged by application and |
399 | driver using one of the Streaming I/O methods. Only pointers to | 485 | driver using one of the Streaming I/O methods. In the multi-planar API, the |
400 | buffers are exchanged, the data itself is not copied. These pointers, | 486 | data is held in planes, while the buffer structure acts as a container |
401 | together with meta-information like timestamps or field parity, are | 487 | for the planes. Only pointers to buffers (planes) are exchanged, the data |
402 | stored in a struct <structname>v4l2_buffer</structname>, argument to | 488 | itself is not copied. These pointers, together with meta-information like |
403 | the &VIDIOC-QUERYBUF;, &VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl.</para> | 489 | timestamps or field parity, are stored in a struct |
490 | <structname>v4l2_buffer</structname>, argument to | ||
491 | the &VIDIOC-QUERYBUF;, &VIDIOC-QBUF; and &VIDIOC-DQBUF; ioctl. | ||
492 | In the multi-planar API, some plane-specific members of struct | ||
493 | <structname>v4l2_buffer</structname>, such as pointers and sizes for each | ||
494 | plane, are stored in struct <structname>v4l2_plane</structname> instead. | ||
495 | In that case, struct <structname>v4l2_buffer</structname> contains an array of | ||
496 | plane structures.</para> | ||
404 | 497 | ||
405 | <para>Nominally timestamps refer to the first data byte transmitted. | 498 | <para>Nominally timestamps refer to the first data byte transmitted. |
406 | In practice however the wide range of hardware covered by the V4L2 API | 499 | In practice however the wide range of hardware covered by the V4L2 API |
@@ -551,26 +644,40 @@ in accordance with the selected I/O method.</entry> | |||
551 | <entry></entry> | 644 | <entry></entry> |
552 | <entry>__u32</entry> | 645 | <entry>__u32</entry> |
553 | <entry><structfield>offset</structfield></entry> | 646 | <entry><structfield>offset</structfield></entry> |
554 | <entry>When <structfield>memory</structfield> is | 647 | <entry>For the single-planar API and when |
555 | <constant>V4L2_MEMORY_MMAP</constant> this is the offset of the buffer | 648 | <structfield>memory</structfield> is <constant>V4L2_MEMORY_MMAP</constant> this |
556 | from the start of the device memory. The value is returned by the | 649 | is the offset of the buffer from the start of the device memory. The value is |
557 | driver and apart of serving as parameter to the &func-mmap; function | 650 | returned by the driver and apart of serving as parameter to the &func-mmap; |
558 | not useful for applications. See <xref linkend="mmap" /> for details.</entry> | 651 | function not useful for applications. See <xref linkend="mmap" /> for details |
652 | </entry> | ||
559 | </row> | 653 | </row> |
560 | <row> | 654 | <row> |
561 | <entry></entry> | 655 | <entry></entry> |
562 | <entry>unsigned long</entry> | 656 | <entry>unsigned long</entry> |
563 | <entry><structfield>userptr</structfield></entry> | 657 | <entry><structfield>userptr</structfield></entry> |
564 | <entry>When <structfield>memory</structfield> is | 658 | <entry>For the single-planar API and when |
565 | <constant>V4L2_MEMORY_USERPTR</constant> this is a pointer to the | 659 | <structfield>memory</structfield> is <constant>V4L2_MEMORY_USERPTR</constant> |
566 | buffer (casted to unsigned long type) in virtual memory, set by the | 660 | this is a pointer to the buffer (casted to unsigned long type) in virtual |
567 | application. See <xref linkend="userp" /> for details.</entry> | 661 | memory, set by the application. See <xref linkend="userp" /> for details. |
662 | </entry> | ||
663 | </row> | ||
664 | <row> | ||
665 | <entry></entry> | ||
666 | <entry>struct v4l2_plane</entry> | ||
667 | <entry><structfield>*planes</structfield></entry> | ||
668 | <entry>When using the multi-planar API, contains a userspace pointer | ||
669 | to an array of &v4l2-plane;. The size of the array should be put | ||
670 | in the <structfield>length</structfield> field of this | ||
671 | <structname>v4l2_buffer</structname> structure.</entry> | ||
568 | </row> | 672 | </row> |
569 | <row> | 673 | <row> |
570 | <entry>__u32</entry> | 674 | <entry>__u32</entry> |
571 | <entry><structfield>length</structfield></entry> | 675 | <entry><structfield>length</structfield></entry> |
572 | <entry></entry> | 676 | <entry></entry> |
573 | <entry>Size of the buffer (not the payload) in bytes.</entry> | 677 | <entry>Size of the buffer (not the payload) in bytes for the |
678 | single-planar API. For the multi-planar API should contain the | ||
679 | number of elements in the <structfield>planes</structfield> array. | ||
680 | </entry> | ||
574 | </row> | 681 | </row> |
575 | <row> | 682 | <row> |
576 | <entry>__u32</entry> | 683 | <entry>__u32</entry> |
@@ -596,6 +703,66 @@ should set this to 0.</entry> | |||
596 | </tgroup> | 703 | </tgroup> |
597 | </table> | 704 | </table> |
598 | 705 | ||
706 | <table frame="none" pgwide="1" id="v4l2-plane"> | ||
707 | <title>struct <structname>v4l2_plane</structname></title> | ||
708 | <tgroup cols="4"> | ||
709 | &cs-ustr; | ||
710 | <tbody valign="top"> | ||
711 | <row> | ||
712 | <entry>__u32</entry> | ||
713 | <entry><structfield>bytesused</structfield></entry> | ||
714 | <entry></entry> | ||
715 | <entry>The number of bytes occupied by data in the plane | ||
716 | (its payload).</entry> | ||
717 | </row> | ||
718 | <row> | ||
719 | <entry>__u32</entry> | ||
720 | <entry><structfield>length</structfield></entry> | ||
721 | <entry></entry> | ||
722 | <entry>Size in bytes of the plane (not its payload).</entry> | ||
723 | </row> | ||
724 | <row> | ||
725 | <entry>union</entry> | ||
726 | <entry><structfield>m</structfield></entry> | ||
727 | <entry></entry> | ||
728 | <entry></entry> | ||
729 | </row> | ||
730 | <row> | ||
731 | <entry></entry> | ||
732 | <entry>__u32</entry> | ||
733 | <entry><structfield>mem_offset</structfield></entry> | ||
734 | <entry>When the memory type in the containing &v4l2-buffer; is | ||
735 | <constant>V4L2_MEMORY_MMAP</constant>, this is the value that | ||
736 | should be passed to &func-mmap;, similar to the | ||
737 | <structfield>offset</structfield> field in &v4l2-buffer;.</entry> | ||
738 | </row> | ||
739 | <row> | ||
740 | <entry></entry> | ||
741 | <entry>__unsigned long</entry> | ||
742 | <entry><structfield>userptr</structfield></entry> | ||
743 | <entry>When the memory type in the containing &v4l2-buffer; is | ||
744 | <constant>V4L2_MEMORY_USERPTR</constant>, this is a userspace | ||
745 | pointer to the memory allocated for this plane by an application. | ||
746 | </entry> | ||
747 | </row> | ||
748 | <row> | ||
749 | <entry>__u32</entry> | ||
750 | <entry><structfield>data_offset</structfield></entry> | ||
751 | <entry></entry> | ||
752 | <entry>Offset in bytes to video data in the plane, if applicable. | ||
753 | </entry> | ||
754 | </row> | ||
755 | <row> | ||
756 | <entry>__u32</entry> | ||
757 | <entry><structfield>reserved[11]</structfield></entry> | ||
758 | <entry></entry> | ||
759 | <entry>Reserved for future use. Should be zeroed by an | ||
760 | application.</entry> | ||
761 | </row> | ||
762 | </tbody> | ||
763 | </tgroup> | ||
764 | </table> | ||
765 | |||
599 | <table frame="none" pgwide="1" id="v4l2-buf-type"> | 766 | <table frame="none" pgwide="1" id="v4l2-buf-type"> |
600 | <title>enum v4l2_buf_type</title> | 767 | <title>enum v4l2_buf_type</title> |
601 | <tgroup cols="3"> | 768 | <tgroup cols="3"> |
@@ -604,13 +771,27 @@ should set this to 0.</entry> | |||
604 | <row> | 771 | <row> |
605 | <entry><constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant></entry> | 772 | <entry><constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant></entry> |
606 | <entry>1</entry> | 773 | <entry>1</entry> |
607 | <entry>Buffer of a video capture stream, see <xref | 774 | <entry>Buffer of a single-planar video capture stream, see <xref |
775 | linkend="capture" />.</entry> | ||
776 | </row> | ||
777 | <row> | ||
778 | <entry><constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant> | ||
779 | </entry> | ||
780 | <entry>9</entry> | ||
781 | <entry>Buffer of a multi-planar video capture stream, see <xref | ||
608 | linkend="capture" />.</entry> | 782 | linkend="capture" />.</entry> |
609 | </row> | 783 | </row> |
610 | <row> | 784 | <row> |
611 | <entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant></entry> | 785 | <entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant></entry> |
612 | <entry>2</entry> | 786 | <entry>2</entry> |
613 | <entry>Buffer of a video output stream, see <xref | 787 | <entry>Buffer of a single-planar video output stream, see <xref |
788 | linkend="output" />.</entry> | ||
789 | </row> | ||
790 | <row> | ||
791 | <entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant> | ||
792 | </entry> | ||
793 | <entry>10</entry> | ||
794 | <entry>Buffer of a multi-planar video output stream, see <xref | ||
614 | linkend="output" />.</entry> | 795 | linkend="output" />.</entry> |
615 | </row> | 796 | </row> |
616 | <row> | 797 | <row> |