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中想要的解碼器來創建解碼實體組件。

