前面一篇文章中我们看到media.codec service创建OMX组件后会把组件传递给一个OMXNodeInstance对象,并且把OMXNodeInstance对象返回到Framework层,Framework通过调用OMXNodeInstance的API来操作OMX组件。从这一篇开始,我们一起学习OMXNodeInstance,在这里我要强调一下,接下来的几篇内容非常重要,是我们理解OMX组件实现和ACodec的基石!!!
1、为什么要OMXNodeInstance
为了更轻松地管理OMX组件(查询、创建、销毁),Android从OMX Core开始抽象出OMX Store、OMX Service两层,将低级别的OMX Core接口封装起来,提供了更高层次的 API。
同样,为了更简单地操作使用OMX组件,Android为我们抽象了一层OMX IL Client
,也就是我们即将要学习的OMXNodeInstance,OMX IL Client这层有如下几个作用:
- 封装:将底层OMX组件的细节进行了封装,提供了更高层次的API,利用这些API可以完成对OMX组件的所有操作,包括查询组件信息、操控组件状态、发送/接收数据等,让使用者不需要直接接触OMX组件的复杂性,而是可以便捷地与之进行交互;
- 错误处理:提供更健壮的错误处理机制;
- 控制和管理:它可以用于跟踪组件的状态和其他信息,对资源的申请和释放进行管理;