一个比较详细的linux摄像头图像采集讲解

一个比较详细的linux摄像头图像采集讲解

ID:14646441

大小:41.00 KB

页数:5页

时间:2018-07-29

一个比较详细的linux摄像头图像采集讲解_第1页
一个比较详细的linux摄像头图像采集讲解_第2页
一个比较详细的linux摄像头图像采集讲解_第3页
一个比较详细的linux摄像头图像采集讲解_第4页
一个比较详细的linux摄像头图像采集讲解_第5页
资源描述:

《一个比较详细的linux摄像头图像采集讲解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、这一部分将会介绍如何在linux中对电视卡编程。开始已经提到过,电视卡使用的是videoforlinux驱动,简称v4l,实际上,现在已经有了videoforlinuxtwo驱动,即v4l2.它解决了v4l中存在的一些问题,并且提高了硬件性能。但是,目前来说,v4l2仍然没有集成到linux的内核中,要使用v4l2的话,只有去下载v4l2补丁了,以下如无特别说明,所涉及的内容只针对v4l设备而言。我们都知道,在linux中,为了屏蔽用户对设备访问的复杂性,采用了设备文件,即可以通过像访问普通文件一样的方式来对设备进行访问读写。电视卡在linux中和打印机,鼠标一样,属于字符设备。其主设备号是

2、81,在实际操作上,访问控制电视卡也和一般的设备文件没有什么不同。用open打开设备,intfd;fd=open("/dev/video0",O_RDWR);用一系列的ioctl发命令控制设备。v4l支持的ioctl命令大概有二十几个,为了尽快的编出一个简单的图象捕捉程序,让我们先来看看几个主要的命令:1.ioctl(fd,VIDIOCGCAP,&cap);该命令主要是为了获取电视卡的功能信息。例如电视卡的名称,类型,channel等。参数cap是一个结构,当ioctl命令返回时,结构的各成员就被赋值了,结构体的定义为:structvideo_capability{charname[32];

3、inttype;intchannels;/*Numchannels*/intaudios;/*Numaudiodevices*/intmaxwidth;/*Supportedwidth*/intmaxheight;/*Andheight*/intminwidth;/*Supportedwidth*/intminheight;/*Andheight*/};channel指的是有几个信号输入源,例如television,composite,s-video等。2.ioctl(fd,VIDIOCGCHAN,&vc)3.ioctl(fd,VIDIOCSCHAN.&vc)这两个命令用来取得和设置电视卡的

4、channel信息,例如使用那个输入源,制式等。vc是一个video_channel结构,其定义为:structvideo_capability{charname[32];inttype;intchannels;/*Numchannels*/intaudios;/*Numaudiodevices*/intmaxwidth;/*Supportedwidth*/intmaxheight;/*Andheight*/intminwidth;/*Supportedwidth*/intminheight;/*Andheight*/};structvideo_channel{intchannel;char

5、name[32];inttuners;//numberoftunersforthisinput__u32flags;__u16type;__u16norm;};成员channel代表输入源,通常,0:television1:composite12:s-videoname表示该输入源的名称。norm表示制式,通常,0:pal1:ntsc2:secam3:auto4.ioctl(fd,VIDIOCGMBUF,*mbuf)获得电视卡缓存的信息,参数mbuf是video_mbuf结构。其定义如下:structvideo_mbuf{intsize;/*Totalmemorytomap*/intfram

6、es;/*Frames*/intoffsets[VIDEO_MAX_FRAME];};size是缓存的大小,frames表明该电视卡的缓存可以容纳的帧数,数组offsets则表明对应一帧的起始位置,0帧对应offsets[0],1帧对应offsets[1]....执行完该命令后,就可以用mmap函数将缓存映射到内存中了。大致用法可以参考以下的代码structvideo_mbufmbuf;unsignedchar*buf1,*buf2;if(ioctl(fd,VIDIOCGMBUF,&mbuf)<0){perror("VIDIOCGMBUF");return-1;}printf("thefra

7、menumberis%d",mbuf.frames);buf1=(unsignedchar*)mmap(0,mbuf.size,PROT_READ

8、PROT_WRITE,MAP_SHARED,fd.0);buf1=buf1+mbuf.offset[0];buf2=buf1+mbuf.offset[1];//当然,如果mbuf.frames=1,就不需要下面的了。......5.ioctl(fd.VIDIO

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

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

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