基于ARM平台的远程视频监控系统的研究
部分,它存储了系统配置文件、系统程序和系统外设驱动程序。嵌入式Linux内核移植[2]好后,主要工作就变成在操作系统下编写驱动程序。在这里我们着重介绍OV9640的驱动程序的开发及MPEG-4编码的实现。
图三:以太网模块接口
2.1 OV9640驱动的开发[6]
在Linux下编写OV9640 CMOS图像传感器驱动,首先要初使化OV9640。通过SCCB总线设置OV9640的工作模式,各种参数,分配连续内存空间,容量与采集图像的点阵数相匹配。然后用request_irq()函数为OV9640登记中断,其中断号为06。当S3C2440捕捉到VSYNC信号时触发中断,把一帧图像数据拷贝到用户空间。如此反复,视频数据源源不断的被采集到SDRAM。软件流程如图四所示。
图四 读取OV9640数据流程
我们知道,用户进程是通过设备文件同硬件打交道,对设备文件的操作就是一些系统调用。要想把系统调用和设备驱动程序关联起来,必须用到一个非常关键的数据结构:struct file_operations{ }。因此编写设备驱动的主要工作就是编写数据结构中定义的子函数,并填充file_operations的各个域。
摄像头file_operations的数据结构如下
static struct file_operations cam_fops =
{ owner : THIS_MODULE,
open : cam_open,
read : cam_read,
ioctl : cam_ioctl,
release : cam_release,
};
编写好成员函数后,接下来编写module_init()和module_exit()。module_init()是驱动程序的入口,当用insmod命令加载模块时自动运行。此函数中包括①初使化CMOS图像传感器②分配连续内存地址空间③注册设备文件④登记中断。module_exit()函数在rmmod卸载模块时调用。函数功能包括①释放内存空间②释放中断③注销设备文件。
至此,驱动模块编写好了,编译加载后,我们就可以像操作普通文件一样对摄像头进行读取数据了
2.2基于MPEG4的数据压缩算法的实现
2.2.1 MPEG-4[7]压缩标准
数字视频流的数据量是巨大的,以QVGA图像,每秒20帧为例,每秒钟的数据量为2.92M,假设系统有十路传感器,如果不经过压缩,实现数据在网上的多路复用传输是相当困难的,为了系统可靠的运行,本设计采用高压缩率的MPEG-4视频压缩编码。MPEG-4最显著的特点是基于内容的编码方法,即把一段视频序列看成有不同的视频对象VO组成,编码器根据实际情况对各个视频对象面VOP进行编码,其最大压缩率可达到100:1。
2.2.2 MPEG-4的实现与优化
XVID是一种开源的MPEG-4视频编码软件,是目前所有开源视频编码软件中比较优秀的一个,它严格按照GPL发布,图像质量可以达到DVD的效果,而数据量只有DVD的1/8。XVID最新的版本为xvidcore1.1.0,这里我们选择xvidcore1.1.0作为进一步优化的基础。从 www.xvidcore.org 下载xvidcore1.1.0源码,修改MAKEFILE文件,把XVID移植到ARM平台。具体的实现方法可参照example下的例子,结合项目的实际,写出自己的应用程序。然后进入xvidcore-1.1.0/build/generic目录,执行./configure –disable –assembly命令,手工配置platform.inc文件,修改CC=/opt/host/armv41/bin/arm4l-unknown-linux-gcc,再执行make clean,make。最后把生成的库拷贝到example目录下,修改example下的Makefile文件,编译下载到目标板上运行即可。
经过测试,XVID的压缩比是很高的,可达到20:1,最重要的是编码速度快,压缩解压后的图像质量稍有降低,完全可以达到实用的要求。
3.结束语
利用嵌入式系统实现远程视频监控符合数字化、网络化的发展趋势,具有布线集中,设备简单,体积小,成本低等特点,与传统的视频监控方案比较有不可比拟的优越性。前端采集部分采用S3C2440微处理器,利用其自身提供的视频接口,图像采集的速度完全可以达到动态显示的要求(在400M的时钟频率下,QVGA图像可以达到20帧/秒的显示速率)。本文作者的创新点:采用图像压缩编码和网络技术,可实现视频数据的多路复用传输。监控端采用基于MPEG-4的视频对象分割方法,利用相邻帧视频对象的差异,实现智能报警的功能。该系统性价比较高,使用方便,值得推广使用。
4.参考文献
[1]S3C2440X RISC MICROPROCESSOR date sheet.samsung electronics.2003
[2]张积红,吴强.嵌入式linux研究及其在ARM上的移植.电脑知识与技术,2005,(8)
[3]OV9640 version1.0.Omnivision Technologies.2003
[4]王晓明,一种MPEG-4视频采集与传输系统的研究与实现,计算机测量与控制,2005,(8)
[5]陈福,马莉等.基于嵌入式系统的视频图像捕获研究与实现.微计算机信息,2005,(12)
[6]李驹光
视频采集 嵌入式Linux 驱动程序 MPEG-4编码 相关文章:
- 基于FPGA的视频信号发生器设计与应用研究(01-23)
- 基于ARM920T的红外通信系统的设计(03-11)
- 基于ARM9内核和嵌入式Linux的网络投影机系统设计(08-26)
- 基于嵌入式ARM-Linux无线ZigBee协调器驱动设计(11-02)
- 如何编写Linux设备驱动程序 (06-14)
- 基于WinCE的SPI接口驱动程序设计(08-03)