OpenMAX (OMX)框架

志不强者智不达,言不信者行不果。这篇文章主要讲述OpenMAX (OMX)框架相关的知识,希望能为你提供帮助。
【OpenMAX (OMX)框架】本文分为两个部分进行讲解
Codec 部分中的 AwesomePlayer 到 OMX 服务
前面介绍了NuPlayer最终解码都会到达OMX框架,也就是 OpenMAX框架,本文开始分析编解码部分中的AwesomePlayer到OMX服务过程,也就是开启OpenMAX准备相关内容。android系统中用OpenMAX来做编解码,Android向上抽象了一 层OMXCodec,提供给上层播放器AwesomePlayer使用。同时有一个IOMX接口,在ACodec 中可以通过IOMX调用OpenMAX组件。播放器中音视频解码器mVideoSource、 mAudiosource 都是 OMXCodec 的实例。
OMXCodec::Create是解码器初始化的入口。OMXCodec通过IOMX依赖Binder机制获得 OMX服务,OMX服务才是OpenMAX在Android中的实现。
OpenMAX与StageFright框架层级的关系
StageFright框架通过OpenMAX与硬件层进行通信,图1是OpenMAX和StageFright的 层级关系图。
在图1中可以看到,StrageFright层共有两路到达OpenMAX框架° 一路是通过NuPlayer 到达ACodec类,然后直接调用OMX IL Core中的接口。另一路是通过StagefrightPlayer到 AwesomePlayer,再到达0MXCodec类,然后调用OMX组件接口进行数据传输。
在以前的AwesomePlayer中,音频和视频数据会到OMXCodec中寻找对应的解码器进行 解码,如图2所示:IOMX和OMX组件通过Binder通信,中间还涉及OMXClient。
OMX 中的OMXNodelnstance负责创建并维护不同的实例,这些实例是根据上面的需求创建的,以 Node作为唯…标识。这样播放器中的每一个OMXCodec在OMX服务器端都有了自己对应的 OMXNodelnstance实例。
OMXMaster维护底层软硬件解码库,根据OMXNodelnstance中想要 的解码器来创建解码实体组件。

OpenMAX和StageFright的层级关系图

AwesomePlayer 与 OMX 的关系



    推荐阅读