研究了一下exynos平台上的openmax component组件,绕来绕去的很绕。
这里总结一下。
先上个总体图:
索性,这里重点只贴Exynos平台自己的东西,把重点放在数据流向,以及大体的函数调用关系上。其他的只一笔带过。突出重点。
整个exynos 的OMX解码流程非常绕。这里记录几个关键点。
输入端分析:
1,OMXCodec 响应EMPTY_BUFFER_DONE, drainInputBuffer 里面通过buffer id得到这个使用完毕的OMX_BUFFERHEADERTYPE,把上游VideoTrack传来的数据挂上,
然后把OMX_BUFFERHEADERTYPE挂到message->pCmdData ,把message挂到 input port queue,然后启动信号量
2,数据送到decoder之后, OMX_BUFFERHEADERTYPE就可以释放回队列了。
3,可以看出,实际上有两条队列,一条是OMX_core用的OMX_BUFFERHEADERTYP
这里总结一下。
先上个总体图:
索性,这里重点只贴Exynos平台自己的东西,把重点放在数据流向,以及大体的函数调用关系上。其他的只一笔带过。突出重点。
整个exynos 的OMX解码流程非常绕。这里记录几个关键点。
输入端分析:
1,OMXCodec 响应EMPTY_BUFFER_DONE, drainInputBuffer 里面通过buffer id得到这个使用完毕的OMX_BUFFERHEADERTYPE,把上游VideoTrack传来的数据挂上,
然后把OMX_BUFFERHEADERTYPE挂到message->pCmdData ,把message挂到 input port queue,然后启动信号量
2,数据送到decoder之后, OMX_BUFFERHEADERTYPE就可以释放回队列了。
3,可以看出,实际上有两条队列,一条是OMX_core用的OMX_BUFFERHEADERTYP