V4L2(Video4Linux2)是Linux内核中媒体子系统的一部分,它允许应用程序与硬件设备(例如摄像头、视频采集卡等)进行交互和通信。V4L2提供了多个ioctl命令来管理设备、配置属性、控制数据流等功能。
以下是常见的V4L2 ioctl命令:
VIDIOC_QUERYCAP:查询设备驱动能力,例如支持哪些视频格式以及该设备是否支持视频捕获。
VIDIOC_ENUM_FMT:枚举、设置、获取设备支持的视频格式。
VIDIOC_S_FMT & VIDIOC_G_FMT :设置和查询视频格式和参数,如帧大小、帧速率、颜色空间、YUV子采样率等。
VIDIOC_REQBUFS:请求内核分配一组缓冲区,作为视频帧数据的存放区域。
VIDIOC_QUERYBUF:查询单个缓冲区的信息,包括其虚拟地址、大小、状态等等。
VIDIOC_QBUF:提交一个空闲缓冲区到输入队列或输出队列的队尾。
VIDIOC_DQBUF:从输入或输出队列开始处取出一个已有帧的缓冲区。
VIDIOC_STREAMON / VIDIOC_STREAMOFF:启动、停止数据流传输。
VIDIOC_CROPCAP & VIDIOC_S_CROP:设置和获取摄像机裁剪大小。
VIDIOC_G_CTRL & VIDIOC_S_CTRL:获取或设置某个控制ID的值,例如亮度、对比度、白平衡等。
需要注意的是,不同的设备及驱动程序可能会支持的ioctl命令不完全一致,具体支持哪些命令需要查看API文档。