VIDIOC_CREATE_BUFS — Create buffers for Memory Mapped or User Pointer I/O
int fsfuncioctl( | int fd, |
int request, | |
struct v4l2_create_buffers *argp) ; |
This ioctl is used to create buffers for memory
mapped or user pointer
I/O. It can be used as an alternative or in addition to the
VIDIOC_REQBUFS
ioctl, when a tighter control over buffers
is required. This ioctl can be called multiple times to create buffers of
different sizes.
To allocate device buffers applications initialize relevant fields of
the v4l2_create_buffers structure. They set the
type
field in the
v4l2_format structure, embedded in this
structure, to the respective stream or buffer type.
count
must be set to the number of required buffers.
memory
specifies the required I/O method. The
format
field shall typically be filled in using
either the VIDIOC_TRY_FMT
or
VIDIOC_G_FMT
ioctl(). Additionally, applications can adjust
sizeimage
fields to fit their specific needs. The
reserved
array must be zeroed.
When the ioctl is called with a pointer to this structure the driver
will attempt to allocate up to the requested number of buffers and store the
actual number allocated and the starting index in the
count
and the index
fields
respectively. On return count
can be smaller than
the number requested. The driver may also increase buffer sizes if required,
however, it will not update sizeimage
field values.
The user has to use VIDIOC_QUERYBUF
to retrieve that
information.
Table A.1. struct v4l2_create_buffers
__u32 | index | The starting buffer index, returned by the driver. |
__u32 | count | The number of buffers requested or granted. |
enum v4l2_memory | memory | Applications set this field to
V4L2_MEMORY_MMAP or
V4L2_MEMORY_USERPTR . |
struct v4l2_format | format | Filled in by the application, preserved by the driver. |
__u32 | reserved [8] | A place holder for future extensions. |
On success 0 is returned, on error -1 and the errno
variable is set appropriately. The generic error codes are described at the Generic Error Codes chapter.
No memory to allocate buffers for memory mapped I/O.
The buffer type (type
field) or the
requested I/O method (memory
) is not
supported.