OMXCodec是一个codec框架,实现者可以在这个框架中实现各种解码方式,包括硬件解码。OMXMaster 负责OMX中编解码器插件管理,软件解码和硬件解码都是使用OMX标准,挂载plugins的方式来进行管理。软解通过 addPlugin(new SoftOMXPlugin);会把这些编解码器的名字都放在mPluginByComponentName中。硬件编解码是通过 addVendorPlugin();加载libstagefrighthw.so.各个芯片平台可以遵循openmax 标准,生成libstagefrighthw.so的库来提供android应用。
OMXMaster::OMXMaster()
:mVendorLibHandle(NULL) {
addVendorPlugin();
addPlugin(newSoftOMXPlugin);
}
在allocateNode的时候,SoftOMXPlugin调用makeComponentInstance,遍历所有的libstagefright_soft_*.so库,创建软件component,并将component和plugin一起存入mPluginByInstance。
OMX解码的方式很像流水线,由两个线程(工人)负责操作,一个decoder/encoder线程,一个dispatcher线程。对buffer的操作如下:OMXCodec使用draininputbuffer试图解码,调用IOMX的emptyBuffer,然后调到OMX的emptyBuffer,然后OMX找到node,调用OMX_EmptyThisBuffer,然后发消息KwhatEmptyThisBuffer给SoftComponent,此时进入编解码线程。component收到该命令后会读取inputport buffer

OMXCodec是Android多媒体框架中的codec管理器,它支持硬件和软件解码。通过OMXMaster加载libstagefrighthw.so实现硬件解码。解码过程涉及两个线程,一个用于解码,另一个用于调度。OMXCodec使用空缓冲区和填充缓冲区进行数据交换,组件通过EmptyBufferDone和FillBufferDone通知解码状态。在软解码时,数据在OMXCodec与组件之间传递,而在硬件解码时,数据直接通过硬件接口处理。
最低0.47元/天 解锁文章
1009

被折叠的 条评论
为什么被折叠?



