MBOOL SyncNodeImpl:: pushBuf(MUINT32 const data, IImageBuffer* const buf, MUINT32 const ext) { Mutex::Autolock lock(mLock); MY_LOGD("data(%d), buf(0x%x)", data, buf); MBOOL ret = MTRUE; PostBufInfo postBufData = {data, buf, ext}; switch (data) { case SYNC_SRC_0: mlPostBuf_0.push_back(postBufData); break; case SYNC_SRC_1: mlPostBuf_1.push_back(postBufData); break; default: MY_LOGE("Unsupported data(%d)", data); handleReturnBuffer(data, (MUINTPTR)buf); ret = MFALSE; break; } // if( isReadyToPostBuf() ) { muFrameCnt++; // PostBufInfo postBuf_0 = mlPostBuf_0.front(); PostBufInfo postBuf_1 = mlPostBuf_1.front(); mlPostBuf_0.pop_front(); mlPostBuf_1.pop_front(); // MY_LOGD("muFrameCnt(%d), buf(ID:%d/0x%x; ID:%d/0x%x)", muFrameCnt, postBuf_0.buf->getFD(), postBuf_0.buf, postBuf_1.buf->getFD(), postBuf_1.buf); handlePostBuffer(SYNC_DST_0, (MUINTPTR)postBuf_0.buf); handlePostBuffer(SYNC_DST_1, (MUINTPTR)postBuf_1.buf); } else { PostBufInfo retBufData; while( mlPostBuf_0.size() > 1 ) { retBufData = mlPostBuf_0.front(); mlPostBuf_0.pop_front(); handleReturnBuffer(retBufData.data, (MUINTPTR)retBufData.buf); } while( mlPostBuf_1.size() > 1 ) { retBufData = mlPostBuf_1.front(); mlPostBuf_1.pop_front(); handleReturnBuffer(retBufData.data, (MUINTPTR)retBufData.buf); } } // return ret; }
MBOOL ExtImgProcNodeImpl:: doExtImgProc(MUINT32 const data, IImageBuffer* const buf, MUINT32 const ext) { FUNC_START; if(mpExtImgProcHw != NULL) { if(mpExtImgProcHw->getImgMask() & ExtImgProcHw::BufType_ISP_P2_TwoRun_In) { IImageBuffer* tempBuffer = const_cast<IImageBuffer*>(buf); mpExtImgProcHw->doImgProc( ExtImgProcHw::BufType_ISP_P2_TwoRun_In, tempBuffer); } } // muDeqFrameCnt++; handlePostBuffer(EXTIMGPROC_DST_0, (MUINT32)buf); // FUNC_END; return MTRUE; }
//----------------------------------------------------------------------------- MBOOL CapBufNodeImp:: threadLoopUpdate() { FUNC_START; handleNotify( PASS1_SOF, 0, 0 ); // MUINT32 imgoAddr = 0; // if(isDataConnected(PASS1_FULLRAW)) { if(mpCapBufMgr != NULL) { IImageBuffer* pImageBuffer = NULL; if(mpCapBufMgr->dequeBuf(pImageBuffer)) { if(pImageBuffer != NULL) { imgoAddr = (MUINT32)pImageBuffer; // { Mutex::Autolock _l(mLock); mlpDequeFullBuf.push_back(pImageBuffer); } } else { MY_LOGE("Deque NULL buffer"); } } else { MY_LOGE("Deque fail"); } } else if(mpImageBuffer != NULL) { imgoAddr = (MUINT32)mpImageBuffer; // { Mutex::Autolock _l(mLock); mlpDequeFullBuf.push_back(mpImageBuffer); } } else { MY_LOGE("mpCapBufMgr is NULL"); } } else { MY_LOGE("Please connect PASS1_FULLRAW"); usleep(10*1000); } // if(imgoAddr) { MUINT32 magicNum; MBOOL isRrzo; MVOID* pPrivateData; MUINT32 privateDataSize; // mpIspSyncCtrl->queryImgBufInfo( (IImageBuffer*)imgoAddr, magicNum, isRrzo, pPrivateData, privateDataSize); // MY_LOGD("imgoAddr(0x%08X),MN(0x%08X)", imgoAddr, magicNum); // handleNotify(PASS1_EOF, -1, magicNum); handlePostBuffer(PASS1_FULLRAW, imgoAddr, 0); } else { MY_LOGE("imgoAddr is 0"); } FUNC_END; return MTRUE; }
MBOOL Pass2NodeImpl:: handleP2Done(QParams& rParams) { NG_TRACE_FMT_BEGIN("deqP2:%d", muDeqFrameCnt); MBOOL ret = MFALSE; Vector<Input>::const_iterator iterIn; Vector<Output>::const_iterator iterOut; vector<IImageBuffer*> vpDstBufAddr; // if(rParams.mDequeSuccess == MFALSE) { MY_LOGE("type %d pass2 cnt %d: deque fail", mPass2Type, muDeqFrameCnt); AEE_ASSERT("ISP pass2 deque fail"); } // MY_LOGD("type %d: cnt %d in %d out %d", mPass2Type, muDeqFrameCnt, rParams.mvIn.size(), rParams.mvOut.size()); // if( !mpIspSyncCtrlHw->unlockHw(IspSyncControlHw::HW_PASS2) ) { MY_LOGE("isp sync unlock pass2 failed"); goto lbExit; } // for( iterIn = rParams.mvIn.begin() ; iterIn != rParams.mvIn.end() ; iterIn++ ) { //MY_LOGD("In PortID(0x%08X)",portId); MUINT32 nodeDataType = mapToNodeDataType( iterIn->mPortID ); handleReturnBuffer( nodeDataType, (MUINT32)iterIn->mBuffer, 0 ); // } // vpDstBufAddr.clear(); for( iterOut = rParams.mvOut.begin() ; iterOut != rParams.mvOut.end() ; iterOut++ ) { MBOOL bFind = MFALSE; for(MUINT32 i=0; i<vpDstBufAddr.size(); i++) { if(vpDstBufAddr[i] == iterOut->mBuffer) { MY_LOGD("Buf(0x%08X) has been posted",(MUINT32)iterOut->mBuffer); bFind = MTRUE; break; } } if(!bFind) { //MY_LOGD("Out PortID(0x%08X)",portId); MUINT32 nodeDataType = mapToNodeDataType( iterOut->mPortID ); handlePostBuffer( nodeDataType, (MUINT32)iterOut->mBuffer, 0 ); vpDstBufAddr.push_back(iterOut->mBuffer); } } { Mutex::Autolock lock(mLock); muDeqFrameCnt += rParams.mvIn.size(); mCondDeque.broadcast(); } ret = MTRUE; lbExit: NG_TRACE_FMT_END(); return ret; }
MBOOL StereoNodeImpl:: handleP2Done(QParams& rParams) { CAM_TRACE_CALL(); CAM_TRACE_FMT_BEGIN("deqP2:%d", muDeqFrameCnt); MBOOL ret = MFALSE; MBOOL isZoom = (rParams.mvCropRsInfo[0].mCropRect.p_integral.x != 0) ? MTRUE : MFALSE; Vector<Input>::const_iterator iterIn; Vector<Output>::const_iterator iterOut; Vector<ModuleInfo>::const_iterator iterMInfo; // MY_LOGD("cnt %d in(%d) out(%d) moduleData(%d) isZoom(%d)", muDeqFrameCnt, rParams.mvIn.size(), rParams.mvOut.size(), rParams.mvModuleData.size(), isZoom); // if( !mpIspSyncCtrlHw->unlockHw(IspSyncControlHw::HW_PASS2) ) { MY_LOGE("isp sync unlock pass2 failed"); goto lbExit; } // for( iterIn = rParams.mvIn.begin(); iterIn != rParams.mvIn.end(); iterIn++ ) { PortID portId = iterIn->mPortID; portId.group = 0; MUINT32 nodeDataType = mapToNodeDataType( portId ); MY_LOGD("In PortID(0x%08X), nodeData(%d)",portId, nodeDataType); handleReturnBuffer( nodeDataType, (MUINTPTR)iterIn->mBuffer); } // for( iterOut = rParams.mvOut.begin(); iterOut != rParams.mvOut.end(); iterOut++ ) { PortID portId = iterOut->mPortID; portId.group = 0; MUINT32 nodeDataType = mapToNodeDataType( portId ); MY_LOGD("Out PortID(0x%08X), nodeData(%d), bufInfo(0x%x), va/pa(0x%x/0x%x), ID(%d)", portId, nodeDataType, iterOut->mBuffer, iterOut->mBuffer->getBufVA(0), iterOut->mBuffer->getBufPA(0), iterOut->mBuffer->getFD()); handlePostBuffer( nodeDataType, (MUINTPTR)iterOut->mBuffer, (MUINT32)isZoom ); } for( iterMInfo = rParams.mvModuleData.begin(); iterMInfo != rParams.mvModuleData.end(); iterMInfo++ ) { if ( iterMInfo->moduleTag == EFeatureModule_STA_FEO ) { StaData* pModuleData = reinterpret_cast<StaData*>(iterMInfo->moduleStruct); PortID portId = PortID((EPortType)pModuleData->port_type, pModuleData->port_idx, pModuleData->port_inout); portId.group = 0; MUINT32 nodeDataType = mapToNodeDataType( portId ); MY_LOGD("ModuleInfo PortID(0x%08X), nodeData(%d), bufInfo(0x%x), va/pa(0x%x/0x%x), ID(%d)", portId, nodeDataType, &(pModuleData->bufInfo), pModuleData->bufInfo.virtAddr, pModuleData->bufInfo.phyAddr, pModuleData->bufInfo.memID); handlePostBuffer( nodeDataType, (MUINTPTR)&pModuleData->bufInfo, (MUINT32)isZoom ); } } // { Mutex::Autolock lock(mLock); muDeqFrameCnt++; mCondDeque.broadcast(); } // ret = MTRUE; lbExit: CAM_TRACE_FMT_END(); return ret; }