首页 >> 视频通信 >> 技术 >> 正文
 
基于S3C6410的视频监控系统的设计与实现[图]
http://www.cww.net.cn   2012年2月9日 15:53    

嵌入式操作系统是嵌入式系统的重要组成部分,为应用程序的开发提供了一个软件平台。由于Linux系统具有良好的可裁剪和可移植等特性,目前较多地采用Linux系统来进行嵌入式系统的开发。

基于S3C6410的ARMSYS6410开发板,已经提供了基于Linux 2.6.28内核的操作系统源码。通过对内核各个功能模块进行裁剪,编译出镜像文件,然后下载到开发板上,即可实现Linux嵌入式操作系统以及相应的驱动程序的移植。

系统的整体数据流如图2所示。图中①表示原始数据从外部摄像头到摄像头驱动模块。②表示数据由驱动模块经过处理传输到内存。此时数据可以有不同的格式。③表示数据从内存中传送给视频编码模块的输入缓冲区。④表示MFC编码模块从输入缓冲区读取数据进行MPEG-4编码。⑤表示编码结束后将数据传送到视频编码模块的输出缓冲区。⑥表示从视频编码的输出缓冲区读取编码后的数据传送给网络传输模块进行传输。

在此需要注意的是,图示中的视频输入缓冲区对于解码模块是输入缓冲区,但是对于编码模块却是输出缓冲区。对于图示中的输出缓冲区也同样如此。

3.1 视频数据采集程序

视频采集程序使用内存映射的方式进行读取。通过内存映射直接把设备文件映射到内存中,绕过内核缓冲区,进程访问设备文件时和访问普通内存一样,极大的提高了视频数据的读取速度。

视频采集部分的流程图如图3所示。

下面列出视频采集部分的关键代码。

首先打开设备,其中CODEC_NODE为预定义宏,表示摄像头结点文件路径。

dev_fp=open(CODEC_NODE,O_RDWR);

在设置参数部分,首先要得到设备能力参数,检查是否具有所需的功能,然后再进行参数的设置。使用下面的代码来实现。

ioctl(dev_fp,VIDIOC_QUERYCAP,&cap);

上一行代码得到设备的功能信息,存储到参数caF中。在检查设备具有所需功能后,下一行代码进行参数设置。

ioctl(dev_fp,VIE)IOC_S_FMT,&codec_fmt);

其中,codec_fmt为一个格式信息的结构体类型参数。

在Linux平台,采集图像数据部分的实现方式与文件读取类似,采用下面的代码实现。

read(dev_fp,g_yuv,YUV_FR_BUF_SIZE);

而将数据传送给MFC模块这部分,可以采取直接共享缓冲区的方式,这样减少了一次数据在内存中的传输,增加了效率。

最后是关闭设备文件。先停止图像的采集,然后关闭文件。

ioctl(dev_fp,VIDIOC_STREAMOFF,&start);

close(dev_fp);

上述代码片段是视频采集部分的关键代码段。在实现部分还有很多的条件判断和分支选择等控制流程部分,这里不进行详细描述。

[1]  [2]  [3]  [4]  
来源:现代电子技术   作 者:胡世敏编 辑:高娟    联系电话:010-67110006-853
分享到新浪微博 分享到搜狐微博 分享到腾讯微博 分享到网易微博 分享到139说客 分享到校内人人网 分享到开心网 分享到QQ空间 分享到豆瓣 分享到QQ书签       收藏   打印  论坛   推荐给朋友
文章评论查看评论()
昵称:  验证码:
 
相关新闻
即时新闻
通信技术
最新方案
企业黄页
会议活动