OMXCodec read InputBuffer,消耗InputBuffer,拿到OutPutBuffer的过程如下:
(1) OMXCodec使用OMX_EmptyThisBuffer传递未解码的buffer给component,
component收到该命令后会读取input port buffer中的数据,将其组装成帧进行解码;
(2) decoder component 读取buffer中的数据完成后会调用EmptyBufferDone 通知OMXCodec,
已完成inputport buffer的读取;
(3) OMXCodec收到该命令后会通过mVideoTrack读取新的视频buffer到input port的buffer中,
并调用
OMX_EmptyThisBuffer
通知component;
(4) OMXCodec使用OMX_FillThisBuffer传递空的buffer给component用于存储解码后的帧,
component收到该命令后将解码好的帧数据复制到该buffer上;
(5) 然后调用FillBufferDone通知OMXCodec,
已完成
outputport buffer
的填充;
(6) OMXCodec收到该命令后将
解码好的帧传递给mISurface进行图像绘制
,
绘制完毕后使用
OMX_FillThisBuffer
通知component有空的buffer可填充。