OK6410硬件学习-MFC(一)

来源:互联网 发布:linux更改用户名密码 编辑:程序博客网 时间:2024/06/06 07:26

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广告机,游戏机,手持播放器中都有广泛应用。




原创粉丝点击