ioctl VIDIOC_CREATE_BUFS
&manvol;
VIDIOC_CREATE_BUFSCreate buffers for Memory Mapped or User Pointer or DMA Buffer
I/Oint ioctlint fdint requeststruct v4l2_create_buffers *argpArgumentsfd&fd;requestVIDIOC_CREATE_BUFSargpDescriptionExperimentalThis is an experimental
interface and may change in the future.This ioctl is used to create buffers for memory
mapped or user pointer or DMA buffer 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.
struct v4l2_create_buffers
&cs-str;
__u32indexThe starting buffer index, returned by the driver.__u32countThe number of buffers requested or granted. If count == 0, then
VIDIOC_CREATE_BUFS will set index
to the current number of created buffers, and it will check the validity of
memory and format.type.
If those are invalid -1 is returned and errno is set to &EINVAL;,
otherwise VIDIOC_CREATE_BUFS returns 0. It will
never set errno to &EBUSY; in this particular case.__u32memoryApplications set this field to
V4L2_MEMORY_MMAP,
V4L2_MEMORY_DMABUF or
V4L2_MEMORY_USERPTR. See &v4l2-format;formatFilled in by the application, preserved by the driver.__u32reserved[8]A place holder for future extensions.
&return-value;
ENOMEMNo memory to allocate buffers for memory
mapped I/O.EINVALThe buffer type (type field) or the
requested I/O method (memory) is not
supported.