Android多媒体:OMX

OMXCodec是Android多媒体框架中的codec管理器,它支持硬件和软件解码。通过OMXMaster加载libstagefrighthw.so实现硬件解码。解码过程涉及两个线程,一个用于解码,另一个用于调度。OMXCodec使用空缓冲区和填充缓冲区进行数据交换,组件通过EmptyBufferDone和FillBufferDone通知解码状态。在软解码时,数据在OMXCodec与组件之间传递,而在硬件解码时,数据直接通过硬件接口处理。
摘要由CSDN通过智能技术生成


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,然后发消息Kwh

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值