ioctl VIDIOC_CREATE_BUFS &manvol; VIDIOC_CREATE_BUFS Create buffers for Memory Mapped or User Pointer I/O int ioctl int fd int request struct v4l2_create_buffers *argp Arguments fd &fd; request VIDIOC_CREATE_BUFS argp Description Experimental This is an experimental interface and may change in the future. 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. struct <structname>v4l2_create_buffers</structname> &cs-str; __u32 index The starting buffer index, returned by the driver. __u32 count The 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. __u32 memory Applications set this field to V4L2_MEMORY_MMAP or V4L2_MEMORY_USERPTR. See struct v4l2_format format Filled in by the application, preserved by the driver. __u32 reserved[8] A place holder for future extensions.
&return-value; ENOMEM No memory to allocate buffers for memory mapped I/O. EINVAL The buffer type (type field) or the requested I/O method (memory) is not supported.