Home | History | Annotate | Download | only in spec
      1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
      2 <HTML
      3 ><HEAD
      4 ><TITLE
      5 >ioctl VIDIOC_QBUF, VIDIOC_DQBUF</TITLE
      6 ><META
      7 NAME="GENERATOR"
      8 CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
      9 REL="HOME"
     10 TITLE="Video for Linux Two API Specification"
     11 HREF="book1.htm"><LINK
     12 REL="UP"
     13 TITLE="Function Reference"
     14 HREF="r7624.htm"><LINK
     15 REL="PREVIOUS"
     16 TITLE="ioctl VIDIOC_OVERLAY"
     17 HREF="r12816.htm"><LINK
     18 REL="NEXT"
     19 TITLE="ioctl VIDIOC_QUERYBUF"
     20 HREF="r13022.htm"></HEAD
     21 ><BODY
     22 CLASS="REFENTRY"
     23 BGCOLOR="#FFFFFF"
     24 TEXT="#000000"
     25 LINK="#0000FF"
     26 VLINK="#840084"
     27 ALINK="#0000FF"
     28 ><DIV
     29 CLASS="NAVHEADER"
     30 ><TABLE
     31 SUMMARY="Header navigation table"
     32 WIDTH="100%"
     33 BORDER="0"
     34 CELLPADDING="0"
     35 CELLSPACING="0"
     36 ><TR
     37 ><TH
     38 COLSPAN="3"
     39 ALIGN="center"
     40 >Video for Linux Two API Specification: Revision 0.24</TH
     41 ></TR
     42 ><TR
     43 ><TD
     44 WIDTH="10%"
     45 ALIGN="left"
     46 VALIGN="bottom"
     47 ><A
     48 HREF="r12816.htm"
     49 ACCESSKEY="P"
     50 >Prev</A
     51 ></TD
     52 ><TD
     53 WIDTH="80%"
     54 ALIGN="center"
     55 VALIGN="bottom"
     56 ></TD
     57 ><TD
     58 WIDTH="10%"
     59 ALIGN="right"
     60 VALIGN="bottom"
     61 ><A
     62 HREF="r13022.htm"
     63 ACCESSKEY="N"
     64 >Next</A
     65 ></TD
     66 ></TR
     67 ></TABLE
     68 ><HR
     69 ALIGN="LEFT"
     70 WIDTH="100%"></DIV
     71 ><H1
     72 ><A
     73 NAME="VIDIOC-QBUF"
     74 ></A
     75 >ioctl VIDIOC_QBUF, VIDIOC_DQBUF</H1
     76 ><DIV
     77 CLASS="REFNAMEDIV"
     78 ><A
     79 NAME="AEN12882"
     80 ></A
     81 ><H2
     82 >Name</H2
     83 >VIDIOC_QBUF, VIDIOC_DQBUF&nbsp;--&nbsp;Exchange a buffer with the driver</DIV
     84 ><DIV
     85 CLASS="REFSYNOPSISDIV"
     86 ><A
     87 NAME="AEN12886"
     88 ></A
     89 ><H2
     90 >Synopsis</H2
     91 ><DIV
     92 CLASS="FUNCSYNOPSIS"
     93 ><P
     94 ></P
     95 ><A
     96 NAME="AEN12887"
     97 ></A
     98 ><P
     99 ><CODE
    100 ><CODE
    101 CLASS="FUNCDEF"
    102 >int ioctl</CODE
    103 >(int fd, int request, struct v4l2_buffer *argp);</CODE
    104 ></P
    105 ><P
    106 ></P
    107 ></DIV
    108 ></DIV
    109 ><DIV
    110 CLASS="REFSECT1"
    111 ><A
    112 NAME="AEN12897"
    113 ></A
    114 ><H2
    115 >Arguments</H2
    116 ><P
    117 ></P
    118 ><DIV
    119 CLASS="VARIABLELIST"
    120 ><DL
    121 ><DT
    122 ><CODE
    123 CLASS="PARAMETER"
    124 >fd</CODE
    125 ></DT
    126 ><DD
    127 ><P
    128 >File descriptor returned by <A
    129 HREF="r14090.htm"
    130 ><CODE
    131 CLASS="FUNCTION"
    132 >open()</CODE
    133 ></A
    134 >.</P
    135 ></DD
    136 ><DT
    137 ><CODE
    138 CLASS="PARAMETER"
    139 >request</CODE
    140 ></DT
    141 ><DD
    142 ><P
    143 >VIDIOC_QBUF, VIDIOC_DQBUF</P
    144 ></DD
    145 ><DT
    146 ><CODE
    147 CLASS="PARAMETER"
    148 >argp</CODE
    149 ></DT
    150 ><DD
    151 ><P
    152 ></P
    153 ></DD
    154 ></DL
    155 ></DIV
    156 ></DIV
    157 ><DIV
    158 CLASS="REFSECT1"
    159 ><A
    160 NAME="AEN12917"
    161 ></A
    162 ><H2
    163 >Description</H2
    164 ><P
    165 >Applications call the <CODE
    166 CLASS="CONSTANT"
    167 >VIDIOC_QBUF</CODE
    168 > ioctl
    169 to enqueue an empty (capturing) or filled (output) buffer in the
    170 driver's incoming queue. The semantics depend on the selected I/O
    171 method.</P
    172 ><P
    173 >To enqueue a <A
    174 HREF="x5791.htm"
    175 >memory mapped</A
    176 >
    177 buffer applications set the <CODE
    178 CLASS="STRUCTFIELD"
    179 >type</CODE
    180 > field of a
    181 struct&nbsp;<A
    182 HREF="x5953.htm#V4L2-BUFFER"
    183 >v4l2_buffer</A
    184 > to the same buffer type as previously struct&nbsp;<A
    185 HREF="r10944.htm#V4L2-FORMAT"
    186 >v4l2_format</A
    187 >
    188 <CODE
    189 CLASS="STRUCTFIELD"
    190 >type</CODE
    191 > and struct&nbsp;<A
    192 HREF="r13696.htm#V4L2-REQUESTBUFFERS"
    193 >v4l2_requestbuffers</A
    194 >
    195 <CODE
    196 CLASS="STRUCTFIELD"
    197 >type</CODE
    198 >, the <CODE
    199 CLASS="STRUCTFIELD"
    200 >memory</CODE
    201 >
    202 field to <CODE
    203 CLASS="CONSTANT"
    204 >V4L2_MEMORY_MMAP</CODE
    205 > and the
    206 <CODE
    207 CLASS="STRUCTFIELD"
    208 >index</CODE
    209 > field. Valid index numbers range from
    210 zero to the number of buffers allocated with <A
    211 HREF="r13696.htm"
    212 ><CODE
    213 CLASS="CONSTANT"
    214 >VIDIOC_REQBUFS</CODE
    215 ></A
    216 >
    217 (struct&nbsp;<A
    218 HREF="r13696.htm#V4L2-REQUESTBUFFERS"
    219 >v4l2_requestbuffers</A
    220 > <CODE
    221 CLASS="STRUCTFIELD"
    222 >count</CODE
    223 >) minus one. The
    224 contents of the struct <CODE
    225 CLASS="STRUCTNAME"
    226 >v4l2_buffer</CODE
    227 > returned
    228 by a <A
    229 HREF="r13022.htm"
    230 ><CODE
    231 CLASS="CONSTANT"
    232 >VIDIOC_QUERYBUF</CODE
    233 ></A
    234 > ioctl will do as well. When the buffer is
    235 intended for output (<CODE
    236 CLASS="STRUCTFIELD"
    237 >type</CODE
    238 > is
    239 <CODE
    240 CLASS="CONSTANT"
    241 >V4L2_BUF_TYPE_VIDEO_OUTPUT</CODE
    242 > or
    243 <CODE
    244 CLASS="CONSTANT"
    245 >V4L2_BUF_TYPE_VBI_OUTPUT</CODE
    246 >) applications must also
    247 initialize the <CODE
    248 CLASS="STRUCTFIELD"
    249 >bytesused</CODE
    250 >,
    251 <CODE
    252 CLASS="STRUCTFIELD"
    253 >field</CODE
    254 > and
    255 <CODE
    256 CLASS="STRUCTFIELD"
    257 >timestamp</CODE
    258 > fields. See <A
    259 HREF="x5953.htm"
    260 >Section 3.5</A
    261 > for details. When
    262 <CODE
    263 CLASS="CONSTANT"
    264 >VIDIOC_QBUF</CODE
    265 > is called with a pointer to this
    266 structure the driver sets the
    267 <CODE
    268 CLASS="CONSTANT"
    269 >V4L2_BUF_FLAG_MAPPED</CODE
    270 > and
    271 <CODE
    272 CLASS="CONSTANT"
    273 >V4L2_BUF_FLAG_QUEUED</CODE
    274 > flags and clears the
    275 <CODE
    276 CLASS="CONSTANT"
    277 >V4L2_BUF_FLAG_DONE</CODE
    278 > flag in the
    279 <CODE
    280 CLASS="STRUCTFIELD"
    281 >flags</CODE
    282 > field, or it returns an
    283 <SPAN
    284 CLASS="ERRORCODE"
    285 >EINVAL</SPAN
    286 > error code.</P
    287 ><P
    288 >To enqueue a <A
    289 HREF="x5884.htm"
    290 >user pointer</A
    291 >
    292 buffer applications set the <CODE
    293 CLASS="STRUCTFIELD"
    294 >type</CODE
    295 > field of a
    296 struct&nbsp;<A
    297 HREF="x5953.htm#V4L2-BUFFER"
    298 >v4l2_buffer</A
    299 > to the same buffer type as previously struct&nbsp;<A
    300 HREF="r10944.htm#V4L2-FORMAT"
    301 >v4l2_format</A
    302 >
    303 <CODE
    304 CLASS="STRUCTFIELD"
    305 >type</CODE
    306 > and struct&nbsp;<A
    307 HREF="r13696.htm#V4L2-REQUESTBUFFERS"
    308 >v4l2_requestbuffers</A
    309 >
    310 <CODE
    311 CLASS="STRUCTFIELD"
    312 >type</CODE
    313 >, the <CODE
    314 CLASS="STRUCTFIELD"
    315 >memory</CODE
    316 >
    317 field to <CODE
    318 CLASS="CONSTANT"
    319 >V4L2_MEMORY_USERPTR</CODE
    320 > and the
    321 <CODE
    322 CLASS="STRUCTFIELD"
    323 >m.userptr</CODE
    324 > field to the address of the
    325 buffer and <CODE
    326 CLASS="STRUCTFIELD"
    327 >length</CODE
    328 > to its size. When the
    329 buffer is intended for output additional fields must be set as above.
    330 When <CODE
    331 CLASS="CONSTANT"
    332 >VIDIOC_QBUF</CODE
    333 > is called with a pointer to this
    334 structure the driver sets the <CODE
    335 CLASS="CONSTANT"
    336 >V4L2_BUF_FLAG_QUEUED</CODE
    337 >
    338 flag and clears the <CODE
    339 CLASS="CONSTANT"
    340 >V4L2_BUF_FLAG_MAPPED</CODE
    341 > and
    342 <CODE
    343 CLASS="CONSTANT"
    344 >V4L2_BUF_FLAG_DONE</CODE
    345 > flags in the
    346 <CODE
    347 CLASS="STRUCTFIELD"
    348 >flags</CODE
    349 > field, or it returns an error code.
    350 This ioctl locks the memory pages of the buffer in physical memory,
    351 they cannot be swapped out to disk. Buffers remain locked until
    352 dequeued, until the <A
    353 HREF="r13817.htm"
    354 ><CODE
    355 CLASS="CONSTANT"
    356 >VIDIOC_STREAMOFF</CODE
    357 ></A
    358 > or <A
    359 HREF="r13696.htm"
    360 ><CODE
    361 CLASS="CONSTANT"
    362 >VIDIOC_REQBUFS</CODE
    363 ></A
    364 > ioctl are
    365 called, or until the device is closed.</P
    366 ><P
    367 >Applications call the <CODE
    368 CLASS="CONSTANT"
    369 >VIDIOC_DQBUF</CODE
    370 >
    371 ioctl to dequeue a filled (capturing) or displayed (output) buffer
    372 from the driver's outgoing queue. They just set the
    373 <CODE
    374 CLASS="STRUCTFIELD"
    375 >type</CODE
    376 > and <CODE
    377 CLASS="STRUCTFIELD"
    378 >memory</CODE
    379 >
    380 fields of a struct&nbsp;<A
    381 HREF="x5953.htm#V4L2-BUFFER"
    382 >v4l2_buffer</A
    383 > as above, when <CODE
    384 CLASS="CONSTANT"
    385 >VIDIOC_DQBUF</CODE
    386 >
    387 is called with a pointer to this structure the driver fills the
    388 remaining fields or returns an error code.</P
    389 ><P
    390 >By default <CODE
    391 CLASS="CONSTANT"
    392 >VIDIOC_DQBUF</CODE
    393 > blocks when no
    394 buffer is in the outgoing queue. When the
    395 <CODE
    396 CLASS="CONSTANT"
    397 >O_NONBLOCK</CODE
    398 > flag was given to the <A
    399 HREF="r14090.htm"
    400 ><CODE
    401 CLASS="FUNCTION"
    402 >open()</CODE
    403 ></A
    404 >
    405 function, <CODE
    406 CLASS="CONSTANT"
    407 >VIDIOC_DQBUF</CODE
    408 > returns immediately
    409 with an <SPAN
    410 CLASS="ERRORCODE"
    411 >EAGAIN</SPAN
    412 > error code when no buffer is available.</P
    413 ><P
    414 >The <CODE
    415 CLASS="STRUCTNAME"
    416 >v4l2_buffer</CODE
    417 > structure is
    418 specified in <A
    419 HREF="x5953.htm"
    420 >Section 3.5</A
    421 >.</P
    422 ></DIV
    423 ><DIV
    424 CLASS="REFSECT1"
    425 ><A
    426 NAME="AEN12989"
    427 ></A
    428 ><H2
    429 >Return Value</H2
    430 ><P
    431 >On success <SPAN
    432 CLASS="RETURNVALUE"
    433 >0</SPAN
    434 > is returned, on error <SPAN
    435 CLASS="RETURNVALUE"
    436 >-1</SPAN
    437 > and the <CODE
    438 CLASS="VARNAME"
    439 >errno</CODE
    440 > variable is set appropriately:</P
    441 ><P
    442 ></P
    443 ><DIV
    444 CLASS="VARIABLELIST"
    445 ><DL
    446 ><DT
    447 ><SPAN
    448 CLASS="ERRORCODE"
    449 >EAGAIN</SPAN
    450 ></DT
    451 ><DD
    452 ><P
    453 >Non-blocking I/O has been selected using
    454 <CODE
    455 CLASS="CONSTANT"
    456 >O_NONBLOCK</CODE
    457 > and no buffer was in the outgoing
    458 queue.</P
    459 ></DD
    460 ><DT
    461 ><SPAN
    462 CLASS="ERRORCODE"
    463 >EINVAL</SPAN
    464 ></DT
    465 ><DD
    466 ><P
    467 >The buffer <CODE
    468 CLASS="STRUCTFIELD"
    469 >type</CODE
    470 > is not
    471 supported, or the <CODE
    472 CLASS="STRUCTFIELD"
    473 >index</CODE
    474 > is out of bounds,
    475 or no buffers have been allocated yet, or the
    476 <CODE
    477 CLASS="STRUCTFIELD"
    478 >userptr</CODE
    479 > or
    480 <CODE
    481 CLASS="STRUCTFIELD"
    482 >length</CODE
    483 > are invalid.</P
    484 ></DD
    485 ><DT
    486 ><SPAN
    487 CLASS="ERRORCODE"
    488 >ENOMEM</SPAN
    489 ></DT
    490 ><DD
    491 ><P
    492 >Not enough physical or virtual memory was available to
    493 enqueue a user pointer buffer.</P
    494 ></DD
    495 ><DT
    496 ><SPAN
    497 CLASS="ERRORCODE"
    498 >EIO</SPAN
    499 ></DT
    500 ><DD
    501 ><P
    502 ><CODE
    503 CLASS="CONSTANT"
    504 >VIDIOC_DQBUF</CODE
    505 > failed due to an
    506 internal error. Can also indicate temporary problems like signal
    507 loss. Note the driver might dequeue an (empty) buffer despite
    508 returning an error, or even stop capturing.</P
    509 ></DD
    510 ></DL
    511 ></DIV
    512 ></DIV
    513 ><DIV
    514 CLASS="NAVFOOTER"
    515 ><HR
    516 ALIGN="LEFT"
    517 WIDTH="100%"><TABLE
    518 SUMMARY="Footer navigation table"
    519 WIDTH="100%"
    520 BORDER="0"
    521 CELLPADDING="0"
    522 CELLSPACING="0"
    523 ><TR
    524 ><TD
    525 WIDTH="33%"
    526 ALIGN="left"
    527 VALIGN="top"
    528 ><A
    529 HREF="r12816.htm"
    530 ACCESSKEY="P"
    531 >Prev</A
    532 ></TD
    533 ><TD
    534 WIDTH="34%"
    535 ALIGN="center"
    536 VALIGN="top"
    537 ><A
    538 HREF="book1.htm"
    539 ACCESSKEY="H"
    540 >Home</A
    541 ></TD
    542 ><TD
    543 WIDTH="33%"
    544 ALIGN="right"
    545 VALIGN="top"
    546 ><A
    547 HREF="r13022.htm"
    548 ACCESSKEY="N"
    549 >Next</A
    550 ></TD
    551 ></TR
    552 ><TR
    553 ><TD
    554 WIDTH="33%"
    555 ALIGN="left"
    556 VALIGN="top"
    557 >ioctl VIDIOC_OVERLAY</TD
    558 ><TD
    559 WIDTH="34%"
    560 ALIGN="center"
    561 VALIGN="top"
    562 ><A
    563 HREF="r7624.htm"
    564 ACCESSKEY="U"
    565 >Up</A
    566 ></TD
    567 ><TD
    568 WIDTH="33%"
    569 ALIGN="right"
    570 VALIGN="top"
    571 >ioctl VIDIOC_QUERYBUF</TD
    572 ></TR
    573 ></TABLE
    574 ></DIV
    575 ></BODY
    576 ></HTML
    577 >
    578