微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式Linux视频采集系统的设计与实现

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

时间:04-20 来源:互联网 点击:

视频流采集应用程序。摄像头中各种I/O口的控制依靠Video4Linux提供的应用程序接口函数实现,主要有Open、Read、Write等。V4L下的视频采集工作原理如图3。在本系统中,将有关摄像头的各种数据和结构封装成了一个类。

图3V4L下视频采集工作模型4。2。1Video4Linux定义的数据结构structvideo_capabilitycapability:包含摄像头设备的基本信息(设备名称、支持的最大最小分辨率、信号源信息等),分别对应着结构体中成员变量name[32],maxwidth,maxheight,minwidth,minheight,channels(信号源个数),type等。

structvideo_windowwindow:包含采集到图像的各种属性,如brightness(亮度)、hue(色调)、color(颜色)、contrast(对比度)、whiteness(色度)、depth(深度)等。

structvideo_channelchannel:关于各个信号源的属性,如channel(信号源编号)、name(名称)、tuners(信号源通道)、type(类型)、Norm(制式)等。

structvideo_picturepicture:包含关于capturearea的信息。

structvideo_mmapmmap:用于内存映射。

structvideo_mbufmbuf:利用mmap进行映射的帧信息,即输入到摄像头存储缓冲区中的帧信息,包括size(帧的大小)、frames(最多支持的帧数)、offsets(每帧相对基址的偏移)。

在本系统中,程序主要用到的一些系统调用函数如下: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处理器与嵌入式Linux操作系统,实现了视频数据的实时采集,整个系统数字化、网络化程度高,与传统的采集系统相比有较大优势。经办公室局域网测试,该系统实时性好、稳定可靠、图像质量也比较优越,可广泛应用在交通、银行、工业监控及视频会议等众多领域。目前该项目产生的经济效益约为20万元。

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top