1.MediaCodec初始化流程分析
通过上面流程分析可知,MediaCodecList初始化是通过调用它的getLocalInstance函数,然后在里面new的MediaCodecList对象。在MediaCodec的CreateByType函数中new了MediaCodec对象。
allocateNode调用流程是在ACodec.cpp中的onAllocateComponent中,然后调用到IOMX.cpp中的allocateNode,再调用到WOmx.cpp的allocateNode中,再调用到Omx.cpp(IOmx.hal)中的allocateNode:
所以ACodec中的omxNode是LWOmxNode,其中的mBase是Omx.cpp,LWOmxNode中的mBase是TWOmxNode,TWOmxNode中的mBase是OMXNodeInstance。
2. makeComponentInstance流程分析
在OMX得allocateNode中调用了makeComponentInstance函数,
<1>. 获取了&handle,这个handle就是调用MtkOmxBase.h中得GetComponentHandle得到的:
mCompHandle的初始化,最后framework层调用handle的函数都在这里面对应:
<2>. 回调函数分析:
OMX_ERRORTYPE err = mMaster->makeComponentInstance(
name.c_str(), &OMXNodeInstance::kCallbacks,
instance.get(), &handle);
主要是三个回调:
OMX_ERRORTYPE (*EventHandler)(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_IN OMX_PTR pAppData,
OMX_IN OMX_EVENTTYPE eEvent,
OMX_IN OMX_U32 nData1,
OMX_IN OMX_U32 nData2,
OMX_IN OMX_PTR pEventData);
OMX_ERRORTYPE (*EmptyBufferDone)(
OMX_IN OMX_HANDL