V4L2超详细讲解资料.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
-+ 本文内容主要来源于网络 1. 定义 V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。 2. 工作流程: 打开设备- 检查和设置设备属性- 设置帧格式- 设置一种输入输出方法(缓冲 区管理)- 循环获取数据- 关闭设备。 3. 设备的打开和关闭: #include fcntl.h int open(const char *device_name, int flags); #include unistd.h int clo se(int fd); 例: int fd=open(“/dev/video0”,O_RDWR); // 打开设备 close(fd); // 关闭设备 注意:V4L2 的相关定义包含在头文件linux/videodev2.h 中. 4. 查询设备属性: VIDIOC_QUERYCAP 相关函数: int ioctl(int fd, int request, struct v4l2_capability *argp); 相关结构体: struct v4l2_capability { u8 driver[16]; // 驱动名字 u8 card[32]; // 设备名字 u8 bus_info[32]; // 设备在系统中的位置 u32 version; // 驱动版本号 u32 capabilities; // 设备支持的操作 u32 reserved[4]; // 保留字段 }; capabilities 常用值: V4L2_CAP_VIDEO_CAPTURE // 是否支持图像获取 例:显示设备信息 struct v4l2_capability cap; ioctl(fd,VIDIOC_QUERYCAP,cap); printf(“Driver Name:%s\nCard Name:%s\nBus info:%s\nDriver Version:%u.%u.%u\n”,cap.driver,cap.card,cap.bus_info,(cap.version16)0XFF, (cap.version8)0XFF,cap.version0XFF); 5. 设置视频的制式和帧格式 制式包括PAL,NTSC,帧的格式个包括宽度和高度等。 相关函数: int ioctl(int fd, int request, struct v4l2_fmtdesc *argp); int ioctl(int fd, int request, struct v4l2_format *argp); 相关结构体: v4l2_cropcap 结构体用来设置摄像头的捕捉能力,在捕捉上视频时应先先设置 v4l2_cropcap 的 type 域,再通过 VIDIO_CROPCAP 操作命令获取设备捕捉能力的参数,保存于 v4l2_cropcap 结构体中,包括 bounds(最大捕捉方框的左上角坐标和宽高),defrect (默认捕捉方框的左上角坐标和宽高)等。 v4l2_format 结构体用来设置摄像头的视频制式、帧格式等,在设置这个参数时应先填 好 v4l2_format 的各个域,如 type(传输流类型),fmt.pix.width(宽), fmt.pix.heigth(高),fmt.pix.field(采样区域,如隔行采样),fmt.pix.pixelformat(采 样类型,如 YUV4:2:2),然后通过 VIDIO_S_FMT 操作命令设置视频捕捉格式。如下图所示: 5.1 查询并显示所有支持的格式:VIDIOC_ENUM_FMT 相关函数: int ioctl(int fd, int request, struct v4l2_fmtdesc *argp); 相关结构体: struct v4l2_fmtdesc { u32 index; // 要查询的格式序号,应用程序设置 enum v4l2_buf_type type; // 帧类型,应用程序设置 u32 flags; // 是否为压缩格式 u8 description[32]; // 格式名称 u32 pixelformat; // 格式 u32 reserved[4]; // 保留 }; 例:显示所有支持的格式 struct v4l2_fmtdesc fmtdesc; fmtdesc.index=0; fmtdesc.type=V4L2_BUF_TYPE_VIDEO_CAPTURE; printf(Support format:\n); while(ioctl(fd, VIDIOC_ENUM_FMT, fmtdesc) != -1) { printf(\t%d.%s\n,fmtdesc.index+1,fm

文档评论(0)

一叶轻舟 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档