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中想要的解码器来创建解码实体组件。