int main_testPostProc(IMEM_BUF_INFO rInMem, int width, int height, int format) { MY_LOGD("+"); MUINT32 u4DispW = 1280; MUINT32 u4DispH = 960; // (1). Create Instance IPostProcPipe *pPostProcPipe = IPostProcPipe::createInstance(eSWScenarioID_CAPTURE_NORMAL, eScenarioFmt_RAW); if (pPostProcPipe != NULL) { MY_LOGD("Pipe (Name, ID, IDName) = (%s, %d)", pPostProcPipe->getPipeName(), pPostProcPipe->getPipeId()); } // (2). Query port property vector<PortProperty> rInPortProperty; vector<PortProperty> rOutPortProperty; if (pPostProcPipe->queryPipeProperty(rInPortProperty,rOutPortProperty)) { MY_LOGD("Port Property (IN, OUT): (%d, %d)", rInPortProperty.size(), rOutPortProperty.size()); for (MUINT32 i = 0; i < rInPortProperty.size(); i++) { MY_LOGD("IN: (type,index,inout) = (%d, %d, %d)", rInPortProperty.at(i).type, rInPortProperty.at(i).index, rInPortProperty.at(i).inout); MY_LOGD("IN: (fmt, rot, flip) = (%d, %d, %d)", rInPortProperty.at(i).u4SupportFmt, rInPortProperty.at(i).fgIsSupportRotate, rInPortProperty.at(i).fgIsSupportFlip); } for (MUINT32 i = 0; i < rOutPortProperty.size(); i++) { MY_LOGD("OUT: (type,index,inout) = (%d, %d, %d)", rOutPortProperty.at(i).type, rOutPortProperty.at(i).index, rOutPortProperty.at(i).inout); MY_LOGD("OUT: (fmt, rot, flip) = (%d, %d, %d)", rOutPortProperty.at(i).u4SupportFmt, rOutPortProperty.at(i).fgIsSupportRotate, rOutPortProperty.at(i).fgIsSupportFlip); } } // (3). init pPostProcPipe->init(); // (4). setCallback pPostProcPipe->setCallbacks(NULL, NULL, NULL); // (5). Config pipe // MUINT32 u4RawStride[3] = {width, 0, 0}; MemoryInPortInfo rMemInPort(ImgInfo(eImgFmt_BAYER8, width, height), 0, u4RawStride, Rect(0, 0, width, height)); // MUINT32 u4DispStride[3] = {u4DispW, 0, 0}; MemoryOutPortInfo rDispPort(ImgInfo(eImgFmt_YUY2, u4DispW, u4DispH), u4DispStride, 0, 0); // vector<PortInfo const*> vCdpInPorts; vector<PortInfo const*> vCdpOutPorts; // vCdpInPorts.push_back(&rMemInPort); vCdpOutPorts.push_back(&rDispPort); #if VIDEO_PORT_ON MUINT32 u4VdoStride[3] = {u4DispW, 0, 0}; MemoryOutPortInfo rVdoPort(ImgInfo(eImgFmt_YUY2, u4DispW, u4DispH), u4VdoStride, 0, 0); rVdoPort.index = 1; vCdpOutPorts.push_back(&rVdoPort); #endif // pPostProcPipe->configPipe(vCdpInPorts, vCdpOutPorts); // (6). Enqueue, In buf // QBufInfo rInBuf; rInBuf.vBufInfo.clear(); BufInfo rBufInfo(rInMem.size, rInMem.virtAddr, rInMem.phyAddr, rInMem.memID); rInBuf.vBufInfo.push_back(rBufInfo); pPostProcPipe->enqueBuf(PortID(EPortType_MemoryIn, 0, 0), rInBuf); // (6.1) Enqueue, Out Buf // IMEM_BUF_INFO rDispMem; rDispMem.size = ((u4DispW * u4DispH * 2) + L1_CACHE_BYTES-1) & ~(L1_CACHE_BYTES-1); allocMem(rDispMem); // QBufInfo rOutBuf; rOutBuf.vBufInfo.clear(); rBufInfo.u4BufSize = rDispMem.size; rBufInfo.u4BufVA = rDispMem.virtAddr; rBufInfo.u4BufPA = rDispMem.phyAddr; rBufInfo.i4MemID = rDispMem.memID; rOutBuf.vBufInfo.push_back(rBufInfo); pPostProcPipe->enqueBuf(PortID(EPortType_MemoryOut, 0, 1), rOutBuf); // #if VIDEO_PORT_ON IMEM_BUF_INFO rVdoMem; rVdoMem.size = ((u4DispW * u4DispH * 2)+ L1_CACHE_BYTES - 1) & ~(L1_CACHE_BYTES - 1); allocMem(rVdoMem); // rOutBuf.vBufInfo.at(0).u4BufSize = rVdoMem.size; rOutBuf.vBufInfo.at(0).u4BufVA = rVdoMem.virtAddr; rOutBuf.vBufInfo.at(0).u4BufPA = rVdoMem.phyAddr; rOutBuf.vBufInfo.at(0).i4MemID = rVdoMem.memID; pPostProcPipe->enqueBuf(PortID(EPortType_MemoryOut, 1, 1), rOutBuf); #endif // (7). start pPostProcPipe->start(); // (8). Dequeue QTimeStampBufInfo rQDispOutBuf; QTimeStampBufInfo rQVdoOutBuf; pPostProcPipe->dequeBuf(PortID(EPortType_MemoryOut, 0, 1), rQDispOutBuf); #if VIDEO_PORT_ON pPostProcPipe->dequeBuf(PortID(EPortType_MemoryOut, 1, 1), rQVdoOutBuf); #endif // (8.1) Dequeue In Buf QTimeStampBufInfo rQInBuf; pPostProcPipe->dequeBuf(PortID(EPortType_MemoryIn, 0, 0), rQInBuf); // (9). Stop pPostProcPipe->stop(); // (10). uninit pPostProcPipe->uninit(); // (11). destory instance pPostProcPipe->destroyInstance(); char filename[256]; sprintf(filename, "/data/disp%dx%d.yuv", u4DispW, u4DispH); saveBufToFile(filename, reinterpret_cast<MUINT8*>(rDispMem.virtAddr), u4DispW * u4DispH * 2); deallocMem(rDispMem); #if VIDEO_PORT_ON sprintf(filename, "/data/vdo%dx%d.yuv", u4DispW, u4DispH); saveBufToFile(filename, reinterpret_cast<MUINT8*>(rVdoMem.virtAddr), u4DispW * u4DispH * 2); deallocMem(rVdoMem); #endif // return 0; }
MBOOL SingleShot:: createYuvRawImg(ImgBufInfo const & rSrcImgBufInfo, Rect const rSrcCropRect, MUINT32 u4Img1Rot, MUINT32 u4Img1Flip, ImgBufInfo const & rDstImgBufInfo) { FUNCTION_LOG_START; AutoCPTLog cptlog(Event_SShot_createYuvRawImg); if (!lock(RES_MGR_DRV_SCEN_HW_IP, PIPE_MGR_DRV_PIPE_MASK_POST_PROC, 3000)) { MY_LOGE("[createYuvRawImg] lock resource fail"); return MFALSE; } // (1). Create Instance CPTLogStr(Event_SShot_createYuvRawImg, CPTFlagSeparator, "init"); IPostProcPipe *pPostProcPipe = IPostProcPipe::createInstance(eSWScenarioID_CAPTURE_NORMAL, static_cast<EScenarioFmt>(mapScenarioType(rSrcImgBufInfo.eImgFmt))); CHECK_OBJECT(pPostProcPipe); // (2). Query port property // (3). init pPostProcPipe->init(); // (4). setCallback pPostProcPipe->setCallbacks(NULL, NULL, NULL); // (5). Config pipe // MemoryInPortInfo rMemInPort(ImgInfo(rSrcImgBufInfo.eImgFmt, rSrcImgBufInfo.u4ImgWidth, rSrcImgBufInfo.u4ImgHeight), 0, rSrcImgBufInfo.u4Stride, Rect(rSrcCropRect.x, rSrcCropRect.y, rSrcCropRect.w, rSrcCropRect.h)); // MemoryOutPortInfo rVdoPort(ImgInfo(rDstImgBufInfo.eImgFmt, rDstImgBufInfo.u4ImgWidth, rDstImgBufInfo.u4ImgHeight), rDstImgBufInfo.u4Stride, u4Img1Rot, u4Img1Flip); rVdoPort.index = 1; // vector<PortInfo const*> vInPorts; vector<PortInfo const*> vOutPorts; // vInPorts.push_back(&rMemInPort); vOutPorts.push_back(&rVdoPort); // CPTLogStr(Event_SShot_createYuvRawImg, CPTFlagSeparator, "configPipe"); pPostProcPipe->configPipe(vInPorts, vOutPorts); // (6). Enqueue, In buf // CPTLogStr(Event_SShot_createYuvRawImg, CPTFlagSeparator, "enqueBuf"); QBufInfo rInQBuf; BufInfo rInBufInfo(rSrcImgBufInfo.u4BufSize, rSrcImgBufInfo.u4BufVA, rSrcImgBufInfo.u4BufPA, rSrcImgBufInfo.i4MemID); rInQBuf.vBufInfo.push_back(rInBufInfo); pPostProcPipe->enqueBuf(PortID(EPortType_MemoryIn, 0, 0), rInQBuf); // (6.1) Enqueue, Yuv out Buf QBufInfo rVdoQBuf; BufInfo rVdoBufInfo(rDstImgBufInfo.u4BufSize, rDstImgBufInfo.u4BufVA, rDstImgBufInfo.u4BufPA, rDstImgBufInfo.i4MemID); rVdoQBuf.vBufInfo.push_back(rVdoBufInfo); pPostProcPipe->enqueBuf(PortID(EPortType_MemoryOut, 1, 1), rVdoQBuf); // (7). start CPTLogStr(Event_SShot_createYuvRawImg, CPTFlagSeparator, "start"); pPostProcPipe->start(); // (8). YUV Dequeue CPTLogStr(Event_SShot_createYuvRawImg, CPTFlagSeparator, "dequeBuf"); QTimeStampBufInfo rQVdoOutBuf; pPostProcPipe->dequeBuf(PortID(EPortType_MemoryOut, 1, 1), rQVdoOutBuf); // (8.1) In buffer dequeue QTimeStampBufInfo rQInBuf; pPostProcPipe->dequeBuf(PortID(EPortType_MemoryIn, 0, 0), rQInBuf); // (9). Stop CPTLogStr(Event_SShot_createYuvRawImg, CPTFlagSeparator, "stop"); pPostProcPipe->stop(); if (mu4DumpFlag) { char fileName[256] = {'\0'}; sprintf(fileName, "/%s/shot_yuv%dx%d.yuv", MEDIA_PATH, rDstImgBufInfo.u4ImgWidth, rDstImgBufInfo.u4ImgHeight); MtkCamUtils::saveBufToFile(fileName, reinterpret_cast<MUINT8*>( rDstImgBufInfo.u4BufVA), rDstImgBufInfo.u4BufSize); } // (10). uninit CPTLogStr(Event_SShot_createYuvRawImg, CPTFlagSeparator, "uninit"); pPostProcPipe->uninit(); // (11). destory instance pPostProcPipe->destroyInstance(); unlock(PIPE_MGR_DRV_PIPE_MASK_POST_PROC); FUNCTION_LOG_END; return MTRUE; }