新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 嵌入式Linux视频采集系统的设计与实现

嵌入式Linux视频采集系统的设计与实现

作者:时间:2012-04-20来源:网络收藏

在本中,程序主要用到的一些调用函数如下:open(“/dev/video0”,O_RDWR):设备的打开。

close(fd):设备的关闭。

mmap(voidaddr,size_tlen,intprot,intflags,intfd,off_toffset):设备缓冲区到内存空间的映射。

munmap(voidaddr,size_tlen):工作结束后取消mmap和mbuf的绑定。

ioctl(intfd,intcmd,。。。):控制I/O通道。

4。2。2程序的1)打开摄像头首先对上面提到的类进行初始化,接下来利用调用函数_fd=open(“devfile”,O_RDWR),该函数的功能是打开参数devfile指定的设备,对于摄像头用设备文件名“/dev/video0”表示,_fd是设备打开后返回的文件描述符,以后可以直接使用它来对设备文件进行操作。

2)获取摄像头参数通过ioctl(_fd,VIDIOCGCAP,capability)函数来读取structvideo_capability结构中有关摄像头的信息。ioctl(int_fd,intcmd,。。。)主要是用来控制I/O通道,函数成功返回后使用printf函数得到各成员分量信息,接着调用ioctl(_fd,VIDIOCGWIN,window)和ioctl(_fd,VIDIOCGPICT,picture)函数读取structvideo_window信息和摄像头缓冲区中的video_picture图像信息。

3)设置摄像头缓冲区中图像参数在摄像头数据前,可根据需求修改图像参数如分辨率等,具体方法为先给分量赋新值,再调用函数ioctl(_fd,VIDIOCSPICT,picture)。

4)数据的读取与read()方式相比,mmap()方式通过把设备文件映射到内存,绕过了内核缓冲区,加速了I/O访问。完成内存映射之后,就可以用mmap()方式对内存映射区域视频数据的单帧采集。此方式下真正做视频截取的为VIDIOCMCAPTURE,调用函数ioctl(_fd,VIDIOCMCAPTURE,mmap),激活设备并真正开始一帧图像的截取,是非阻塞的,接着调用ioctl(_fd,VIDIOCSYNC,frame)函数等待一帧图像截取结束,成功返回表示一帧截取已完成,接着可以做下一次的VIDIOCMCAPTURE操作。

经过上述的几个过程,系统完成了对USB摄像头的驱动、对视频数据的采集工作,捕获到的视频帧被映射到内存区域,如果要对视频数据进行压缩等处理工作则可通过访问内存映射区域进行。

5结语作为网络视频监控系统的一部分,本方案基于目前市场上主流的ARM处理器与操作系统,了视频数据的实时采集,整个系统数字化、网络化程度高,与传统的采集系统相比有较大优势。经办公室局域网测试,该系统实时性好、稳定可靠、图像质量也比较优越,可广泛应用在交通、银行、工业监控及视频会议等众多领域。目前该项目产生的经济效益约为20万元。

本文作者创新点:了一个基于的视频采集系统,详细介绍了Video4下USB摄像头驱动和视频采集程序的实现过程。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭