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:当