摘要:网络摄像机是当今网络视频应用的一大热点,根据这方面的应用需求提出了一种全新的解决方案。该方案的实现是基于TMS320DM642处理器的,并且采用JPEG编码标准,最终实现了一个成本低廉且具有实时视频采集压缩功能及以太网传输功能的网络摄像机。
关键词:网络摄像机 TMS320DM642 设备驱动 网络开发组件
随着网络技术和多媒体技术的广泛应用,数字网络视频得到了飞速发展。在网络视频会议和网络监控领域中,将传统的模拟视频信号转换成数字视频信号,并且借助于现有的IP网络进行传输已成为当今的一大热点。
从技术实现方式来讲,通常是采用网络摄像机来实现。目前市场上的网络摄像机一般有两类:一类是普通摄像机加视频网关构成,但是这种方案体积庞大、操作繁琐;另一类是把全部网络接入功能都集成在摄像机中,其体积小、功能全、易于使用和维护。后类摄像机有多种解决方案,本文提出一种基于嵌入式DSP的设计方案,并且给出具体的硬件及软件实现。
1 硬件系统设计
1.1嵌入式处理器TMS320DM642
TMS320DM642(以下简称DM462)是TI公司近来发布的新一代多媒体处理器,它基于其第二代高性能的VelociTI VLIW结构,适用于多种数字媒体应用。DM642的时钟频率为600MHz,指令速度高达4800MIPS。这款DSP的两大特色在于:第一,拥有三个可配置的视频接口(VP),可同时采集三路视频信号;第二,集成了以太网接口,10/100Mbps模式自适应,能工作在全双工或半双工模式下,并具有硬件流控制和服务质量保证(QoS)支持。DM642的功能十分强大,它是构成多媒体通信系统的最佳平台之一。
1.2硬件整体架构
本系统的硬件平台由六部分组成,分别是视频采集、数据存储、视频处理、视频显示、网络和电源管理。其结构框图如图1所示。
视频采集部分采用模拟PAL制摄像头,配合高精度视频A/D转换器得到数字图像。A/D转换器采用TI公司的TVP5145芯片,其采样精度达到10bit,输出支持CCIR-656和BT656等格式。
数据存储部分的RAM采用三星公司的SDRAM。为配合DM642的64位EMIF(外部存储器接口),使用四片SDRAM,每片工作在16位模式,单片容量为32MB。数据存储部分的ROM采用ATMEL公司的NOR型的Flash芯片,总容量为256KB,数据总线为8位。本系统中的SDRAM用来存放系统运行时的代码以及临时图像数据,Flash用来保存系统自启动代码以及系统程序代码。
视频显示部分采用数字LCD,可省去数/模转换芯片,只需一片CPLD驱动LCD。CPLD采用Altera公司的MAX3000系列。这部分作为辅助功能,可根据实际运用场合进行选择。
DM642的以太网控制器(即EMAC)属于数据链路层,因此需外接物理层芯片才能进行网络通信。这里采用Intel公司的LXT971A芯片,它提供了MII(Media Independent Interface)接口,可以方便地和DM642连接。
电源管理部分在一个硬件系统设计中占有举足轻重的地位。本系统的电源模块采用MAXIM公司的解决方案,包括一片MAX1762芯片(产生1.4V电源给DM642的I/O供电和产生5V电源给LCD的逆变器供电)。
2 设备驱动设计
TI为DM642的VP口开发了一个两层设备驱动模型。上层驱动称为Class Driver,更靠近底层硬件。应用时只需根据这个模型编写驱动程序就可以了。
对于以太网口,TI提供了一个网络开发组件(NDK),为在DSP上开发网络应用程序提供了平台。有了这个平台,在开发网络应用程序时,就不用过多考虑数据如何封闭成IP包,也不用过多关心TCP/IP协议内部的工作机制,这样可以缩短产品的开发周期及上市时间。
1.2 视频端口的两层设备驱动模型
两层设备驱动模型如图2 所示。最上层是应用程序,最下层是底层硬件,包括DM642的VP口和视频A/D芯片。中间大花括号括起来部分即为设备驱动。图中还有一层芯片支持库(CSL),它提供配置及控制片上外设的C语言接口。
根据VP口的特点,设备驱动的两层驱动模型的每一层又细分了两层。从图2可以看到,把Class Driver分为FVID Class Driver和GIO Class Driver。前者更靠近应用程序,它提供一些特别适用于图像的API函数;后者提供与Mini Driver进行通信的API函数。Mini Driver分成通用部分和特殊部分,这样分的优势在于:当改变硬件构成时,无需重写Mini Driver,只需修改特殊部分即可,提高了代码的重复使用性。
2.2网络开发组件
网络开发组件的核心即为一系列TCP/IP协议栈库。包括:(1)栈库和网络工具库,它含有一些经过优化编译的协议栈代码;(2)操作系统适应库,它用来协调TCP/IP协议栈和DSP/BIOS之间的接口;(3)网络控制及调度库,它决定TCP/IP环境的初始化以及网络相关事件是如何被调度的;(4)多种硬件抽象层平台库,为TI公司的多种开发板(比如DSK、TEB和EVM等)提供支持。由于本系统为自行开发,所以不涉及HAL。
协议栈库的流程框图如图3所示,其中灰色模块分别代表前术五个库。
3 软件设计及实现
TI公司的DSP开发软件包括集成开发环境(CCS)、实时操作系统(DSP/BIOS)、第三方算法库标准(eXpressDSP)。DSP/BIOS是一个用户可裁剪的实时操作系统,包含内存管理、线程管理、中断、外设管理和任务调度等功能。另外,还需使用JPEG标准进行图像压缩,因为采用JPEG进行网络传输时,如果出现网络短暂阻塞,可将当前帧抛弃而不影响下一帧的图像,所以能够保证系统的实时性要求。在本系统中调用了TI提供的JPEG算法库来完成JPEG压缩。
3.1软件流程结构
根据本系统的要求,整个软件系统分为五个任务模块,每个模块完成稳中有降自的功能。这五个任务模块分别为输入任务、处理任务、输出任务、网络任务以及控制任务,其流程如图4所示。下面叙述任务间调度及分别完成的功能。
(1)输入任务
该任务模块主要完成将VP口采集到的数字图像存入动态分配的内存空间中,图像格式为YUV4:2:2(可根据需要进行设置),分辨率为720×480。然后对该图像色度信号进行4:2:0重采样,这样做的目的是为了调用JPEG算法库。完成以上两步后,输入任务模块发出一个消息给处理任务模块,告知图像在内存空间的中位置,让处理任务模块去做进一步的处理。接着,输入任务模块等待处理任务模块回复,收到回复消息后,继续采集下一帧图像。
(2)处理任务模块
该任务模块主要完成JPEG压缩。处理任务模块首先获得一个从输入任务模块发出的消息,并且从中得到图像数据。接着进行JPEG压缩,如前所述,压缩调用了JPEG算法库,其压缩的速度和性能比较好。在处理任务模块完成图像压缩后,发出三个消息:第一个发给输入任务模块,使其继续采集下一帧图像;第二个发给网络任务模块,把JPEG图像在内存中的位置以及字节数告诉网络任务模块供其处理,同时,处理任务模块将等待网络任务模块回复消息;最后一个消息发给输出任务模块,告知原始图像在内存中的位置,让输出任务模块把它输出到LCD进行显示。同样,它也将等待输出任务模块回复消息。
(3)输出任务模块
该任务模块完成将采集到的原始图像输出LCD进行显示。由于采集到的是YUV图像,而本系统的LCD使用RGB信号作为输入,这需要经过数字图像格式转换,该转换交由CPLD完成。
(4)网络任务模块
该任务模块完成网络传输功能。分三部分实现:第一部分先获得一个从处理伤模块发出的消息,从中得到JPEG图像的大小和在内存中的位置,并通过UDP协议的Socket套接字将其发送给客户。同时发出一个消息给处理任务模块,告知已获得JPEG图像,可进行下一帧图像的压缩。第二部分进行协议栈的初始化,包括IP地址、子网掩码和网关的设定。如果要连接Internet,必须设置DHCP,动态分配IP地址。除此以外,还要选择哪种网络服务,DM642支持Telnet、HTTP、Data server等服务,本系统使用HTTP服务。第三部分为加载网页,在PC机上用HTML编写网页,在该网页中内嵌一段JavaApplet小程序以实现本系统和客户端的交互。HTML文件不能直接加载给DM642,必须在DOS环境下使用binsrc插件把它转换成用C语言描述的数据数组。当用户通过IE浏览器访问本系统时,HTTP服务器通过嵌入式文件系统访问内存中的HTML网页(即访问那个用C语言描述的数据数组),该文件系统是基于RAM的文件系统,它驻留在OS.LIB中。同时,JavaApplet小程序随同HTML文件下载到客户端 并由IE浏览器解释执行。
(5)控制任务模块
该任务模块完成在HTML网页上对JPEG压缩性能的控制。在网页中接收的用户自定义参数,通过DSP/BIOS中的邮箱机制传北宜给处理任务模块,从而修改JPEG的压缩参数,改变压缩质量。图5所示即为接收用户修改参数的对话框,1表示压缩质量最差,100表示压缩质量最好。
这些任务的初始化在系统的main()函数里实现。另外,对DM642芯片的初始化(包括初始化寄存器、二级缓存(L2)的设置等)均在dm642init()函数中完成,该函数定义在DSP/BIOS的用户初始化函数列表中,在此不再赘述。
本文提出的基于TMS320DM642的网络摄像机的设计方案已经成功实现。在客户端打开IE浏览器,即可看到实时监控的图像,图像显示较流畅,在局域网内的图像帧率可以达到30帧/秒。而且可以同时采集多路视频信号,满足多个客户的连接请求。本系统满足了目前宽带环境中的网络视频会议以及视频监控的要求,其应用前景十分广泛。