摘要:通过研究基于MIPS架构的SMP8654芯片的硬件架构,并且利用芯片内部的图形加速引擎GFX的方式实现了具有高清视频显示和图片文字处理功能的播放器。系统以嵌入式Linux和MiniGUI为平台设计了智能导诊系统,提高了医院的导诊就医的服务效率。智能导诊系统能够播放医院相关的健康宣传资料、专家排班信息。
关键词:MIPS;Linux;MiniGUI;智能导诊系统
MIPS微处理器是指无内部互锁流水级的处理器,它是由斯坦福大学的Hennessy教授领导的研究小组研制出来的。MIPS微处理器采用RISC(Recluced InstructionSet Computer)的设计原则,只支持有限的机器指令以及简单的算术指令,通过提供大量的内部寄存器减少内存访问次数。MIPS有32个通用寄存器,每个寄存器拥有32位的地址空间。系统通过研究基于MIPS架构的SMP8654芯片,设计和实现了高清播放器的视频播放以及图片字体显示功能。SMP8654解决方案是Sigma公司依据MIPS设计公司指导的全新设计方案,是Sigma公司专为满足高清视频播放应用需求而设计的全新芯片。和基于ARM架构的低端芯片相比,SMP8654的视频处理能力更加优越。
1 基于SMP8654芯片的高清播放器
1.1 SMP8654硬件介绍
SMP8654芯片的内部,有一个MIPS 24kf系列的主CPU芯片,工作频率为500 MHz。在主CPU芯片的内部,具有1个32 KB的指令Cache和1个32 KB的数据Cache、2个可编程计时器以及3个独立的中断控制器和2路UART(Universal Asynchronous Receiver/Transmitter)。主CPU内部采用双总线结构,G-bus是主总线,CPU通过此总线访问外部功能单元的各状态寄存器,而对主CPU芯片内部的中断控制器、计时器等的访问是通过将L-bus映射到G-Bus上的方式进行的。主CPU内部有一个高效的乘除运算单元(Multiply/Divide
Unit)及浮点数运算单元(FPU),还有一个增强的JTAG调试模块,用于调试应用程序及内核代码。
SMP8654芯片内部有一个IPU(Interrupt ProcesslngUnit)。这个MIPS 24kf系列的32位处理器专门处理那些需要低延时的应用需求。它主要处理从视频处理子系统(Video Processing Subsystem)所产生的中断。它的时钟频率为333 MHz,而且还有16 KB的指令Cache和16KB数据Cache。
SMP8654芯片包含两个DDR-DRAM控制器,每一个控制都支持高达512 MB的DDR2内存,这些外部存储器可以为音频、视频以及数据提供缓冲区,并且能存放硬件模块的临时数据。
1.2 SMP8654的视频及音频处理
1.2.1 视频解码子系统
SMP8654的视频解码子系统(Video Decoder Subsystem)可以解码HDSMPTE、H.264、HD WMV9、AVS、MPEG1、MPEG2等视频格式的视频文件。SMP8654的视频解码系统执行特定解码算法,它是一种基于处理器和电路逻辑方式的混合架构。能同时解码的视频文件数目是由视频的格式以及所要呈现的分辨率决定的。SMP8654可以支持包括IPTV、AVCHD、MSTV的视频解码要求。视频处理引擎是一个16位的RISC处理器,视频解压算法的密集计算部分是由此部分处理的。
1.2.2 视频处理子系统
视频处理子系统(Video Processing Subsystem)从内存中检索图形和视频图像,将这些图像混合并且缩放至某个显示器所要求的分辨率并且将其呈现出来。视频处理子系统可以控制颜 {MOD}、分辨率以及 {MOD}彩饱和度,并且能处理视频数据转换,选择视频的输出模式(模拟信号的输出模式包括RGB、YPbPr)。视频处理子系统还有一个2D图形加速功能模块。智能导诊系统利用此GFX引擎实现了文字和图片的高清显示功能。
1.2.3 音频处理子系统
SMP8654芯片的集成音频处理子系统(Audio)Processing Subsystem)是一个为用户专门设计的32位数字信号处理器,音频的解码和操作是由这个专用的DSP处理的。这个DSP工作在333 MHz的时钟频率下,指令和数据是分开存储的,DSP通过系统总线取得指令,通过数据总线获取需要解码的音频数据。和基于ARM架构的处理器一样,它有一个32位的指令系统,同时与之对应了一个16位的指令集,通过Load/Store从内存装载数据到DSP的相关寄存器中进行处理。
1.2.4 高清播放机硬件架构
高清播放机硬件架构如图1所示。高清播放器实现的功能主要包括视频处理以及图片文字显示。硬件架构中的重要部分包括视频解码子系统、视频处理子系统、音频处理子系统。这里的HDD表示可选的硬盘,通过内部的SATA接口控制。提供对USB2.0协议支持以及802.11n协议的支持,也就是说播放器可以从网络中读取各种视频资源,从硬盘或者是USB等移动盘中获得数据。视频处理子系统中的GFX代表的是图形加速引擎,通过Sigma公司提供的SDK可以很容易地操作这些硬件,实现硬件加速功能。在智能导诊系统的软件部分,介绍了如何利用硬件特性加速文字和图片的绘制过程。在智能导诊系统中,医院HIS系统中的病人挂号信息通过TCP/IP传递到此硬件播放器,然后再由硬件播放器处理,将病人信息排队到相关队列中,这样病人就可以在专门的等候区休息等候了。
2 基于嵌入式Linux和MiniGUI的主控程序
2.1 嵌入式Linux
Linux是一个完全免费的开源操作系统,内核可以被裁剪到134 KB左右。Linux是一个能够适应多种CPU和硬件平台的操作系统,裁剪之后的Linux系统用于这些设备中执行资源管理、任务调度、存储空间分配等任务。嵌入式应用系统的开发一般可以分为如下几个步骤:交叉编译工具的建立,Bootloader的编译和烧写,编译内核并移植到开发板,文件系统的编译和烧写。交叉编译是嵌入式系统开发中需要用到的一个常见技术,其主要特征是嵌入式设备上的可执行程序通常是在另外一台机器上编译生成的。通常将前者称为目标机器(Target),后者称为主机(Host)。主机拥有的资源丰富很适合在上面编译机器相关的代码,这种技术为软件的不同平台移植创造了便利条件。交叉编译工具配置在主机(Host)上编译及配置环境变量后,就可以用来编译Bootloader、内核和文件系统。Bootloader是一个启动加载Linux内核的固件程序,有点类似于PC机的BIOS程序,在完成硬件初始化以及内存映射等操作之后,通常会将外部存储介质上存放的内核镜像加载到RAM中,然后跳转到指定的内存位置执行。
2.2 MiniGUI用户界面
GUI(Graphical User Interface)是指采用图形方式显示的计算机操作用户界面。系统中所要阐述的高清播放机上需要提供人机交互界面,控制诸如视频的暂停、播放、文件更新以及播放机的声音控制和开关机控制等图形界面。智能导诊系统中使用的图形用户界面采用的是MiniGUI。MiniGUI是一个跨平台的面向嵌入式系统的轻量级图形用户界面支持系统,可在Linux/μClinux、eCos、μC/OS-II、VxWorks、pSOS、ThreadX等操作系统以及Win32平台上运行,广泛应用于手持信息终端、机顶盒、工业控制系统、便携式多媒体播放器机等产品和领域。
3 播放机软件系统设计
3.1 智能导诊系统的软件架构
SMP8654为应用开发提供分层服务架构,软件系统设计主要根据SMP8654分层服务模型,找出最优化的设计方案。智能导诊通过研究DCC的控制逻辑,及Sigma公司的SDK文档,设计出了如图2所示的SMP8654高清播放机的软件系统架构。智能导诊系统首先对硬件平台初始化,接着初始化有线或者无线网络(这部分主要作用是网络接口卡初始化操作,日志部分初始化是跟踪和调试应用程序的重要组成部分);接着创建MiniGUI主窗口,最后进入消息循环。
当MiniGUI接收到MSG_CLOSE消息时,由HWNDDESKTOP向主窗口发送退出消息,至此程序结束,播放机被关闭;当播放机接收到图片显示命令时,将命令消息存入到消息队列中,这里要创建消息队列是因为MiniGUI在接收到用户的各种不同命令时,都会将命令解析并且存入到任务队列中,由任务派发器将任务发送到不同模块处理。MiniGUI的主程序会根据用户选择的视频及音频文件,选择将消息发送到视频解码进程处理,当用户选择打开某个高清的图片时,消息队列中会保留图片大小、图片格式、图片的显示时间等控制信息。这里要使用任务队列的原因其实很简单,分离出播放器的一个个任务,让不同的软件服务模块处理。如果要播放视频,调度程序会将任务队列中的视频播放任务派发给视频解码进程处理。如果要使用GFX引擎高效率绘制图片,则任务被分派到高清图片处理进程处理。
智能导诊系统服务进程主要负责从医院HIS信息系统的接口函数中获得当前病人的挂号信息,并且通过TCP发送到高清播放机上,最后通过MiniGUI的Draw Text函数将相关病人信息以列表的方式显示在预先定义的排队队列中。这里的视频解码进程是独立的进程,主控程序和此进程的通信是通过Linux的消息队列机制实现的。消息队列是一种内核标示,两个进程之间的交互是通过调用msgsnd和msgrecv这样的函数实现的,只要两个进程的消息队列标识是一致的,进程之间就可以交互。当MiniGUI接收到退出消息时,会向视频解码进程发送退出消息,让视频解码进程清空所占用的系统资源。
SMP8654分层服务模型如图3所示。最下面的一层是相关硬件,如CPU、视频解码器、音频解码器、并行I/O接口。中间的一层MRUA(Movim iento rectiline unitormemente acelerado)提供了访问这些硬件的抽象接口,另外DCC(Decoding Chain Control)是通过访问MRUA的接口实现对视频播放控制、音频解码的操作。最顶层是软件播放器,可以基于DCC实现网络流媒体应用,或者定制自己的软件播放器。
3.2 利用图形加速引擎优化文字和高清图片显示
DCC是为应用程序提供的编程接口,而MRUA面向底层硬件,为上层的DCC提供硬件抽象和功能接口。在深入理解了DCC是如何控制硬件显示文字、处理图片以及播放视频之后,智能导诊系统利用MRUA库函数直接操作硬件特性,加快字体显示、图片处理效率,以及提升视频播放等各方面性能。DCC提供的多个对象为应用程序完成实际的功能提供函数接口,这些对象包括:
①Route。可以将Route理解为某个具体的媒体内容(Content)到硬件视频混合器(Hardware Video Mixer)的数据通道,它只负责把具体的媒体内容传送到硬件视频混合器中。
②Surface。可以将Surface理解为视频对象层(Video Object layer)。视频信息,屏幕显示以及字幕组成了一个完整的Content。在每一个Route对象中,通常会存在相同类型的多个Surface对象。
③VideoSource。可以将VideoSource理解为一个专为Surface生成图片的生产者,这个生成者可能是一个硬件视频解码器(Hardware MPEG decoder)。
④AudioMixer。可以将AudioMixer理解为一个类似Route的东两,它代表的也是一个数据通道,只不过它只负责将AudioSource这个音频生产者生成的音频帧信息组合成一个输出。
⑤AudioSource。可以将AudioSource理解为音频帧的生产者。
⑥DemuxSource。它是一个可分离流,并且将数据发送到视频、音频解码器的一个对象。当然也可以将它理解为一个生成者,负责将流(stream)数据分离出音频和视频信息,并发送到相关处理单元处理。
如图3所示,流解析器从内存中检索到与文件有关的信息之后,将数据流分解,然后组包成视频解码器以及音频解码器所处理的数据,并且交由DSP和Display Engine这样的设备进行处理。这些都可以由DCC控制,是由MRUA层抽象出的相关硬件功能。只要通过DCC层去控制相关硬件设备,便可以实现图片和文字的高清显示。下面将介绍如何通过DCC去控制GFX引擎实现图片和文字的显示。
GFX在图中没有画出,它是某个具体的图形加速设备。当要播放一个高清的图片或者绘制文字时,通常要经过几个步骤:RUA实例初始化,DCC实例初始化,设置图片的显示窗口,初始化GFX引擎,执行绘制,清空资源并退出。下面以伪码的方式给出其具体实现过程:
int main(int argc,char*argv[]){
创建RUA实例;
创建DCC对象实例;
初始化图片的显示选项;
初始化视频的湿示选项;
初始化播放控制选项;
从命令行参数获得欲显示的文件信息以及图片、视频播放控制选项(如果没有就使用默认值)
装载相关硬件单元微码;
创建硬件混合器Mixer;
创建ScaIer对象;
//scaler=EMHWLIB_MODULE(DispGFXMultiScaler,0);
为当前的Mixer对象创建一个关联Scaler对象的索引;
初始化GFX引擎;
设置GFX对象的各通道属性;
开始在GFX上投递绘制请求;
关闭GFX引擎,并依次关闭DCC实例对象,RUA实例对象;
}
结语
智能导诊系统基于MiniGUI和SMP8654的SDK完成了视频播放、文字图片显示的功能。基于MiniGUI的图形及文字绘制函数,如CreateLog Font、DrawText、LoadBitmap等的使用以及利用与硬件相关的图形加速引擎绘制图片和文件相结合的方式,增加了系统的图形绘制效果,提升了智能导诊系统性能。
综上所述,系统基于MIPS架构设计实现了高清播放机所要完成的视频播放以及图片文字显示功能。通过研究基于MIPS架构下的高清播放机最终选择了速度比较好的高清播放机芯片SMP8654,使得视频处理更加稳定,图片的加速解码及显示的速度更快。基于此架构的系统,可以扩展到各种信息发布系统中,如医院的信息发布系统、车载娱乐系统,具有很好的应用前景。