MBOOL CamIOPipe:: dequeHWBuf(MUINT32 const u4TimeoutMs /*= 0xFFFFFFFF*/) { FUNCTION_LOG_START; MY_LOGD("+ tid(%d) timeout)=(%d)", gettid(), u4TimeoutMs); // NSImageio::NSIspio::QTimeStampBufInfo rQTimeOutBufInfo; NSImageio::NSIspio::PortID rPortID(NSImageio::NSIspio::EPortType_Memory, NSImageio::NSIspio::EPortIndex_IMGO, 1); //Jackie, wait deque directly // (1). wait interrupt done //mpCamIOPipe->irq(NSImageio::NSIspio::EPipePass_PASS1_TG1,NSImageio::NSIspio::EPIPEIRQ_PATH_DONE); // (2.1). dequeue buffer , Raw mpCamIOPipe->dequeOutBuf(rPortID, rQTimeOutBufInfo); // (2.2). put buffer Raw in queue mrRawQTBufInfo.u4User = rQTimeOutBufInfo.u4User; mrRawQTBufInfo.u4Reserved = rQTimeOutBufInfo.u4Reserved; mrRawQTBufInfo.i4TimeStamp_sec = rQTimeOutBufInfo.i4TimeStamp_sec; mrRawQTBufInfo.i4TimeStamp_us = rQTimeOutBufInfo.i4TimeStamp_us; for (MUINT32 i = 0; i < rQTimeOutBufInfo.vBufInfo.size(); i++) { BufInfo rBufInfo; mapBufInfo(rBufInfo, rQTimeOutBufInfo.vBufInfo.at(i)); mrRawQTBufInfo.vBufInfo.push_back(rBufInfo); } if (mfgIsYUVPortON) { // (3.1). dequeue buffer , Raw rPortID.index = NSImageio::NSIspio::EPortIndex_IMG2O; mpCamIOPipe->dequeOutBuf(rPortID, rQTimeOutBufInfo); // (3.2). put buffer yuv in queue mrYuvQTBufInfo.u4User = rQTimeOutBufInfo.u4User; mrYuvQTBufInfo.u4Reserved = rQTimeOutBufInfo.u4Reserved; mrYuvQTBufInfo.i4TimeStamp_sec = rQTimeOutBufInfo.i4TimeStamp_sec; mrYuvQTBufInfo.i4TimeStamp_us = rQTimeOutBufInfo.i4TimeStamp_us; for (MUINT32 i = 0; i < rQTimeOutBufInfo.vBufInfo.size(); i++) { BufInfo rBufInfo; mapBufInfo(rBufInfo, rQTimeOutBufInfo.vBufInfo.at(i)); mrYuvQTBufInfo.vBufInfo.push_back(rBufInfo); } } FUNCTION_LOG_END; return MTRUE; }
MBOOL CdpPipe:: dequeBuf(PortID const ePortID, QTimeStampBufInfo& rQBufInfo, MUINT32 const u4TimeoutMs /*= 0xFFFFFFFF*/) { FUNCTION_LOG_START; MY_LOGD("+ tid(%d) PortID:(type, index, inout, timeout)=(%d, %d, %d, %d)", gettid(), ePortID.type, ePortID.index, ePortID.inout, u4TimeoutMs); MBOOL ret = MTRUE; // NSImageio::NSIspio::QTimeStampBufInfo rQTimeOutBufInfo; NSImageio::NSIspio::PortID rPortID(NSImageio::NSIspio::EPortType_Memory, NSImageio::NSIspio::EPortIndex_IMGI, 0); // dequeue buffer if (EPortType_MemoryOut == ePortID.type) { rPortID.inout = 1; if (0 == ePortID.index && (mu4OutPortEnableFlag & 0x1)) //disp port { rPortID.type = NSImageio::NSIspio::EPortType_DISP_RDMA; rPortID.index = NSImageio::NSIspio::EPortIndex_DISPO; } else if(1 == ePortID.index && (mu4OutPortEnableFlag & 0x2)) //vdo port { rPortID.type = NSImageio::NSIspio::EPortType_VID_RDMA; rPortID.index = NSImageio::NSIspio::EPortIndex_VIDO; } else { MY_LOGE("The deque out port is not config"); return MFALSE; } } // if (EPortType_MemoryOut == ePortID.type) { ret = mpCdpPipe->dequeOutBuf(rPortID, rQTimeOutBufInfo); } else { ret = mpCdpPipe->dequeInBuf(rPortID, rQTimeOutBufInfo); } // (2.2). put buffer in queue rQBufInfo.u4User = rQTimeOutBufInfo.u4User; rQBufInfo.u4Reserved = rQTimeOutBufInfo.u4Reserved; rQBufInfo.i4TimeStamp_sec = rQTimeOutBufInfo.i4TimeStamp_sec; rQBufInfo.i4TimeStamp_us = rQTimeOutBufInfo.i4TimeStamp_us; for (MUINT32 i = 0; i < rQTimeOutBufInfo.vBufInfo.size(); i++) { BufInfo rBufInfo; mapBufInfo(rBufInfo, rQTimeOutBufInfo.vBufInfo.at(i)); rQBufInfo.vBufInfo.push_back(rBufInfo); } FUNCTION_LOG_END; return ret; }