【测控技术与仪器】v4l2视频采集_第1页
【测控技术与仪器】v4l2视频采集_第2页
【测控技术与仪器】v4l2视频采集_第3页
【测控技术与仪器】v4l2视频采集_第4页
【测控技术与仪器】v4l2视频采集_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

V4L2编程V4L2是针对UVC免驱USB设备的编程框架,主要用于采集USB摄像头等,编程模式如下一设置采集方式打开视频设备后,可以设置该视频设备的属性,例如裁剪、缩放等。这一步是可选的。在LINUX编程中,一般使用IOCTL函数来对设备的I/O通道进行管理EXTERNINTIOCTLINT_FD,UNSIGNEDLONGINT_REQUEST,_THROW_FD设备的ID,例如刚才用OPEN函数打开视频通道后返回的CAMERAFD;_REQUEST具体的命令标志符。在进行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设置视频信号的边框VIDIOC_G_CROP读取视频信号的边框VIDIOC_QBUF把数据从缓存中读取出来VIDIOC_DQBUF把数据放回缓存队列VIDIOC_STREAMON开始视频显示函数VIDIOC_STREAMOFF结束视频显示函数VIDIOC_QUERYSTD检查当前视频设备支持的标准,例如PAL或NTSC。这些IO调用,有些是必须的,有些是可选择的。二一般操作流程(视频设备)1打开设备文件。INTFDOPEN”/DEV/VIDEO0,O_RDWR2取得设备的CAPABILITY,看看设备具有什么功能,比如是否具有视频输入,或者音频输入输出等。VIDIOC_QUERYCAP,STRUCTV4L2_CAPABILITYV4L2_STD_IDSTDDORETIOCTLFD,VIDIOC_QUERYSTD,WHILERET1SWITCHSTDCASEV4L2_STD_NTSC/CASEV4L2_STD_PAL/3选择视频输入,一个视频设备可以有多个视频输入。VIDIOC_S_INPUT,STRUCTV4L2_INPUT可不要4设置视频的制式和帧格式,制式包括PAL,NTSC,帧的格式个包括宽度和高度等。VIDIOC_S_STD,VIDIOC_S_FMT,STRUCTV4L2_STD_ID,STRUCTV4L2_FORMATSTRUCTV4L2_FORMATFMT/V4L2_FORMAT结构如下STRUCTV4L2_FORMATENUMV4L2_BUF_TYPETYPE/数据流类型,必须永远是V4L2_BUF_TYPE_VIDEO_CAPTUREUNIONSTRUCTV4L2_PIX_FORMATPIXSTRUCTV4L2_WINDOWWINSTRUCTV4L2_VBI_FORMATVBI_U8RAW_DATA200FMTSTRUCTV4L2_PIX_FORMAT_U32WIDTH/宽,必须是16的倍数_U32HEIGHT/高,必须是16的倍数_U32PIXELFORMAT/视频数据存储类型,例如是YUV422还是RGBENUMV4L2_FIELDFIELD_U32BYTESPERLINE_U32SIZEIMAGEENUMV4L2_COLORSPACECOLORSPACE_U32PRIV/样例MEMSETFMTTYPEV4L2_BUF_TYPE_VIDEO_CAPTUREFMTFMTPIXWIDTH320FMTFMTPIXHEIGHT240FMTFMTPIXPIXELFORMATV4L2_PIX_FMT_JPEGIFIOCTLFD,VIDIOC_S_FMT,/RETURN05向驱动申请帧缓冲,一般不超过5个。STRUCTV4L2_REQUESTBUFFERSSTRUCTV4L2_REQUESTBUFFERS_U32COUNT/缓存数量,也就是说在缓存队列里保持多少张照片ENUMV4L2_BUF_TYPETYPE/数据流类型,必须永远是V4L2_BUF_TYPE_VIDEO_CAPTUREENUMV4L2_MEMORYMEMORY/V4L2_MEMORY_MMAP或V4L2_MEMORY_USERPTR_U32RESERVED2样例STRUCTV4L2_REQUESTBUFFERSREQMEMSETREQCOUNT4REQTYPEV4L2_BUF_TYPE_VIDEO_CAPTUREREQMEMORYV4L2_MEMORY_MMAPIFIOCTLFD,VIDIOC_REQBUFS,/RETURN16申请物理内存将申请到的帧缓冲映射到用户空间,这样就可以直接操作采集到的帧了,而不必去复制。将申请到的帧缓冲全部入队列,以便存放采集到的数据VIDIOC_QBUF,STRUCTV4L2_BUFFERVIDEOBUFFERBUFFERSCALLOCREQCOUNT,SIZEOFVIDEOBUFFERPRINTF“SIZEOFVIDEOBUFFERISDN“,SIZEOFVIDEOBUFFERSTRUCTV4L2_BUFFERBUFFORNUMBUFS0NUMBUFSREQCOUNTNUMBUFSMEMSETBUFTYPEV4L2_BUF_TYPE_VIDEO_CAPTUREBUFMEMORYV4L2_MEMORY_MMAPBUFINDEXNUMBUFSIFIOCTLFD,VIDIOC_QUERYBUF,/RETURN1PRINTF“BUFLENISDN“,SIZEOFBUF/内存映射BUFFERSNUMBUFSLENGTHBUFLENGTHBUFFERSNUMBUFSOFFSETSIZE_TBUFMOFFSETBUFFERSNUMBUFSSTARTMMAPNULL,BUFLENGTH,PROT_READ|PROT_WRITE,MAP_SHARED,FD,BUFMOFFSETPRINTF“BUFFERSLENGTHD,BUFFERSOFFSETD,BUFFERSSTART0DN“,BUFFERSNUMBUFSLENGTH,BUFFERSNUMBUFSOFFSET,BUFFERSNUMBUFSSTART0PRINTF“BUF2LENISDN“,SIZEOFBUFFERSNUMBUFSSTARTIFBUFFERSNUMBUFSSTARTMAP_FAILEDPERROR“BUFFERSERRORN“/RETURN1IFIOCTLFD,VIDIOC_QBUF,/RETURN17开始视频的采集。ENUMV4L2_BUF_TYPETYPETYPEV4L2_BUF_TYPE_VIDEO_CAPTUREIFIOCTLFD,VIDIOC_STREAMON,/RETURN18出队列以取得已采集数据的帧缓冲,取得原始采集数据。VIDIOC_DQBUF,将缓冲重新入队列尾,这样可以循环采集。VIDIOC_QBUFIFIOCTLFD,VIDIOC_DQBUF,/RETURN1BUFTYPEV4L2_BUF_TYPE_VIDEO_CAPTUREBUFMEMORYV4L2_MEMORY_MMAPUNSIGNEDCHARPTCURBUFFERSNUMBUFSSTARTDEBUG“BUFBYTESUSEDDN“,BUFBYTESUSEDINTI1FORI10I1BUFBYTESUSEDI1IFBUFFERSNUMBUFSSTARTI10X000000FFBREAKIFI1BUFBYTESUSEDPRINTF“HUFFMANTABLEDONTEXISTN“INTIFORI0IBUFBYTESUSEDIIFBUFFERSNUMBUFSSTARTI0X000000FFPTCURDEBUG“ID,FF02X,D802XN“,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论