s3c6410是三星电子公司生产的一款基于ARM11 76JZF-S核的微处理器。
其内核在1.2V供电时主频可达667MHz。s3c6410具有适合于多媒体处理器应用的特性,内集成一个硬件多格式编码器MFC(Multi-Format video Codec)。支持30fps标清H.264,MPEG4,H.263格式视频的编码和解码,支持JPEG格式图片的编码和解码,也支持30fps标清VC-1格式视频的解码,这个硬件编解码器还支持实时的视频会议以及NTSC和PAL制式的TV输出。
本人着重介绍其独特的硬件MFC的原理及应用。
1.MFC的软件结构
在基于s3c6410的多媒体应用中,MFC软件的层次如图1所示,多媒体应用程序调用MFC的API,API调用MFC驱动提供的I/OCTROL,I/OCTROL通过MFC设备驱动,完成视频,图片的编码或解码。
多媒体应用程序有两种方式使用s3c6410的硬件编解码器MFC。
方式1:多媒体应用程序调用MFC的解码或解码API函数,这些API函数实际是驱动I/OCTROL接口的一个封装,便于应用程序调用
方式2:多媒体应用程序可直接调用MFC驱动的I/OCTROL函数,绕过API,不用API。
本人主要探讨方式1的使用。
实际上,方式1是将方式2的驱动I/OCTROL调用封装成更简捷,方便的API函数
2.MFC的解码器
MFC解码支持两种输入方式,分别为LINE_BUF方式和RING_BUF方式,两种解码方式使用于不同的场合。
前者常用于视频文件数据的解码,后者一般用于连续视频流数据的解码。
如表1所示
LINE_BUF方式解码
LINE_BUF要求应用程序将一帧完整的视频流数据(大小不定)填入解码缓冲区,然后启动一次解码过程。
即:填入一帧视频数据→LINE_BUF→MFC解码一次→解码后放入FRAM_BUF如图2图3.
RING_BUF方式解码
RING_BUF下,应用程序需要将PART大小的视频流数据填入解码缓冲区,PART的大小由驱动决定,然后启动若干次解码过程。即:
填入PART大小的视频数据→RINE_BUF→MFC解码若干次→解码放入FRAM_BUF如图4.
3.MFC编码器
应用程序从摄像头将一帧完整的YUV420视频数据取出,填入编码缓冲区,然后启动一次编码过程,编码后的数据放在LINE_BUF中,编码格式可设置为H.264,MPEG4,H.263中的一种。
4.MFC解码API
由于MFC支持LINE_BUF模式和RING_BUF模式的解码,两种模式的解码函数相似。LINE_BUF模式下H.264的解码API,如表2所示。
5.MFC解码API的编程方法
下面以一个H.264视频文件的解码及显示为例,说明MFC解码API的解码方法,如图5,图6所示。
6.MFC的实际应用
可以把MFC移植到在Linux操作系统下的MPlayer,SIP可视电话Linphone等开源软件,用硬件MFC替代这些开源软件的底层软件codec,就可以成功实现开源软件在嵌入式多媒体终端上的应用。
经测试,6410上运行Mplayer采用软件解码的CPU占用率为99.6,而采用MFC硬件解码的CPU占用率为13%,可见使用专用的硬件MFC,使得多媒体处理的性能大幅提高,播放视频流畅,效果令人满意。
图7为基于S3C6410 MFC实现的一个网络广告推送机终端的截图。该终端实现了一路标清视频文件MPlayer的解码和播放,两路JPEG文件的解码盒显示,一段基于FreeType矢量字体引擎的TrueType字体格式文字的滚动显示
除了上述解码功能的应用,S3C6410支持4路H.264,MPEG4,H.263的视频编码,支持JPEG图片的编码或解码,因此可用于网络可视电视,IP视频监控的终端设计,可见,S3C6410在VOIP可视电话,视频监控系统,IP广告机,游戏机,手持播放器中都有广泛应用。