Linux V4L2驱动框架分析之(三):v4l2设备的缓存管理
Linux V4L2驱动框架分析之(四):sensor驱动
v4l2设备读取数据的方式有两种,一种是read方式,一种是streaming方式。read方式很容易理解,就是通过read函数读取,而streaming方式是在内核空间中维护一个缓存队列,然后将内存映射到用户空间,应用读取图像数据就是一个不断地出队列和入队列的过程,如下图所示:
使用streaming方式,需要管理多块缓冲,内核通过vb2_queue来管理,vb2_queue即缓冲队列。
应用程序查询设备功能,判断设备是否支持streaming方式:
if (ioctl(fd, VIDIOC_QUERYCAP, cap) < 0)
{
printf("ERR(%s):VIDIOC\_QUERYCAP failed\n", \_\_func\_\_);
return -1;
}
传入的cap参数是一个truct v4l2_capability结构体的指针,该结构体的定义如下:
/\* include/uapi/linux/videodev2.h \*/
struct v4l2_capability {
__u8 driver[16];
__u8 card[32];
__u8 bus_info[32];
__u32 version;
__u32 capabilities;
__u32 device_caps;
__u32 reserved[3];
};
其中最重要的是capabilities字段,这个字段标记着v4l2设备的功能,capabilities有以下部分标记位: