V4L2驱动的移植与应用(二)

V4L2驱动的移植与应用(二)

ID:40569443

大小:48.00 KB

页数:6页

时间:2019-08-04

V4L2驱动的移植与应用(二)_第1页
V4L2驱动的移植与应用(二)_第2页
V4L2驱动的移植与应用(二)_第3页
V4L2驱动的移植与应用(二)_第4页
V4L2驱动的移植与应用(二)_第5页
资源描述:

《V4L2驱动的移植与应用(二)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、二、V4L2的应用下面简单介绍一下V4L2驱动的应用流程。1、视频采集的基本流程一般的,视频采集都有如下流程:2、打开视频设备在V4L2中,视频设备被看做一个文件。使用open函数打开这个设备://用非阻塞模式打开摄像头设备intcameraFd;cameraFd=open("/dev/video0",O_RDWR

2、O_NONBLOCK,0);//如果用阻塞模式打开摄像头设备,上述代码变为://cameraFd=open("/dev/video0",O_RDWR,0);关于阻塞模式和非阻塞模式:应用程序能够使用阻塞模式或非阻

3、塞模式打开视频设备,如果使用非阻塞模式调用视频设备,即使尚未捕获到信息,驱动依旧会把缓存(DQBUFF)里的东西返回给应用程序。3、设定属性及采集方式打开视频设备后,可以设置该视频设备的属性,例如裁剪、缩放等。这一步是可选的。在Linux编程中,一般使用ioctl函数来对设备的I/O通道进行管理:externintioctl(int__fd,unsignedlongint__request,...)__THROW;__fd:设备的ID,例如刚才用open函数打开视频通道后返回的cameraFd;__request:具体的命令

4、标志符。在进行V4L2开发中,一般会用到以下的命令标志符:VIDIOC_REQBUFS:分配内存VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的数据缓存转换成物理地址VIDIOC_QUERYCAP:查询驱动功能VIDIOC_ENUM_FMT:获取当前驱动支持的视频格式VIDIOC_S_FMT:设置当前驱动的频捕获格式VIDIOC_G_FMT:读取当前驱动的频捕获格式VIDIOC_TRY_FMT:验证当前驱动的显示格式VIDIOC_CROPCAP:查询驱动的修剪能力VIDIOC_S_CROP:设置视频信号

5、的边框VIDIOC_G_CROP:读取视频信号的边框VIDIOC_QBUF:把数据从缓存中读取出来VIDIOC_DQBUF:把数据放回缓存队列VIDIOC_STREAMON:开始视频显示函数VIDIOC_STREAMOFF:结束视频显示函数VIDIOC_QUERYSTD:检查当前视频设备支持的标准,例如PAL或NTSC。这些IO调用,有些是必须的,有些是可选择的。4、检查当前视频设备支持的标准在亚洲,一般使用PAL(720X576)制式的摄像头,而欧洲一般使用NTSC(720X480),使用VIDIOC_QUERYSTD来检

6、测:v4l2_std_idstd;do{ret=ioctl(fd,VIDIOC_QUERYSTD,&std);}while(ret==-1&&errno==EAGAIN);switch(std){caseV4L2_STD_NTSC://……caseV4L2_STD_PAL://……}5、设置视频捕获格式当检测完视频设备支持的标准后,还需要设定视频捕获格式:structv4l2_formatfmt;memset(&fmt,0,sizeof(fmt));fmt.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;f

7、mt.fmt.pix.width=720;fmt.fmt.pix.height=576;fmt.fmt.pix.pixelformat=V4L2_PIX_FMT_YUYV;fmt.fmt.pix.field=V4L2_FIELD_INTERLACED;if(ioctl(fd,VIDIOC_S_FMT,&fmt)==-1){return-1;}v4l2_format结构体定义如下:structv4l2_format{enumv4l2_buf_typetype;//数据流类型,必须永远是V4L2_BUF_TYPE_VIDEO_C

8、APTUREunion{structv4l2_pix_formatpix;structv4l2_windowwin;structv4l2_vbi_formatvbi;__u8raw_data[200];}fmt;};structv4l2_pix_format{__u32width;//宽,必须是16的倍数__u32height;//高,必须是16的倍数__u32pixelformat;//视频数据存储类型,例如是YUV4:2:2还是RGBenumv4l2_fieldfield;__u32bytesperline;__u32s

9、izeimage;enumv4l2_colorspacecolorspace;__u32priv;};6、分配内存接下来可以为视频捕获分配内存:structv4l2_requestbuffersreq;if(ioctl(fd,VIDIOC_REQBUFS,&req)==-1){return

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。