1 硬件设计
数字电影放映系统主要是以数字多媒体处理器TMS320DM6446为核心来实现的。TMS320DM6446是TI公司的高集成度视频处理芯片,业界称为达芬奇(DaVinci)数字媒体片上系统(Digital Media system-on-Chip,DMSoC)。图1为TMS320DM6446功能结构框图。
如图1所示,DMSoC包括ARM子系统、DSP子系统、视频处理子系统(VPSS)、系统控制模块、电源管理模块、外部存储接口、外围控制模块和交换中心资源(SCR)等。其中,ARM子系统主要负责TMS320DM6446系统的整体配置和模块功能控制,以及调用视频算法。工作频率近600 MHz的DSP子系统负责视频算法的执行,其最大处理能力可以达到4800MIPS,极大地增强了音频和视频的解码能力。视频处理子系统包括1个视频前端输入接口(VPFE)和1个视频末端输出接口(VPBE),视频前端输入接口用于捕获视频信号,视频末端输出接口将图像输出到OSD上显示。
本系统的结构框图如图2所示。系统通过异步外部存储器接口(EMIF)外接64 MB的NAND Flash,用于存储启动代码和数据,以引导加载ARM Linux操作系统。利用ATA控制器接口外接160 GB 2.5 in的ATA硬盘,主要用于Linux系统的文件系统、应用程序和大量数字影片文件的存储。由于ATA硬盘输出的是3.3 V电压信号,而TMS320DM6446硬盘控制器输出的电压信号为1.8 V,为使硬盘与主CPU正常连接,需要电压转换芯片来保证硬盘的正常工作。此外,为了方便改变视频节目及便于实验的测试,本系统还通过MMC/SD存储卡接口扩展了2 GB的SD卡和USB2.0接口。利用TMS320DM6446的32位DDR2控制器接256 MB DDR2型SDRAM缓冲视频输入图形数据,作为OSD的缓冲器来存储ARM和DSP代码。
系统的视频前端输入接口(VPFE)支持复合视频(CVBS)输入及S-端子输入。视频末端输出接口VPBE支持模拟视频输出,包括复合视频(CVB-S)输出、S端子输出、分量视频输出(YPbPr)及VGA输出;同时,支持数字视频输出(DVI)。视频解码模块采用TI公司的高质量视频解码芯片TV-P5158,把常见的基带模拟视频格式转换为数字视频格式。输入的视频数据通过TVP5158视频解码芯片转换成10位YUV4:2:2的格式,然后送至视频前端处理,处理完的数据再经视频末端处理后保存至硬盘。音频解码模块采用TI公司的低功耗立体声解码芯片TLV320AIC33。考虑到系统要接多个模块,这里利用AIC33串行总线控制支持的I2C协议,通过I2C接口与DSP的音频端接口相连。另外,为了监控硬件平台的启动情况,利用TMS320DM6446集成的UART外设控制器,扩展了UART通用异步串口,配置RS232用于系统启动时控制台。
2 软件设计
数字电影放映系统的软件设计主要是在Linux系统环境下,利用达芬奇软件框架结构来完成的。通过将符合数字媒体标准(xDM)的音频和视频算法打包在由CodecEngine(代码引擎)管理的Codec Server(代码服务器)里,ARM端的应用程序就可以调用集成在Codec Server里的音频和视频算法,解码来自Linux文件系统的音频、视频、语音数据,输出到TMS320DM6446上控制视频和语音外设的Linux器件驱动器。
2.1 达芬奇软件开发方法
在进行本系统软件开发时,软件开发流程如图3所示。
软件开发具体步骤如下:
①DSP端,在TI公司推出的CCS3.3开发环境下,把音视频解码算法修改成符合数字媒体标准(xDM)的形式,并编译生成一个算法的库文件*.lib(等同于Linux环境下的*.a64P,直接在Linux环境下修改文件后缀名即可)。
②生成一个在DSP上运行的可执行程序*.x64P(即.out文件),也就是Codec Server。本系统的Codec Server里集成了MPEG-2、MPEG-4、H.264、AAC、MP3、G.71l多种形式的音视频解码器。
③根据Codec Server的名称及其中包含的具体的音视频解码算法,创建Codec Engine的配置文件*.cfg,包括Engine的不同配置、名称,每个Engine里包括的Codec以及每个Codec运行在ARM还是DSP端等。例如,在.cfg文件中,可以修改取得Codec模块的相关语句,按需要引用Codec模块。取得不同模块的语句如下;
代码模块可以自己开发,也可以充分利用第三方的软件技术,任何与xDM兼容的算法都可以集成到Codec Server中。这样就避免了开发的重复性,降低了开发的难度。
④将收集到的不同音视频Codec包、Codec Server和Engine配置文件*.cfg以及应用程序通过编译、链接,最终生成ARM端可执行文件。
2.2 达芬奇中间框架Codec Engine
Codec Engine是介于应用程序和代码服务器的中间层,是利用DaVinci技术简化数字产品开发的关键组件。它为应用程序提供了VISA接口,在不必考虑复杂的视频、图像、话音和语音处理算法(VISA)的前提下,利用Codec Engine提供的API,应用程序可以方便地调用符合xDM的算法组件。
2.3 ARM端解码应用程序的设计
本系统的应用程序是在Linux系统环境下,利用DaVinci技术的Codec Engine提供的API来完成的。应用程序运行在TMS320DM6446双核处理器的ARM端,解码存储在硬盘里的音频、视频、语音数据,通过视频末端输出接口(VPBE)输出,在OSD上实时显示。
解码线程的流程如图4所示。
应用程序主要包括5个POSIX线程:主线程(控制线程)、视频线程、显示线程、语音线程以及音频线程。从图4中可以看到,视频、语音、音频线程在主线程变成控制线程之前产生。显示线程由视频线程产生。“MSP430+IR”用来接收用户输入的命令,只有在命令行里提供了一个视频文件时,才能建立视频线程。同时,由于音频和语音要求同样的外设(AIC33),因此,不能同时解码音频和语音文件。此外,所有的线程都是抢占式的,基于优先级的时序(SCHED_FIFO),其中,显示线程具有最高的优先级,接下来是视频线程,控制线程的优先级最低。线程的初始化由Rendezvous公用程序模块来同步。该模块使用POSIX的条件来同步线程的初始化。每个线程执行其初始化后,通知Rendezvous的对象。所有的线程都结束初始化后,同时解锁,开始执行主循环。
3 测试结果
本系统的软件开发是在虚拟机上的Linux操作系统下进行的,Linux操作系统的版本为Monta Vista Linux Professional Edition v4。测试前,用交叉网线将硬件平台通过交换机与主机相连,并配置NFS(Network File System,网络文件系统)服务,使得开发板和主机可以互相访问;同时,在主机的Windows环境下,将开发板与主机用串口线相连,设置超级终端,通过超级终端监控硬件系统的启动情况,并设置命令参数。
测试时,在超级终端里输入解码命令,硬件系统通过MSP430解析输入的命令,读取存储在HDD(硬盘)里的音视频数据,利用OSD在线显示解码的影片。图5~图7分别为对MPEG-2、MPEG-4、H.264音视频的解码图像。
结语
本文结合达芬奇数字多媒体技术提出了数字电影放映系统的硬件解决方案及软件设计方法。利用达芬奇对高层Linux的支持、标准化的API以及产品化的底层驱动器,大大降低了设计数字视频系统的复杂性,缩短了产品的开发周期。测试表明,所设计的数字电影放映系统支持多种格式的数字影片的高清播放,且具有高稳定性和高可靠性。该设计方案还可以用于其他数字产品的开发,如IP机顶盒、网络摄像机、医学图像处理、视频会议等。