OMX中 OMXNodeInstance 负责创建并维护不同的实例,这些实例是根据上面需求创建的,以node作为唯一标识。这样播放器中每个OMXCodec在OMX服务端都对应有了自己的OMXNodeInstance实例。OMXMaster 维护底层软硬件解码库,根据OMXNodeInstance中想要的解码器来创建解码实体组件。
1.android系统中只用openmax来做codec,所以android向上抽象了一层OMXCodec,提供给上层播放器用。播放器中音视频解码器mVideosource、mAudiosource都是OMXCodec的实例。
2.OMXCodec通过IOMX 依赖binder机制 获得 OMX服务,OMX服务 才是openmax 在android中的实现。
3. OMX把软编解码和硬件编解码统一看作插件的形式管理起来。
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 |
OMX中非常重要的2个成员就是 OMXMaster 和 OMXNodeInstance。OMX通过这俩个成员来创建和维护不同的openmax 解码器组件,
OMXNodeInstance 负责创建并维护不同的实例,这些实例是根据上面需求创建的,以node作为唯一标识。这样播放器中每个OMXCodec在OMX服务端都对应有了自己的OMXNodeInstance实例。
OMXMaster 维护底层软硬件解码库,根据OMXNodeInstance中想要的解码器来创建解码实体组件。