ACodec如何创建input/output口buffer-allocateBuffersOnPort(OMX_U32 portIndex)

首先通过omx component获取对应codec的buffersize/buffernum

mOMX->allocateBuffer //ACodec创建的是普通的buffer,用于secure playback input/output&usingMetadataOnEncoderOutput

mOMX->allocateBufferWithBackup //ACodec创建的是shared memory, mQuicks & requiresAllocateBufferBit

mOMX->userBuffer


output口如果mNativeWindow不为空:

1.mNativeWindow->dequeueBuffer() //通过SurfaceFlinger拿buffer,如果是播放在osd层,则拿到的是真实的gpu buffer, 如果是播放在hw层,则拿到的是虚拟地址,需要mmap到hw上

2.mOMX->useGraphicBuffer() //将拿到的buffer信息送给omx component


enum PortMode {

    KEEP_BUFFERS,

    RESUBMIT_BUFFERS,

    FREE_BUFFERS,

}

Android ACodec会根据当前处于哪个state来决定buffer如何处理。

KEEP_BUFFERS:当ACodec处于BaseState或者收到OnInputBufferFilled消息但是buffer里面没有填有效数据的时候,ACodec握有的buffer不会送到OMX Component.

RESUBMIT_BUFFERS:当ACodec处于ExecutingState或者处于OutputPortSettingChangedState但是当前是input口buffer时,ACodec将握有的buffer送给OMX Component

FREE_BUFFERS:当ACodec处于OutputPortSettingChangedState并且当前是output口buffer时,ACodec将握有的buffer free


ACodec只有BaseState/ExecutingState/OutputPortSettingChangedState重写了getPortMode,所以PortMode变化只会出现在上述描述的情形。

更多相关文章

  1. Android Handler机制 - MessageQueue如何处理消息
  2. 深入理解Android消息处理系统 Handler
  3. Android应用程序键盘(Keyboard)消息处理机制分析(19)
  4. Android之异步消息处理机制详解

随机推荐

  1. 如何解决:Android中 Error generating fin
  2. Android DVM
  3. Android的NDK开发
  4. Android(安卓)动画整理(3.0以上)
  5. 丢失Android系统库或者Conversion to Dal
  6. WebView---Android与js交互实例
  7. Android4.2增加新键值
  8. android与js的交互
  9. android静默安装的实现(turn)
  10. Android培训班(38)