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; }
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:: allocBuffers(vector<HwPortConfig_t> & lPortCfg) { FUNC_START; MBOOL ret = MFALSE; // vector< HwPortConfig_t >::const_iterator pConfig = lPortCfg.begin(); IMemDrv* pIMemDrv = IMemDrv::createInstance(); if ( !pIMemDrv || !pIMemDrv->init() ) { MY_LOGE("pIMemDrv->init() error"); goto lbExit; } for(MUINT32 i = 0; i < BUF_COUNT; ++i) { IMEM_BUF_INFO bufInfo; bufInfo.size = getHWFESize().size(); if(pIMemDrv->allocVirtBuf(&bufInfo) < 0) { MY_LOGE("pIMemDrv->allocVirtBuf() error, i(%d)",i); goto lbExit; } if(pIMemDrv->mapPhyAddr(&bufInfo) < 0) { MY_LOGE("pIMemDrv->mapPhyAddr() error, i(%d)",i); goto lbExit; } mlFeBufQueue.push_back(bufInfo); } // while( pConfig != lPortCfg.end() ) { MUINT32 nodedatatype = mapToNodeDataType(pConfig->mPortID); ICamBufHandler* pBufHdl = getBufferHandler(nodedatatype); MY_LOGD("handle(%p) data(%d) S(%dx%d)F(0x%x)", pBufHdl, nodedatatype, pConfig->mSize.w, pConfig->mSize.h, pConfig->mFmt); if( !pBufHdl ) { MY_LOGE("no buffer hdl for data(%d)", nodedatatype); goto lbExit; } //alloc buffer AllocInfo allocinfo(pConfig->mSize.w, pConfig->mSize.h, pConfig->mFmt, eBUFFER_USAGE_SW_MASK | eBUFFER_USAGE_HW_MASK); if( nodedatatype == STEREO_IMG ) { if ( !mDebugDumpGB ) allocinfo.usage = eBUFFER_USAGE_HW_RENDER|eBUFFER_USAGE_HW_TEXTURE|eBUFFER_USAGE_SW_WRITE_RARELY; else allocinfo.usage = eBUFFER_USAGE_HW_RENDER|eBUFFER_USAGE_HW_TEXTURE|eBUFFER_USAGE_SW_WRITE_RARELY|eBUFFER_USAGE_SW_READ_RARELY; allocinfo.isGralloc = MTRUE; } for(MUINT32 i = 0; i < BUF_COUNT ; i++ ) { if( !pBufHdl->requestBuffer(nodedatatype, allocinfo) ) { MY_LOGE("request buffer failed: data %d", nodedatatype); goto lbExit; } } // pConfig++; } // ret = MTRUE; lbExit: if ( !pIMemDrv ) { pIMemDrv->uninit(); pIMemDrv->destroyInstance(); } if( !ret ) { MY_LOGE("allocBuffers failed"); } FUNC_END; return ret; }