main_log:01-01 00:24:41.417407 645 4739 D DepthMapPipe/P2A_FMNode: [onThreadLoop][VSDOF_Profile] 300: threadLoop start, reqID=409 eState=1
main_log:01-01 00:24:41.417474 645 4739 D DepthMapPipe/P2A_FMNode: [applyISPTuning]225: +, reqID=409 bIsMain1Path=1
main_log:01-01 00:24:41.419572 645 4739 D DepthMapPipe/P2A_FMNode: [applyISPTuning]263: -, reqID=409
main_log:01-01 00:24:41.419723 645 4739 D DepthMapPipe/P2A_FMNode: [applyISPTuning]225: +, reqID=409 bIsMain1Path=0
main_log:01-01 00:24:41.421904 645 4739 D DepthMapPipe/P2A_FMNode: [applyISPTuning]263: -, reqID=409
main_log:01-01 00:24:41.425171 645 4727 D DepthMapPipe/P2A_FMNode: [onHandleFlowTypeP2Done]435: reqID=408 use queued depth info!
//>>>>>>>>> enque start <<<<<<<<<<
main_log:01-01 00:24:41.426554 645 4739 D DepthMapPipe/P2A_FMNode: [onThreadLoop]331: mpINormalStream enque START!!!! reqID=409
main_log:01-01 00:24:41.427568 645 4727 D DepthMapPipe/P2A_FMNode: [handleP2Done]413: - :reqID=408
main_log:01-01 00:24:41.428005 645 4739 D DepthMapPipe/P2A_FMNode: [onThreadLoop][VSDOF_Profile] 337: mpINormalStream enque END ! reqID=409, exec-time(enque)=1 msec
//>>>>>>>>> enque start <<<<<<<<<<
//after enque done ,callback will be called,we will stop P2afm timer in handleP2Done()
main_log:01-01 00:24:41.438524 645 4727 D DepthMapPipe/P2A_FMNode: [handleP2Done][VSDOF_Profile] 392: + :reqID=409 , p2 exec-time=11 ms// pRequest->mTimer.stopP2AFM();
P2AFMNode::onThreadLoop()
{
// deque a request from the request queue --flm
// mark on-going-request start
// threadLoop start, reqID=
// enque QParams
// enque cookie instance
// apply 3A Isp tuning
perform3AIspTuning()
{
rOutTuningRes.tuningRes_main1 = applyISPTuning(rpRequest, eP2APATH_MAIN1);
rOutTuningRes.tuningRes_main2 = applyISPTuning(rpRequest, eP2APATH_MAIN2);
}
// call flow option to build QParams
// after build enqueParams,print them --flm
// set callbacks for the enqueParams ,this callback will be called after enque done--flm
enqueParams.mpfnCallback = onP2Callback;
// start P2A timer
// enque start
mpINormalStream->enque(enqueParams);
// stop P2A Enque timer
// enque end! print the time used //reqID=409, exec-time(enque)=1 msec
// when this function is ended ,callback onP2Callback() will be called
}
P2AFMNode::onP2Callback()
{
MBOOL P2AFMNode::handleP2Done()
{
// stop timer if node's status is not in flush
pRequest->mTimer.stopP2AFM();
//reqID=409 , p2 exec-time=11 ms
// enque request into P2ABayer Node
handleData(BAYER_ENQUE, pRequest);
// dump buffer first//onData(DataID id, Type3& buffer),so we finally will call onData to dump the data to the buffer
//config a filename,the filename is ended with .raw
config = DumpConfig(NULL, ".raw", MTRUE);
//perform dump operation. dump a raw file
this->handleDump(TO_DUMP_RAWS, pRequest, &config);
//config a config,not a file
config = DumpConfig(NULL, NULL, MFALSE);
//perform dump operation. dump data to a buffer
this->handleDump(TO_DUMP_BUFFERS, pRequest, &config);
// handle flow type task
onHandleFlowTypeP2Done(pRequest);
// launch flow option p2 done
mpFlowOption->onP2ProcessDone(this, pRequest)
{
DepthMapFlowOption_VSDOF::onP2ProcessDone()
{
// mark buffer ready and handle data (FD, MV_F , MV_F_CAP)
if(pRequest->setOutputBufferReady(BID_P2A_OUT_FDIMG))
pNode->handleDataAndDump(P2A_OUT_FD, pRequest);
// MV_F
if(pRequest->setOutputBufferReady(BID_P2A_OUT_MV_F))
pNode->handleDataAndDump(P2A_OUT_MV_F, pRequest);
// MV_F_CAP
if(pRequest->setOutputBufferReady(BID_P2A_OUT_MV_F_CAP))
pNode->handleDataAndDump(P2A_OUT_MV_F_CAP, pRequest);
// skip depth(return) if skip depth is true
{pNode->handleData(QUEUED_FLOW_DONE, pRequest);return MTRUE;}
/*-------------------------------------------first we have a seen of the configOutBuffer()------------------------------------------------------------------------------------*/
NodeBufferHandler::configOutBuffer( DepthMapPipeNodeID srcNodeID, DepthMapBufferID bufferID, DepthMapPipeNodeID outNodeID )
{
configInOutBuffer(srcNodeID, bufferID, outNodeID, bufferID)
{
mpBufferPoolMgr->queryBufferType(srcBufferID, mReqAttr.bufferScenario, bufferType);
if(bufferType == eBUFFER_IMAGE)
{
// read the buffer out
SmartImageBuffer smBuf;
BIDToSmartBufferMap queuedBufferMap;
queuedBufferMap = mEnqueBufferMap.valueFor(srcNodeID);
bufIndex = queuedBufferMap.indexOfKey(srcBufferID);
smBuf = queuedBufferMap.valueAt(bufIndex);
this->addOutputBuffer(outNodeID, outBufferID, smBuf)
{
//bind bufferID with buffer
bidTuningBufMap.add(bufferID, smTuningBuf);
}
return true;
}else if(bufferType == eBUFFER_GRAPHIC)
{
// siminar with the up
SmartGraphicBuffer smBuf;
BIDToGraphicBufferMap queuedBufferMap;
// ................
queuedBufferMap = mEnqueGraphicBufferMap.valueFor(srcNodeID);
// ................
}else if(bufferType == eBUFFER_TUNING)
{
// siminar with the up
SmartTuningBuffer smBuf;
BIDToTuningBufferMap queuedBufferMap;
// ................
queuedBufferMap = mEnqueTuningBufferMap.valueFor(srcNodeID);
// ................
}
}
}
/*-------------------------------------------------------------------------------------------------------------------------------*/
// config output buffers for N3D input
// FEO
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_FE1BO, eDPETHMAP_PIPE_NODEID_N3D);
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_FE2BO, eDPETHMAP_PIPE_NODEID_N3D);
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_FE1CO, eDPETHMAP_PIPE_NODEID_N3D);
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_FE2CO, eDPETHMAP_PIPE_NODEID_N3D);
// FMO
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_FMBO_LR, eDPETHMAP_PIPE_NODEID_N3D);
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_FMBO_RL, eDPETHMAP_PIPE_NODEID_N3D);
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_FMCO_LR, eDPETHMAP_PIPE_NODEID_N3D);
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_FMCO_RL, eDPETHMAP_PIPE_NODEID_N3D);
// CC_in/Rect_in
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_CC_IN1, eDPETHMAP_PIPE_NODEID_N3D);
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_CC_IN2, eDPETHMAP_PIPE_NODEID_N3D);
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_RECT_IN1, eDPETHMAP_PIPE_NODEID_N3D);
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_RECT_IN2, eDPETHMAP_PIPE_NODEID_N3D);
// P2A pass to N3D
pNode->handleDataAndDump(P2A_TO_N3D_FEFM_CCin, pRequest);
// P2A output to OCC
pNode->handleDataAndDump(P2A_TO_OCC_MY_S, pRequest);
//perform handleData and dumpping buffer
handleDataAndDump(DataID id, DepthMapRequestPtr &request)
{
// dump first and then handle data
this->onDump(id, request)
{
DepthMapPipeNode::onDump(DataID id,DepthMapRequestPtr &request,const char* fileName=NULL,const char* postfix=NULL)
{
if(pRequest->getRequestAttr().opState == eSTATE_NORMAL)
snprintf(filepath, 1024, "/sdcard/vsdof/pv_vr/%s/%d/%s", dir, iReqIdx, getName());
else
snprintf(filepath, 1024, "/sdcard/vsdof/capture/%s/%d/%s", dir, iReqIdx, getName());
for(size_t i=0;i<vDumpBufferID.size();++i)
{
// get a IImageBuffer frame
pBufferHandler->getEnqueBuffer(this->getNodeId(), BID, pImgBuf);
// config a filename with a absolutely route writepath/filename.postfix
// for example: /sdcard/vsdof/pv_vr/Rear/1/P2AFM/BID_P2A_OUT_MY_S_240x136.yuv
// saveToFile:
pImgBuf->saveToFile(writepath);
}
}
}
DepthMapPipeNode::handleData(id, request)
{
// handle data for DepthMapNode
//use a template to call DepthMapDataHandler::handleData(),but not found
CamThreadNode<DepthMapDataHandler>::handleData(id, pReq)
{
}
}
}
// if op state is capture
{
pRequest->setOutputBufferReady(BID_P2A_OUT_POSTVIEW);
// notify YUV done
pNode->handleDataAndDump(P2A_OUT_YUV_DONE, pRequest);
// pass to FD node
pBufferHandler->configOutBuffer(eDPETHMAP_PIPE_NODEID_P2AFM, BID_P2A_OUT_FDIMG, eDPETHMAP_PIPE_NODEID_FD);
pNode->handleDataAndDump(P2A_TO_FD_IMG, pRequest);
}
}
}
}