除了用 v4l2_fmtdesc结构体获取像素格式,还可以通过v4l2_capability结构体来获取设备的功能,主要看capabilities成员,其是否支持视频捕获(V4L2_CAP_VIDEO_CAPTURE)、以及是否支持流读写(V4L2_CAP_STREAMING)。 #include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<stdlib.h>#inclu...
显示所有支持的格式需要用到struct v4l2_fmtdesc结构体,该结构体描述当前camera支持的格式信息。 01structv4l2_fmtdesc02{03__u32index;// 要查询的格式序号,应用程序设置04enumv4l2_buf_typetype;// 帧类型,应用程序设置05__u32flags;// 是否为压缩格式06__u8description[32];// 格式名称07__u32pixelf...
printf("description=%s\n",v4fmt.description); unsigned char *p =(unsigned char *) &v4fmt.pixelformat; printf("pixelformat=%c%c%c%c\n",p[0],p[1],p[2],p[3]); printf("reserved=%d\n",v4fmt.reserved[0]); } 这里面用到了结构体 v4l2_fmtdesc,其描述了当前摄像头所支持的格式,其结构...
1.1 struct v4l2_fmtdesc结构体 struct v4l2_fmtdesc { __u32 index; /* Format number */ enum v4l2_buf_type type; /* buffer type */ /* * enum v4l2_buf_type * { * V4L2_BUF_TYPE_VIDEO_CAPTURE = 1, // 指定buf的类型为capture,用于视频捕获设备 * V4L2_BUF_TYPE_VIDEO_OUTPUT = 2, /...
v4l2_fmtdesc结构体定义: structv4l2_fmtdesc { u32 index;//要查询的格式序号,应用程序设置enumv4l2_buf_type type;//帧类型,应用程序设置u32 flags;//是否为压缩格式u8 description[32];//格式名称u32 pixelformat;//格式u32 reserved[4];//保留}; ...
fmtdesc.index++; } //获取当前格式 struct v4l2_format fmt; fmt.type=V4L2_BUF_TYPE_VIDEO_CAPTURE; int ret = ioctl(mCameraFd, VIDIOC_G_FMT, &fmt); if(ret != -1) { printf("format information : width:%d. height:%d. pixelformat = %d.", ...
大部分所需的信息都在这里。作为一个驱动作者,当挖掘头文件的时候,你可能也得看看include/media/v4l2-dev.h,它定义了许多你将来要打交道的结构体。 一个视频驱动很可能要有处理PCI总线,或USB总线的部分。这里我们不会花什么时间还接触这些东西。通常会有一个内部一I2C接口,我们在这一系列的后续文章中会接触到它...
struct v4l2_fmtdesc结构体中index要设置,从0开始;enum v4l2_buf_type type也要设置,如果使用的是camera设备,则enum v4l2_buf_type type要设置为V4L2_BUF_TYPE_VIDEO_CAPTURE,因为camera是CAPTURE设备。结构体中的其他内容driver会填充。其中__u32 pixelformat参数在设置图像帧格式时需要使用。[backcolor=var(--...
因为V4L2要求所有driver和device都支持这个ioctl。所以,通过VIDIOC_QUERYCAP命令是否成功来判断当前device和driver是否符合V4L2规范。当然,这个命令执行成功的同时还能够得到设备足够的信息,如struct v4l2_capability结构体所示内容。86~98行代码检查当前设备是否为capture设备,并检查使用内存映射还是直接读的方式获取图像数据。
struct v4l2_fmtdesc 结构体中的 .pixelformat和 .description 成员返回当前视频设备所支持的视频格式; 使用举例: --- struct v4l2_fmtdesc fmt; memset(&fmt, 0, sizeof(fmt)); fmt.index = 0; fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; while ((ret = ioctl(dev, VIDIOC_ENUM_FMT, &fmt)) == 0...