1,初始化的时候,
-----> allocateOutputBuffersFromNativeWindow
-----> status_t OMXNodeInstance::useGraphicBuffer
-----> virtual status_t useGraphicBuffer
-----> status_t OMXNodeInstance::useGraphicBuffer2_l
-----> OMX_UseBuffer
-----> SEC_OMX_UseBuffer //temp_bufferHeader->pBuffer = pBuffer;
//这里就是把graphicBuffer->handle复制给了bufferHeader->pBuffer,也就是data_ptr,也就是存贮一些地址值的内存,也就是graphicBuffer->handle中最终存储了解码完毕数据存放地址信息,最后传给显示
说到底,就是MediaBuffer中指向了有效的data_ptr, MediaBuffer指向了GraphicBuffer,graphicBuffer->handle实际上就是data_ptr
所以一开始传的是MediaBuffer,最后又传的GraphicBuffer, 但是都能使用到data_ptr
2,解码过程运转起来之后
-----> SEC_OutputBufferGetQueue里面,把pSECComponent->processData[OUTPUT_PORT_INDEX].dataBuffer = dataBuffer->bufferHeader->pBuffer;
-----> SEC_MFC_H264_Decode_Nonblock里面
-----> SsbSipMfcDecGetOutBuf 获取到解码完的数据物理地址填充到dataBuffer,也就是填充到了dataBuffer->bufferHeader->pBuffer,然后一步步往上送
-----> sec_mfc_bufferProcess
-----> SEC_Postprocess_OutputData
-----> SEC_OutputBufferReturn
-----> FillBufferDone
-----> OMX_ERRORTYPE OMXNodeInstance::OnFillBufferDone
-----> OMX_ERRORTYPE OMX::OnFillBufferDone( node_id node, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer)
{
ALOGV("OnFillBufferDone buffer=%p", pBuffer);
omx_message msg;
msg.type = omx_message::FILL_BUFFER_DONE;
msg.node = node;
msg.u.extended_buffer_data.buffer = pBuffer;
msg.u.extended_buffer_data.range_offset = pB