摘要:介绍了一个基于PCI总线的多路MPEC-4数字监控系统的设计与实现。本系统将采集到的多路音、视频数据以MPEG-4标准进行压缩编码,将编码后的数据码流通过PCI总线传送至计算机,并进行存储、回放和检索等处理。详细介绍了整个系统的设计流程,同时介绍了板卡与主机之间实现高速数据传输的机制。本系统可在单机上实现16-32路的音、视频监控,具有很高的性价比。
关键词:数字监控系统 MPEC-4 高速数据传输
视频监控系统的发展经历了模拟监控和数字监控两个阶段。与模拟监控系统相比,数字监控系统不仅可以利用计算机对数据进行存储、分析和检索等处理,而且还具有抗干扰能力强、传输距离远、图像质量高等优点。数字监控系统也可以和计算机网络相结合来实现系
统的远程控制,易于维护和管理。因此,数字监控系统正逐步取代模拟监控系统,具有良好的应用前景。
目前国内的数字视频监控系统中单机的监控能力一般不超过16路,每路的图像压缩码率的调节范围较小,而且图像格式主要以CIF为主[5~6]。本文介绍的系统在单机上多可以达到32路的监控能力,而且可以保证音、视频的严格同步。同时,本系统支持CIF和QCIF等多种图像格式,压缩码率调节范围较大,可以满足多种场合的监控需求。
1 多路MPEG-4监控系统结构
本系统采用基于PCI总线板卡的架构,一块板卡可以监控4路音、视频数据。系统视频输入支持NTSC和PAL制式,采用MPEG-4标准对输入的多路音、视频信息进行压缩编码、解码,并提供运动检测等附加功能。在工控机上,利用软件可以很方便地对采集到的音、视频信息进行存储、检索和回放。系统利用高速PCI总线与微机进行通信,实现高速数据和控制码流的传输。整个硬件系统由摄像和云台模块、电源模块、视频采集模块、视频预处理模块、EPLD控制模块、音频编码模块、MPEG-4多媒体压缩编码模块和PCI总线控制模块组成,其连接框图如所示。
多路视频采集模块对输入的视频信号进行模/数转换。该模块支持复合视频输入,经过转换后的输出信号是符合ITU-656标准的4:2:2的数字视频信号。同时,该模块能够自动识别输入信号的制式。其支持的复合视频制式有NTSC、PAL和SECAM三种。
视频预处理模块通过对模块中芯片的内部寄存器进行设置来实现对视频输出的亮度、对比度和色度的调整,以及对视频图像尺寸、子图的大小、位置等的控制。
EPLD控制模块主要根据控制流信息将视频预处理模块输出的ITU-656数字视频进行格式转换,并输出到MPEG-4压缩编码模块中。同时,它也提供行、场等同步信号。EPLD控制模块还根据后向控制流为音频编码模块提供多路帧同步信号。
音频编码模块对输入的音频进行μ律PCM编码。MPEG-4多媒体压缩编码模块完成音、视频信号的MPEG-4压缩编码,并输出到PCI总线控制模块,同时提供运动检测等附加信息。PCI总线控制模块主要负责板卡与主机间的MPEG-4码流和控制流信息的高速传输。
2 MPEG-4压缩编码模块
MPEG-4压缩编码模块采用的是INTIME公司的IME6400芯片。IME6400是一块多通道实时数字音视频MPEG-4/2/1压缩芯片。它不仅可以支持原始的音、视频信息,而且还支持PCM编码的音频信号等。IME6400具有多种输出数据格式,这使得它在图像数据存储、传输等方面具有广泛的应用。
IME6400是按照内部的fireware工作的。在实现上,fireware软件既可以存放在一个外挂的ROM中,也可以从外部主机通过IME6400的Host Interface(主机接口)到芯片中去[1]。本系统中采用外挂ROM的方法,这样用户可以选择fireware的版本并定期进行软件更新。IME6400的原理框图[1]如所示。
在本系统中,音频编码模块和EPLD控制模块的输出与IME6400的音、视频输入模块相连接,然后由IME6400完成音、视频信号的MPEG-4压缩编码。IME6400利用主机接口和PCI总线控制模块之间的相连,构成数据和控制通道。同时,外挂SDRAM用来存储已编码的码流,而内部1KByte的FIFO用来实现编码码流的快速传输。外部主机可以按照规定的流程对一些恰当的主机接口控制寄存器进行读或写操作,还可以完成直接寄存器读写、IME6400系统内存的访问、FIFO缓冲区的访问和firmware软件的等操作。
除了上述功能外,IME6400还可以根据主机自定义的运动检测要求实现运动检测,并将检测到的信息以包的形式传送给主机。
3 PCl 总线控制模块
PCI总线控制模块采用的是PHILIPS公司的SAA7146A PCI桥芯片。它具有三个视频DMA通道和四个音频DMA通道,同时集成了一些单元模块,如MMU、BPS和HPS等。它还包含了众多接口,可以和众多的音、视频处理芯片实现无缝连接,为多媒体数据的传输和处理提供比较广泛的应用。SAA7146A的原理框图[2]如所示。
数据扩展总线接口(DEBl)为外围设备提供了8/16位的数据传输和控制功能,支持立即传输和块传输两种方式。在系统中,SAA7l46A的DEBI跟MPEG-4压缩编码模块相连接,实现MPEG-4压缩码流的接收。同时,通过PCI总线接口模块,利用DMA传输方式在计算机和硬件板卡间实现压缩码流的高速传输。SAA7146A具有I2C总线接口,可以很方便地对具有12C接口的外围芯片进行控制。
SAA7146A中的D1接口可以和视频解码芯片或视频压缩芯片相连接,利用HPS可以对视频信号进行定标、缩放等处理,也可以利用BRS对视频信号进行CIF、QCIF或者QQCIF格式转换。 除此之外,SAA7146A还提供了与音频处理芯片连接的多个接口。
4 高速数据传输机制的设计
整个系统的软件主要由两部分组成。一是设备驱动程序,主要负责硬件板卡和计算机之间的交互;二是上层应用程序,用于实现系统的功能。由于多路监控系统的数据传输量非常大,因此设计一个高效的驱动程序以实现高速数据传输对整个系统的性能具有重要的影响。
4.1 驱动程序的设计
本系统的设备驱动程序采用了Windows 2000下的Windows Driver Model(WDM)驱动程序。在Windows2000中,系统有两种命名设备的方法:一种是使用符号连接名,但它的安全陛不是很好[4];另一种是利用具有性的GUID号表示设备接口。上层应用程序可以通过上面两种方法获得有效的设备句柄,并利用这个设备句柄实现对设备驱动程序的访问。当上层应用程序调用WIN32AHI函数后,将由Win32子系统调用I/O服务接口,并传送给内核模式下的I/O系统服务模块。接着,I/0管理器将检查这个请求的参数,然后创建一个合适的I/O请求包(1RP)。这个IRP经过分层驱动程序的处理传送给一个合适的设备驱动程序,并由这个程序通过硬件抽象层对硬件进行操作,完成这个IRP请求。,I/O管理器把结果和数据还回给应用程序[3]。
在本系统的Windows2000的WDM驱动程序中,除了基本的功能模块[3](如PNP模块、Dispatch模块、Power模块等)外,可以把其余部分大概分为板卡初始化模块、参数设置模块、中断服务模块和DMA传输模块等。
为了能够使PCI总线控制模块实时地从压缩编码模块中读取压缩码流,并及时地传送给计算机,本系统采用了中断机制。当压缩编码模块中的FIFO满时,压缩编码模块产生一个中断信号,通知PCI总线控制模块启动DMA,利用块传输方式读取FIFO中的数据。同时,IME6400将后面的编码数据暂存在外挂的SDRAM中。
PHILIPS公司的SAA7146A是一片具有总线主控DMA控制器的PCI桥芯片,可以实现内存和设备间快速的数据传输。本系统采用“基于包”的DMA传输方式;同时,为了进一步提高速度,使DMA将数据直接搬移到用户应用程序中所申请的循环缓存区中。DMA的流程如所示。其中,Saa7l46Read例程的主要功能是进行DMA的初始化操作,并启动编码码流输出。AdapterCon-trol例程确保计算机处理器高速缓存中的内容为当前使用的内存缓冲区中的内容。DpcForIsr例程完成内存物理地址和传输的数据长度的获得,并把它们写到DMA控制寄存器中,该例程还在合适的条件下与应用程序利用事件进行通信。
4.2 传输机制的设计
在数字监控系统中,为了实现数据的实时传输,应该仔细设计设备驱动程序和上层应用程序间的数据传输机制,来确保数据的完整性和实时性。
Windows2000操作系统把虚拟内存地址空间分为用户模式的虚拟地址空间和内核模式的地址空间。一般来讲,内核模式驱动程序几乎不使用用户模式的虚拟地址来访问内存。实际上,Windows2000操作系统为驱动程序访问用户模式的数据缓冲区提供了一种方法:通过应用程序调用DeviceIoControl、ReadFile和WriteFile等API函数,传递给这些函数用户模式的虚拟地址和数据长度等参数,这样就相当于向I/O管理器提供了一个数据缓冲区。I/O管理器再根据设备驱动程序中指定的三种不同机制[3](buffer方式、direct方式和neither方式)中的一种,利用不同的实现方法来实现用户模式和内核模式间数据的共享。
Buffer方式是一种在对速度要求不高的情况下常用的方法。在本系统的板卡初始化模块和参数设置模块中,由于对速度、数据量的要求都不是很高,所以采用了这种方式的共享方法。但是在DMA传输模块中,为了能够实现大量的MPEG-4码流的高速实时传输,本系统设法省去了数据传输中间的复制过程,将编码码流数据直接搬移到应用程序的一个循环缓冲区中去。本系统采用的这种方法有点像neither方式,具体的实现方法如下:应用程序申请并锁定一块循环缓冲区,然后将得到的这块内存的用户模式虚拟地址和长度传送给内核设备驱动程序。在设备驱动程序中,利用传送下来的用户模式地址和缓冲区长度为这块用户模式缓冲区创建MDL(内存描述符),并将它映射到内核模式地址空间,得到一个内核模式的虚拟地址,这样驱动程序就可以通过这个地址直接访问应用程序申请的共享内存块。
除了上述的方法外,共享内存块也可以由内核驱动程序申请的系统缓冲区来充当,并通过转换得到用户模式的虚拟地址,应用程序就可以通过这个地址直接访问系统地址。
另外,为了实现应用程序和驱动程序的同步,采用了共享事件的方法[4]。在Windows2000中,应用程序和内核驱动程序可以共享同一命名的事件,这个事件可以由任意一方创建。当其中一方创建了一个事件后,就可以把这个事件的句柄传送给另一方来实现事件的共享,然后通过一方捕获事件信号态、另一方设置事件信号态的方法实现两者间的通信。
在一台CPU速度为1.8G、内存为512M的工控机上,本系统可支持8块压缩板卡同时工作,从而提供对32路音视频数据的监控能力,系统的压缩率在较宽的范围内可调。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。