106 lines
3.4 KiB
ReStructuredText
106 lines
3.4 KiB
ReStructuredText
|
.. -*- coding: utf-8; mode: rst -*-
|
||
|
|
||
|
.. _VIDIOC_REQBUFS:
|
||
|
|
||
|
********************
|
||
|
ioctl VIDIOC_REQBUFS
|
||
|
********************
|
||
|
|
||
|
Name
|
||
|
====
|
||
|
|
||
|
VIDIOC_REQBUFS - Initiate Memory Mapping, User Pointer I/O or DMA buffer I/O
|
||
|
|
||
|
|
||
|
Synopsis
|
||
|
========
|
||
|
|
||
|
.. c:function:: int ioctl( int fd, VIDIOC_REQBUFS, struct v4l2_requestbuffers *argp )
|
||
|
:name: VIDIOC_REQBUFS
|
||
|
|
||
|
|
||
|
Arguments
|
||
|
=========
|
||
|
|
||
|
``fd``
|
||
|
File descriptor returned by :ref:`open() <func-open>`.
|
||
|
|
||
|
``argp``
|
||
|
Pointer to struct :c:type:`v4l2_requestbuffers`.
|
||
|
|
||
|
Description
|
||
|
===========
|
||
|
|
||
|
This ioctl is used to initiate :ref:`memory mapped <mmap>`,
|
||
|
:ref:`user pointer <userp>` or :ref:`DMABUF <dmabuf>` based I/O.
|
||
|
Memory mapped buffers are located in device memory and must be allocated
|
||
|
with this ioctl before they can be mapped into the application's address
|
||
|
space. User buffers are allocated by applications themselves, and this
|
||
|
ioctl is merely used to switch the driver into user pointer I/O mode and
|
||
|
to setup some internal structures. Similarly, DMABUF buffers are
|
||
|
allocated by applications through a device driver, and this ioctl only
|
||
|
configures the driver into DMABUF I/O mode without performing any direct
|
||
|
allocation.
|
||
|
|
||
|
To allocate device buffers applications initialize all fields of the
|
||
|
struct :c:type:`v4l2_requestbuffers` structure. They set the ``type``
|
||
|
field to the respective stream or buffer type, the ``count`` field to
|
||
|
the desired number of buffers, ``memory`` must be set to the requested
|
||
|
I/O method and the ``reserved`` array must be zeroed. When the ioctl is
|
||
|
called with a pointer to this structure the driver will attempt to
|
||
|
allocate the requested number of buffers and it stores the actual number
|
||
|
allocated in the ``count`` field. It can be smaller than the number
|
||
|
requested, even zero, when the driver runs out of free memory. A larger
|
||
|
number is also possible when the driver requires more buffers to
|
||
|
function correctly. For example video output requires at least two
|
||
|
buffers, one displayed and one filled by the application.
|
||
|
|
||
|
When the I/O method is not supported the ioctl returns an ``EINVAL`` error
|
||
|
code.
|
||
|
|
||
|
Applications can call :ref:`VIDIOC_REQBUFS` again to change the number of
|
||
|
buffers, however this cannot succeed when any buffers are still mapped.
|
||
|
A ``count`` value of zero frees all buffers, after aborting or finishing
|
||
|
any DMA in progress, an implicit
|
||
|
:ref:`VIDIOC_STREAMOFF <VIDIOC_STREAMON>`.
|
||
|
|
||
|
|
||
|
.. c:type:: v4l2_requestbuffers
|
||
|
|
||
|
.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}|
|
||
|
|
||
|
.. flat-table:: struct v4l2_requestbuffers
|
||
|
:header-rows: 0
|
||
|
:stub-columns: 0
|
||
|
:widths: 1 1 2
|
||
|
|
||
|
* - __u32
|
||
|
- ``count``
|
||
|
- The number of buffers requested or granted.
|
||
|
* - __u32
|
||
|
- ``type``
|
||
|
- Type of the stream or buffers, this is the same as the struct
|
||
|
:c:type:`v4l2_format` ``type`` field. See
|
||
|
:c:type:`v4l2_buf_type` for valid values.
|
||
|
* - __u32
|
||
|
- ``memory``
|
||
|
- Applications set this field to ``V4L2_MEMORY_MMAP``,
|
||
|
``V4L2_MEMORY_DMABUF`` or ``V4L2_MEMORY_USERPTR``. See
|
||
|
:c:type:`v4l2_memory`.
|
||
|
* - __u32
|
||
|
- ``reserved``\ [2]
|
||
|
- A place holder for future extensions. Drivers and applications
|
||
|
must set the array to zero.
|
||
|
|
||
|
|
||
|
Return Value
|
||
|
============
|
||
|
|
||
|
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||
|
appropriately. The generic error codes are described at the
|
||
|
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||
|
|
||
|
EINVAL
|
||
|
The buffer type (``type`` field) or the requested I/O method
|
||
|
(``memory``) is not supported.
|