一、OpenMax简介
OpenMAX是一个多媒体应用程序的标准。由NVIDIA公司和Khronos™在2006年推出。
它是无授权费的 、跨平台的C语言程序接口序列 ,这些接口对音频、视频、静态图片的常用操作进行封装 。
它包括三层,分别是应用层(AI)、集成层(IL)和开发层(DL)。其中IL层已经成为了事实上的多媒体框架标准。嵌入式处理器或者多媒体编解码模块的硬件生产者,通常提供标准的OpenMax IL层的软件接口,这样软件的开发者就可以基于这个层次的标准化接口进行多媒体程序的开发。
二、OpenMax在Android中的位置
在Android中,OpenMax IL层,通常可以用于多媒体引擎的插件,Android的多媒体引擎OpenCore和StageFright都可以使用OpenMax作为插件,主要用于编解码(Codec)处理。在Android的框架层,也定义了由Android封装的OpenMax接口,和标准的接口概念基本相同,但是使用C++类型的接口,并且使用了Android的Binder IPC机制。Android封装OpenMax的接口被StageFright使用,OpenCore没有使用这个接口,而是使用其他形式对OpenMax IL层接口进行封装。

三、OpenMax的主要概念
- 客户端(Client) :访问IL core或IL component的软件层,可能是位于GUI应用程序的下层,如GStreamer。IL client是一个典型的功能块,如filter graph multimedia framework, OpenMAX AL, 或application都可以调用它。IL client与OpenMAX IL core进行交互,利用IL core加载和卸载组件、在组件间建立直接通信以及获得组件方法的入口。
- core :相关平台的代码,具有将IL component载入主存储器的功能,当应用程序不再需要某组件时,IL core将负责把该组件从存储器卸去。一般来说,组件一旦载入存储器,IL core将不在参与应用程序与组件之间的通信。
- 端口(Port) :组件的输入输出接口
- 组件(Component) :OpenMax IL的单元,每一个组件实现一种功能。组件按照端口可分类为Source(只有一个输出端口)、Sink(只有一个输入端口)和Host组件(一个输入端口和一个输出端口),此外有一个Accelerator组件,它具有一个输入端口,调用了硬件的编解码器,加速主要体现在这个环节上。
- 隧道化(Tunneled) :让两个组件直接连接的方式。通过隧道化可以将不同的组件的一个输入端口和一个输出端口连接到一起,在这种情况下,两个组件的处理过程合并,共同处理。尤其对于单输入和单输出的组件,两个组件将作为类似一个使用。
四、OpenMax的工作方式
首先,搭建好OpenMax的工作环境:设置组件端口、加载组件,建立连接方式等等。

然后通过输入端口消耗Buffer,通过输出端口填充Buffer,由此多组件相联接可以构成流式的处理。
五、OpenMax的测试方式
参考《Build OpenCORE 2.05 on x86 Linux.PDF》和《
omx_decoder_test_app_guide.pdf 》
六、OpenMax接口和集成过程(以android平台的为例)

七、android中支持的组件和Role
根据pv_omxregistry.cpp,得到如下表格(其中黄绿色部分表示没有相应编码器)
组件
|
角色
|
动态库名
|
OMX.PV.mpeg4dec
|
video_decoder.mpeg4
|
libomx_m4vdec_sharedlibrary
|
OMX.PV.h263dec
|
video_decoder.h263
|
libomx_m4vdec_sharedlibrary
|
OMX.PV.avcdec
|
video_decoder.avc
|
libomx_avcdec_sharedlibrary
|
OMX.PV.wmvdec
|
video_decoder.wmv
|
libomx_wmvdec_sharedlibrary
|
OMX.PV.rvdec
|
video_decoder.rv
|
libomx_rvdec_sharedlibrary
|
OMX.PV.aacdec
| audio_decoder.aac |
libomx_aacdec_sharedlibrary
|
OMX.PV.amrdec
| audio_decoder.amr
audio_decoder.amrnb
audio_decoder.amrwb
|
libomx_amrdec_sharedlibrary
|
OMX.PV.mp3dec
|
audio_decoder.mp3
|
libomx_mp3dec_sharedlibrary
|
OMX.PV.wmadec
| audio_decoder.wma |
libomx_wmadec_sharedlibrary
|
OMX.PV.radec
|
audio_decoder.ra
| libomx_radec_sharedlibrary |
|
|
|
OMX.PV.amrencnb
|
audio_encoder.amrnb
|
libomx_amrenc_sharedlibrary
|
OMX.PV.mpeg4enc
|
video_encoder.mpeg4
|
libomx_m4venc_sharedlibrary
|
OMX.PV.h263enc
| video_encoder.h263 |
libomx_m4venc_sharedlibrary
|
OMX.PV.avcenc
|
video_encoder.avc
|
libomx_avcenc_sharedlibrary
|
OMX.PV.aacenc
|
audio_encoder.aac
|
libomx_aacenc_sharedlibrary
|
附录:
资料来源: