一、初始化部分:
功能的初始化入口:StreamingFeaturePipeline::init
initNodes中会检查各功能支持标志位,如果支持,则把对应Node添加到List中。
接下来通过两个模板类的,实现调用不同Node的onInit方法,VSDOF功能对应DepthNode,这里以后都是为VSDOF功能定制的初始化流程。
有几个重点函数:
-
initializeBufferPool:
依次调用所需的各个Node对应的initxxxBuffPool
完成每个Node 需要的BufferPool创建,并完成allocate动作。
每种数据缓冲池中buffer的数量就是在这里allocate时完成配置 -
buildImageBufferPoolMap:
构建bufferPoolMap,将第一步中创建的BufferPool与特定的key值绑定,存储到map中。方便后续根据使用场景取用 -
TEST_AND_CREATE_NODE:
检查各Node支持情况,如果支持,则创建对应类的实例。并将前面流程中定义的mpNodeSignal, mpDepthStorage, mpBufferPoolMgr传入各个node中,用于共享。
各Node的构造函数中,主要完成:根据需要的数据,添加对应数量的addWaitQueue。 -
buildPipeGraph:
连接各个节点的数据流,完成图的构建。如下所示:
-
mCamGraph.start:
为各个Node起单独的线程,并执行onThreadLoop里面的流程
二、各个Node onThreadLoop的部分流程走向:
Node间的联系都是基于buildPipeGraph中创建的数据流走向。
三、缓冲池(buffer pool)中每个buffer的轮转流程
以N3DMaskBufPool_Main1为例:
- 创建buffer pool:
CREATE_IMGBUF_POOL(mN3DMaskBufPool_Main1, "N3DMaskBufPool_Main1", rN3DSize.mWARP_MASK_SIZE,
eImgFmt_Y8, usage, MTRUE);
- 分配空间
ALLOCATE_BUFFER_POOL(mN3DMaskBufPool_Main1, VSDOF_WORKING_BUF_SET)