V4L2总结(2)数据及命令简介
下面具体说明开发流程网上找的 打开视频设备 在V4L2中视频设备被看做一个文件。使用open函数打开这个设备 //用非阻塞模式打开摄像头设备 intcameraFd; cameraFd open(“/dev/video0″, O_RDWR| O_NONBLOCK, 0); //如果用阻塞模式打开摄像头设备上述代码变为 cameraFd open(”/dev/video0″, O_RDWR, 0); 关于阻塞模式和非阻塞模式 应用程序能够使用阻塞模式或非阻塞模式打开视频设备如果使用非阻塞模式调用视频设备 即使尚未捕获到信息驱动依旧会把缓存DQBUFF里的东西返回给应用程序。 设定属性及采集方式 打开视频设备后可以设置该视频设备的属性例如裁剪、缩放等。这一步是可选的。 在Linux编程中一般使用ioctl函数来对设备的I/O通道进行管理 extern intioctl(int__fd, unsigned long int__request, …) __THROW; __fd 设备的ID例如刚才用open函数打开视频通道后返回的cameraFd __request 具体的命令标志符。 常用的结构体(参见/usr/include/linux/videodev2.h) struct v4l2_requestbuffers reqbufs; //向驱动申请帧缓冲的请求里面包含申请的个数 struct v4l2_capability cap; //这个设备的功能比如是否是视频输入设备 struct v4l2_standard std; //视频的制式比如PALNTSC struct v4l2_format fmt; //帧的格式比如宽度高度等 struct v4l2_buffer buf; //代表驱动中的一帧 v4l2_std_id stdid; //视频制式例如V4L2_STD_PAL_B struct v4l2_queryctrl query; //查询的控制 struct v4l2_control control; //具体控制的值 在进行V4L2开发中一般会用到以下的命令标志符 1 VIDIOC_REQBUFS 分配内存 2 VIDIOC_QUERYBUF 把VIDIOC_REQBUFS中分配的数据缓存转换成物理地址 3 VIDIOC_QUERYCAP 查询驱动功能 4 VIDIOC_ENUM_FMT 获取当前驱动支持的视频格式 5 VIDIOC_S_FMT 设置当前驱动的频捕获格式 6 VIDIOC_G_FMT 读取当前驱动的频捕获格式 7 VIDIOC_TRY_FMT 验证当前驱动的显示格式 8 VIDIOC_CROPCAP 查询驱动的修剪能力 9 VIDIOC_S_CROP 设置视频信号的边框 10 VIDIOC_G_CROP 读取视频信号的边框 11 VIDIOC_QBUF 把数据从缓存中读取出来 12 VIDIOC_DQBUF 把数据放回缓存队列 13 VIDIOC_STREAMON 开始视频显示函数 14 VIDIOC_STREAMOFF结束视频显示函数 15 VIDIOC_QUERYSTD检查当前视频设备支持的标准例如PAL或NTSC。 这些IO调用有些是必须的有些是可选择的。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2444701.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!