The V4L2 API defines several different methods to read from or write to a device. All drivers exchanging data with applications must support at least one of them.
The classic I/O method using the read() and write() function is automatically selected after opening a V4L2 device. When the driver does not support this method attempts to read or write will fail at any time.
Other methods must be negotiated. To select the streaming I/O method with memory mapped or user buffers applications call the ioctl VIDIOC_REQBUFS ioctl. The asynchronous I/O method is not defined yet.
Video overlay can be considered another I/O method, although the application does not directly receive the image data. It is selected by initiating video overlay with the VIDIOC_S_FMT ioctl. For more information see Video Overlay Interface.
Generally exactly one I/O method, including overlay, is associated with each file descriptor. The only exceptions are applications not exchanging data with a driver ("panel applications", see Opening and Closing Devices) and drivers permitting simultaneous video capturing and overlay using the same file descriptor, for compatibility with V4L and earlier versions of V4L2.
VIDIOC_S_FMT and ioctl VIDIOC_REQBUFS would permit this to some degree, but for simplicity drivers need not support switching the I/O method (after first switching away from read/write) other than by closing and reopening the device.
The following sections describe the various I/O methods in more detail.