V4L2 API 定义了几种不同的方法来读取或写入设备。
3.1 Read/Write
driver capabilities 需要置起 V4L2_CAP_READWRITE。
不会传递 frame counter 和 timestamp, 最简单的 I/O 方法。
3.2 Streaming I/O (Memory Mapping)
driver capabilities 需要置起 V4L2_CAP_STREAMING。
app 需要在 ioctl VIDIOC_REQBUFS 中把 memory type 设置为 V4L2_MEMORY_MMAP。
文档中有使用 mmap() 的例子。
3.3 Streaming I/O (User Pointers)
driver capabilities 需要置起 V4L2_CAP_STREAMING。
app 需要在 ioctl VIDIOC_REQBUFS 中把 memory type 设置为 V4L2_MEMORY_USERPTR。
3.4 Streaming I/O (DMA buffer importing)
driver capabilities 需要置起 V4L2_CAP_STREAMING。
app 需要在 ioctl VIDIOC_REQBUFS 中把 memory type 设置为 V4L2_MEMORY_DMABUF。
3.5 Buffers
streaming 的时候不能修改 control 和 format,需要 streamoff 之后并且归还所有 allocated buffers 才能重新设置。
``txt VIDIOC_STREAMOFF VIDIOC_REQBUFS(0) VIDIOC_S_EXT_CTRLS VIDIOC_S_FMT VIDIOC_REQBUFS(n) VIDIOC_QBUF VIDIOC_STREAMON