MVOID Ts_UT:: freeRawMem() { if(vRawMem.size() > 0) { printf("[freeRawMem] vRawMem\n"); int vSize = vRawMem.size(); for (int i = 0; i < vSize; i++) { char filename[256]; sprintf(filename, "/data/iopipe/raw%dx%d_%02d.raw", u4SensorWidth, u4SensorHeight, i); saveBufToFile(filename, reinterpret_cast<MUINT8*>(vRawMem.at(i).virtAddr), u4SensorWidth * u4SensorHeight * 2); deallocMem(vRawMem.at(i)); } //deque mem printf("[freeRawMem] vDequeMem\n"); vSize = vDequeMem.size(); for (int i = 0; i < vSize; i++) { deallocMem(vDequeMem.at(i)); } } }
MBOOL Mhal_facebeauty:: handleYuvDataCallback(MUINT8* const puBuf, MUINT32 const u4Size) { MY_LOGD("[handleYuvDataCallback] + (puBuf, size) = (%p, %d)", puBuf, u4Size); #ifdef Debug_Mode saveBufToFile("/sdcard/yuv.yuv", puBuf, u4Size); #endif return 0; }
bool RawDumpCmdQueThread::threadLoop() { FUNCTION_IN; // bool ret = true; sp<RawDumpCmdCookie> pCmdCookie; // while(getCommand(pCmdCookie)) { CamProfile profile(__FUNCTION__, "RawDumpCmdQueThread::save"); MY_LOGD("+ [RDCT] tid(%d), frame_count(%d))", ::gettid(), pCmdCookie->getFrameCnt() ); // write buffer[0-#] into disc String8 s8RawFilePath(pCmdCookie->getRawFilePath()); String8 ms8RawFileExt(s8RawFilePath.getPathExtension()); // => .raw s8RawFilePath = s8RawFilePath.getBasePath(); // => /storage/sdcard1/DCIM/CameraEM/Preview01000108ISO0 char mpszSuffix[256] = {0}; RawImageBufInfo *pBufInfo = pCmdCookie->getRawImageBufInfo(); if (mspParamsMgr->getInt(MtkCameraParameters::KEY_ENG_3ADB_FLASH_ENABLE) == 1) { //s8RawFilePath = s8RawFilePath.getPathDir(); // => /storage/sdcard1/DCIM/CameraEM/Preview01000108ISO0 sprintf(mpszSuffix, "_%3d",pCmdCookie->getFrameCnt()-1); } else { //String8 ms8RawFileExt(s8RawFilePath.getPathExtension()); // => .raw //s8RawFilePath = s8RawFilePath.getBasePath(); // => /storage/sdcard1/DCIM/CameraEM/Preview01000108ISO0 sprintf(mpszSuffix, "__%dx%d_%d_%d_%03d_0x%lld", pBufInfo->u4Width, pBufInfo->u4Height, mu4BitOrder, mu4BitDepth, pCmdCookie->getFrameCnt(), pBufInfo->u8TimeStamp); /* info from EngShot::onCmd_capture */ } s8RawFilePath.append(mpszSuffix); s8RawFilePath.append(ms8RawFileExt); MY_LOGD("Written buffer addr=0x%x, buffer size=%d",pBufInfo->u4VirtAddr, pBufInfo->u4Size); bool ret = saveBufToFile(s8RawFilePath.string(), (MUINT8*)pBufInfo->u4VirtAddr, pBufInfo->u4Size); MY_LOGD("Raw saved: %d: %s", pCmdCookie->getFrameCnt(), s8RawFilePath.string()); // free buffer free((MUINT8*)pBufInfo->u4VirtAddr); profile.print(); } // FUNCTION_OUT; // return false; }
MBOOL Mhal_facebeauty:: onCmd_capture() { MBOOL ret = MFALSE; sem_init(&semFBthread, 0, 0); pthread_create(&threadFB, NULL, FBCapture, NULL); sem_wait(&semFBthread); ret = createFBJpegImg(mpSource,mu4W_yuv,mu4H_yuv,0); if ( ! ret ) { goto lbExit; } //------------------ Sava test ----------------// #ifdef BanchMark char szFileName[100]; MUINT32 FDInfo[100]={0}; MUINT32* htable=(MUINT32*)msFaceBeautyResultInfo.PCAHTable; int i=0; for(i=0;i<FBmetadata.number_of_faces;i++) { FDInfo[i*4] = FBmetadata.faces[i].rect[0]; FDInfo[i*4+1] = FBmetadata.faces[i].rect[1]; FDInfo[i*4+2] = FBmetadata.faces[i].rect[2]-FBmetadata.faces[i].rect[0]; FDInfo[i*4+3] = MTKPoseInfo[i].rip_dir; MY_LOGI("[FACEINFO] x %d y %d w %d",FBmetadata.faces[i].rect[0],FBmetadata.faces[i].rect[1],FBmetadata.faces[i].rect[2]); } ::sprintf(szFileName, "/sdcard/DCIM/Camera/%s_H_%d_%d.txt", "FDinfo", *htable,capturecount); saveBufToFile(szFileName, (MUINT8*)&FDInfo, 100 * 4); MY_LOGI("[FACEINFO] Save File done"); #endif //------------------ Sava test ----------------// // Force to handle done even if there is any error before. //to do handleCaptureDone(); ret = MTRUE; lbExit: releaseBufs(); pthread_join(threadFB, NULL); CPTLog(Event_FcaeBeautyShot, CPTFlagEnd); CPTLog(Event_FBShot_Utility, CPTFlagEnd); #if (FB_PROFILE_CAPTURE) DbgTmr.print("FBProfiling:: Done"); #endif return ret; }
MVOID Ts_IT:: freeRawMem() { if(vRawMem.size() > 0) { MY_LOGD("deallocMem\n"); for (int i = 0; i < BUF_NUM; i++) { char filename[256]; sprintf(filename, "/data/IT_%dx%d_%02d.raw", u4SensorWidth, u4SensorHeight, i); saveBufToFile(filename, reinterpret_cast<MUINT8*>(vRawMem.at(i).virtAddr), (u4SensorWidth*u4SensorHeight*10)/8); deallocMem(vRawMem.at(i)); } } }
MBOOL Mhal_facebeauty:: handleJpegData(MUINT8* const puJpegBuf, MUINT32 const u4JpegSize, MUINT8* const puThumbBuf, MUINT32 const u4ThumbSize, MUINT32 const Mode) { MY_LOGD("[handleJpegData] + (puJpgBuf, jpgSize, puThumbBuf, thumbSize, mode ) = (%p, %d, %p, %d, %d)", puJpegBuf, u4JpegSize, puThumbBuf, u4ThumbSize, Mode); MUINT8 *puExifHeaderBuf = new MUINT8[128 * 1024]; MUINT32 u4ExifHeaderSize = 0; mpIMemDrv->cacheFlushAll(); makeExifHeader(eAppMode_PhotoMode, puThumbBuf, u4ThumbSize, puExifHeaderBuf, u4ExifHeaderSize); MY_LOGD("[handleJpegData] (thumbbuf, size, exifHeaderBuf, size) = (%p, %d, %p, %d)", puThumbBuf, u4ThumbSize, puExifHeaderBuf, u4ExifHeaderSize); // Jpeg callback if(Mode) { //using mpAmap to reduce memory buffer memcpy((void*)mpAmap.virtAddr, puExifHeaderBuf, u4ExifHeaderSize); memcpy((void*)(mpAmap.virtAddr+u4ExifHeaderSize), puJpegBuf, u4JpegSize); saveBufToFile(mShotParam.ms8ShotFileName, (MUINT8*)mpAmap.virtAddr, (u4JpegSize+u4ExifHeaderSize)); } else { mpShotCallback->onCB_CompressedImage(0, u4JpegSize, reinterpret_cast<uint8_t const*>(puJpegBuf), u4ExifHeaderSize, //header size puExifHeaderBuf, //header buf 0, //callback index true //final image ); } MY_LOGD("[handleJpegData] -"); delete [] puExifHeaderBuf; return MTRUE; }
MBOOL Mhal_facebeauty:: createJpegImgWithThumbnail(NSCamHW::ImgBufInfo const &rYuvImgBufInfo, NSCamHW::ImgBufInfo const &rPostViewBufInfo, MUINT32 const Mode) { MBOOL ret = MTRUE; MUINT32 stride[3]; MY_LOGD("[createJpegImgWithThumbnail] in"); //rJpegImgBufInfo IMEM_BUF_INFO jpegBuf; jpegBuf.size = mu4W_yuv * mu4H_yuv; mpIMemDrv->allocVirtBuf(&jpegBuf); NSCamHW::ImgInfo rJpegImgInfo(eImgFmt_JPEG, mu4W_yuv, mu4H_yuv); NSCamHW::BufInfo rJpegBufInfo(jpegBuf.size, jpegBuf.virtAddr, jpegBuf.phyAddr, jpegBuf.memID); NSCamHW::ImgBufInfo rJpegImgBufInfo(rJpegImgInfo, rJpegBufInfo, stride); //rThumbImgBufInfo IMEM_BUF_INFO thumbBuf; thumbBuf.size = mJpegParam.mi4JpegThumbWidth * mJpegParam.mi4JpegThumbHeight; mpIMemDrv->allocVirtBuf(&thumbBuf); NSCamHW::ImgInfo rThumbImgInfo(eImgFmt_JPEG, mJpegParam.mi4JpegThumbWidth, mJpegParam.mi4JpegThumbHeight); NSCamHW::BufInfo rThumbBufInfo(thumbBuf.size, thumbBuf.virtAddr, thumbBuf.phyAddr, thumbBuf.memID); NSCamHW::ImgBufInfo rThumbImgBufInfo(rThumbImgInfo, rThumbBufInfo, stride); MUINT32 u4JpegSize = 0; MUINT32 u4ThumbSize = 0; NSCamShot::JpegParam yuvJpegParam(mJpegParam.mu4JpegQuality, MFALSE); ret = ret && createJpegImg(rYuvImgBufInfo, yuvJpegParam, mShotParam.mi4Rotation, 0 , rJpegImgBufInfo, u4JpegSize); // (3.1) create thumbnail // If postview is enable, use postview buffer, // else use yuv buffer to do thumbnail if (0 != mJpegParam.mi4JpegThumbWidth && 0 != mJpegParam.mi4JpegThumbHeight) { NSCamShot::JpegParam rParam(mJpegParam.mu4JpegThumbQuality, MFALSE); ret = ret && createJpegImg(rPostViewBufInfo, rParam, mShotParam.mi4Rotation, 0, rThumbImgBufInfo, u4ThumbSize); } #ifdef Debug_Mode // Save Img for debug. { char szFileName[100]; saveBufToFile("/sdcard/Result.jpg", (uint8_t*)jpegBuf.virtAddr, u4JpegSize); MY_LOGD("[createJpegImgWithThumbnail] Save %s done.", szFileName); saveBufToFile("/sdcard/ThumbImg.jpg", (uint8_t*)thumbBuf.virtAddr, u4ThumbSize); MY_LOGD("[createJpegImgWithThumbnail] Save %s done.", szFileName); } #endif // Debug_Mode // Jpeg callback, it contains thumbnail in ext1, ext2. handleJpegData((MUINT8*)rJpegImgBufInfo.u4BufVA, u4JpegSize, (MUINT8*)rThumbImgBufInfo.u4BufVA, u4ThumbSize, Mode); mpIMemDrv->freeVirtBuf(&jpegBuf); mpIMemDrv->freeVirtBuf(&thumbBuf); MY_LOGD("[createJpegImgWithThumbnail] out"); return ret; }
MBOOL Mhal_facebeauty:: createFullFrame(IMEM_BUF_INFO Srcbufinfo) { MBOOL ret = MTRUE; MINT32 err = 0; CPTLog(Event_FBShot_createFullFrame, CPTFlagStart); MY_LOGD("[createFullFrame] + \n"); NSCamShot::ISingleShot *pSingleShot = NSCamShot::ISingleShot::createInstance(eShotMode_FaceBeautyShot, "FaceBeautyshot"); // pSingleShot->init(); EImageFormat ePostViewFmt = static_cast<EImageFormat>(android::MtkCamUtils::FmtUtils::queryImageioFormat(mShotParam.ms8PostviewDisplayFormat)); ImgBufInfo rSrcImgInfo; rSrcImgInfo.u4ImgWidth = mu4W_yuv; rSrcImgInfo.u4ImgHeight = mu4H_yuv; rSrcImgInfo.eImgFmt = eImgFmt_YV16; rSrcImgInfo.u4Stride[0] = rSrcImgInfo.u4ImgWidth; rSrcImgInfo.u4Stride[1] = rSrcImgInfo.u4ImgWidth >> 1; rSrcImgInfo.u4Stride[2] = rSrcImgInfo.u4ImgWidth >> 1; rSrcImgInfo.u4BufSize = Srcbufinfo.size; rSrcImgInfo.u4BufVA = Srcbufinfo.virtAddr; rSrcImgInfo.u4BufPA = Srcbufinfo.phyAddr; rSrcImgInfo.i4MemID = Srcbufinfo.memID; pSingleShot->registerImgBufInfo(ECamShot_BUF_TYPE_YUV, rSrcImgInfo); ImgBufInfo rPostImgInfo; rPostImgInfo.u4ImgWidth = mShotParam.mi4PostviewWidth; rPostImgInfo.u4ImgHeight = mShotParam.mi4PostviewHeight; rPostImgInfo.eImgFmt = ePostViewFmt; rPostImgInfo.u4Stride[0] = rPostImgInfo.u4ImgWidth; rPostImgInfo.u4Stride[1] = rPostImgInfo.u4ImgWidth >> 1; rPostImgInfo.u4Stride[2] = rPostImgInfo.u4ImgWidth >> 1; // using blurimg buffer for reduce buffer size rPostImgInfo.u4BufSize = mpBlurImg.size; rPostImgInfo.u4BufVA = mpBlurImg.virtAddr; rPostImgInfo.u4BufPA = mpBlurImg.phyAddr; rPostImgInfo.i4MemID = mpBlurImg.memID; pSingleShot->registerImgBufInfo(ECamShot_BUF_TYPE_POSTVIEW, rPostImgInfo); // pSingleShot->enableDataMsg(ECamShot_DATA_MSG_YUV //| ECamShot_DATA_MSG_JPEG ); pSingleShot->enableNotifyMsg(NSCamShot::ECamShot_NOTIFY_MSG_EOF); // shot param NSCamShot::ShotParam rShotParam(eImgFmt_YV16, //yuv format mShotParam.mi4PictureWidth, //picutre width mShotParam.mi4PictureHeight, //picture height 0, //picture rotation in jpg 0, //picture flip ePostViewFmt, mShotParam.mi4PostviewWidth, //postview width mShotParam.mi4PostviewHeight, //postview height 0, //postview rotation 0, //postview flip mShotParam.mu4ZoomRatio //zoom ); // jpeg param NSCamShot::JpegParam rJpegParam(mJpegParam.mu4JpegQuality, //Quality MTRUE //isSOI ); // sensor param NSCamShot::SensorParam rSensorParam(static_cast<MUINT32>(MtkCamUtils::DevMetaInfo::queryHalSensorDev(getOpenId())), //Device ID #warning [FIXME] workaround for Alta phone capture mode can not work ACDK_SCENARIO_ID_CAMERA_CAPTURE_JPEG, //Scenaio //ACDK_SCENARIO_ID_CAMERA_PREVIEW, //Scenaio 10, //bit depth MFALSE, //bypass delay MFALSE //bypass scenario ); // pSingleShot->setCallbacks(fgCamShotNotifyCb, fgCamShotDataCb, this); // pSingleShot->setShotParam(rShotParam); // pSingleShot->setJpegParam(rJpegParam); // pSingleShot->startOne(rSensorParam); // pSingleShot->uninit(); // pSingleShot->destroyInstance(); if(mShotParam.ms8ShotFileName.string()!=NULL) { ret = createFBJpegImg(Srcbufinfo,mu4W_yuv,mu4H_yuv,1); if ( ! ret ) { goto lbExit; } } #ifdef Debug_Mode loadFileToBuf("/data/FBSOURCE.yuv",(uint8_t*)Srcbufinfo.virtAddr,Srcbufinfo.size); saveBufToFile("/sdcard/img.yuv", (uint8_t*)Srcbufinfo.virtAddr, Srcbufinfo.size); #endif CPTLog(Event_FBShot_createFullFrame, CPTFlagEnd); MY_LOGD("[createFullFrame] - \n"); lbExit: return ret; }
MBOOL Mhal_facebeauty:: onCmd_capture() { MBOOL ret = MFALSE; MINT32 g_BufWidth; MINT32 g_BufHeight; if((mShotParam.mi4PostviewWidth*3) == (mShotParam.mi4PostviewHeight*4)) { g_BufWidth = 320; g_BufHeight = 240; } else if((mShotParam.mi4PostviewWidth*9) == (mShotParam.mi4PostviewHeight*16)) { g_BufWidth = 320; g_BufHeight = 180; } else if((mShotParam.mi4PostviewWidth*3) == (mShotParam.mi4PostviewHeight*5)) { g_BufWidth = 320; g_BufHeight = 192; } else { g_BufWidth = 320; if(mShotParam.mi4PostviewWidth != 0) g_BufHeight = 320 * mShotParam.mi4PostviewHeight/mShotParam.mi4PostviewWidth; else g_BufHeight = 180; } MY_LOGD("[onCmd_capture] Postview %dx%d -> Buf %dx%d\n",mShotParam.mi4PostviewWidth, mShotParam.mi4PostviewHeight, g_BufWidth, g_BufHeight); for(int i=0;i<FBmetadata.number_of_faces;i++) { FBmetadata.faces[i].rect[0] = ((FBmetadata.faces[i].rect[0] + 1000) * g_BufWidth) / 2000; FBmetadata.faces[i].rect[1] = ((FBmetadata.faces[i].rect[1] + 1000) * g_BufHeight) / 2000; FBmetadata.faces[i].rect[2] = ((FBmetadata.faces[i].rect[2] + 1000) * g_BufWidth) / 2000; FBmetadata.faces[i].rect[3] = ((FBmetadata.faces[i].rect[3] + 1000) * g_BufHeight) / 2000; int face_size = FBmetadata.faces[i].rect[2] - FBmetadata.faces[i].rect[0]; if(face_size >= 30) { int zoom_size; zoom_size = face_size/15; if( (FBmetadata.faces[i].rect[0] - zoom_size >= 0) && (FBmetadata.faces[i].rect[1] - zoom_size >= 0) && (FBmetadata.faces[i].rect[2] + zoom_size <= g_BufWidth -1) && (FBmetadata.faces[i].rect[3] + zoom_size <= g_BufHeight-1)) { zoom_size = face_size/12; if( (FBmetadata.faces[i].rect[0] - zoom_size >= 0) && (FBmetadata.faces[i].rect[1] - zoom_size >= 0) && (FBmetadata.faces[i].rect[2] + zoom_size <= g_BufWidth -1) && (FBmetadata.faces[i].rect[3] + zoom_size <= g_BufHeight-1)) { zoom_size = face_size/10; if( (FBmetadata.faces[i].rect[0] - zoom_size >= 0) && (FBmetadata.faces[i].rect[1] - zoom_size >= 0) && (FBmetadata.faces[i].rect[2] + zoom_size <= g_BufWidth -1) && (FBmetadata.faces[i].rect[3] + zoom_size <= g_BufHeight-1)) { zoom_size = face_size/8; if( (FBmetadata.faces[i].rect[0] - zoom_size >= 0) && (FBmetadata.faces[i].rect[1] - zoom_size >= 0) && (FBmetadata.faces[i].rect[2] + zoom_size <= g_BufWidth -1) && (FBmetadata.faces[i].rect[3] + zoom_size <= g_BufHeight-1)) { zoom_size = face_size/7; if( (FBmetadata.faces[i].rect[0] - zoom_size >= 0) && (FBmetadata.faces[i].rect[1] - zoom_size >= 0) && (FBmetadata.faces[i].rect[2] + zoom_size <= g_BufWidth -1) && (FBmetadata.faces[i].rect[3] + zoom_size <= g_BufHeight-1)) { ; } else { zoom_size = face_size/8; } } else { zoom_size = face_size/10; } } else { zoom_size = face_size/12; } } else { zoom_size = face_size/15; } FBmetadata.faces[i].rect[0] -= zoom_size; FBmetadata.faces[i].rect[1] -= zoom_size; FBmetadata.faces[i].rect[2] += zoom_size; FBmetadata.faces[i].rect[3] += zoom_size; } } MY_LOGI("[onCmd_capture] After FBFaceInfo num %d left %d top %d right %d button %d pose %d \n",i,FBmetadata.faces[i].rect[0],FBmetadata.faces[i].rect[1],FBmetadata.faces[i].rect[2],FBmetadata.faces[i].rect[3],MTKPoseInfo[i].rip_dir); } sem_init(&semMemoryDone, 0, 0); sem_init(&semFBthread, 0, 0); pthread_create(&threadFB, NULL, FBCapture, NULL); sem_init(&semUtilitythread, 0, 0); pthread_create(&threadUtility, NULL, FBUtility, NULL); sem_wait(&semFBthread); ret = createFBJpegImg(mpSource,mu4W_yuv,mu4H_yuv,0); if ( ! ret ) { goto lbExit; } //------------------ Sava test ----------------// #ifdef BanchMark char szFileName[100]; MUINT32 FDInfo[100]={0}; MUINT32* htable=(MUINT32*)msFaceBeautyResultInfo.PCAHTable; int i=0; for(i=0;i<FBmetadata.number_of_faces;i++) { FDInfo[i*4] = FBmetadata.faces[i].rect[0]; FDInfo[i*4+1] = FBmetadata.faces[i].rect[1]; FDInfo[i*4+2] = FBmetadata.faces[i].rect[2]-FBmetadata.faces[i].rect[0]; FDInfo[i*4+3] = MTKPoseInfo[i].rip_dir; MY_LOGI("[FACEINFO] x %d y %d w %d",FBmetadata.faces[i].rect[0],FBmetadata.faces[i].rect[1],FBmetadata.faces[i].rect[2]); } ::sprintf(szFileName, "/sdcard/DCIM/Camera/%s_H_%d_%d.txt", "FDinfo", *htable,capturecount); saveBufToFile(szFileName, (MUINT8*)&FDInfo, 100 * 4); MY_LOGI("[FACEINFO] Save File done"); #endif //------------------ Sava test ----------------// // Force to handle done even if there is any error before. //to do handleCaptureDone(); ret = MTRUE; lbExit: releaseBufs(); pthread_join(threadFB, NULL); UtilityStatus = 0; sem_post(&semUtilitythread); pthread_join(threadUtility, NULL); CPTLog(Event_FcaeBeautyShot, CPTFlagEnd); CPTLog(Event_FBShot_Utility, CPTFlagEnd); #if (FB_PROFILE_CAPTURE) DbgTmr.print("FBProfiling:: Done"); #endif return ret; }
/******************************************************************************* * Config CamIO Pipe /floria ********************************************************************************/ int Ts_IT:: startPreview(int count) { MY_LOGD("E"); MUINT32 u4RawBufSize = (u4SensorWidth * u4SensorHeight * 10) / 8; MINT32 ret = 0; u4RawBufSize = ((u4RawBufSize + 0xFFF) & ~0xFFF); //align 4k /*************************************************** * Pass 1 : CamIOPipe ***************************************************/ MY_LOGD("ICamIOPipe::createInstance"); //ICamIOPipe *pCamIOPipe = ICamIOPipe::createInstance(eScenarioID_VSS,//mapScenarioID(meSWScenarioID, ICamIOPipe::ePipeID) mpCamIOPipe = ICamIOPipe::createInstance(eScenarioID_VSS, eScenarioFmt_RAW); if (NULL == mpCamIOPipe) { return 0; } MY_LOGD("Pipe (Name, ID) = (%s, %d)", mpCamIOPipe->getPipeName(), mpCamIOPipe->getPipeId()); MY_LOGD("mpCamIOPipe->init\n"); if (!mpCamIOPipe->init()) { MY_LOGD("mpCamIOPipe->init failed"); return 0; } mpCamIOPipe->setCallbacks(NULL, NULL, NULL); MY_LOGD("setConfigPortInfo"); if (setConfigPortInfo() == MFALSE) { goto TEST_EXIT; } if(vRawMem.size() > 0) { freeRawMem(); TS_Thread_UnInit(); } for (int i = 0; i < BUF_NUM; i++) { IMEM_BUF_INFO rBuf; rBuf.size = u4RawBufSize; allocMem(rBuf); vRawMem.push_back(rBuf); } for (int i = 0; i < BUF_NUM; i++) { #if 1 QBufInfo rOutBufInfo; PortID rPortID(EPortType_Memory, EPortIndex_IMGO, 1); NSImageio::NSIspio::BufInfo rBuf(vRawMem.at(i).size, vRawMem.at(i).virtAddr, vRawMem.at(i).phyAddr, vRawMem.at(i).memID, vRawMem.at(i).bufSecu, vRawMem.at(i).bufCohe); rOutBufInfo.vBufInfo.push_back(rBuf); mpCamIOPipe->enqueOutBuf(rPortID, rOutBufInfo); #else rRawBuf.vBufInfo.clear(); NSCamHW::BufInfo rBufInfo(vRawMem.at(i).size, vRawMem.at(i).virtAddr, vRawMem.at(i).phyAddr, vRawMem.at(i).memID); rRawBuf.vBufInfo.push_back(rBufInfo); MY_LOGD("enqueBuf(%d)", i); if (MFALSE == enqueBuf(NSCamPipe::PortID(NSCamPipe::EPortType_MemoryOut, 0, 1), rRawBuf)) { goto TEST_EXIT; } #endif } /*************************************************** * Pass 2 : PostProc ***************************************************/ mpPostProcPipe = IPostProcPipe::createInstance(eScenarioID_VSS, eScenarioFmt_RAW); if (NULL == mpPostProcPipe) { MY_LOGE("mpPostProcPipe create instance fail\n"); goto TEST_EXIT; } ret = mpPostProcPipe->init(); if (!mpPostProcPipe->init()) { MY_LOGE("mpPostProcPipe init fail\n"); goto TEST_EXIT; } dispoBuf.size = DISPO_WIDTH*DISPO_HEIGHT*2; allocMem(dispoBuf); vidoBuf.size = VIDO_WIDTH*VIDO_HEIGHT*2; allocMem(vidoBuf); ret = mpPostProcPipe->sendCommand((MINT32)NSImageio::NSIspio::EPIPECmd_SET_CQ_CHANNEL, (MINT32)NSImageio::NSIspio::EPIPE_PASS2_CQ1,0,0); ret = mpPostProcPipe->sendCommand((MINT32)NSImageio::NSIspio::EPIPECmd_SET_CONFIG_STAGE, (MINT32)NSImageio::NSIspio::eConfigSettingStage_Init,0,0); ret = mpPostProcPipe->sendCommand((MINT32)NSImageio::NSIspio::EPIPECmd_SET_CONFIG_STAGE, (MINT32)NSImageio::NSIspio::eConfigSettingStage_UpdateTrigger,0,0); start(); TS_Thread_Init(count); if (!mpCamIOPipe->stop()) { MY_LOGE("mpCamIOPipe->stop() fail"); } //MY_LOGD("Preview stop, press to enter to exit"); //getchar(); TEST_EXIT: if (NULL != mpCamIOPipe) { MY_LOGD("pCamIOPipe->uninit"); if (MTRUE != mpCamIOPipe->uninit()) { MY_LOGE("pCamIOPipe->uninit fail"); } MY_LOGD("pCamIOPipe->destroyInstance"); mpCamIOPipe->destroyInstance(); mpCamIOPipe = NULL; } if (NULL != mpPostProcPipe) { if (MTRUE != mpPostProcPipe->uninit()) { MY_LOGE("mpPostProcPipe uninit fail"); } mpPostProcPipe->destroyInstance(); mpPostProcPipe = NULL; } if (dispoBuf.size) { char filename[256]; sprintf(filename, "/data/IT_%dx%d_dispo.yuv", DISPO_WIDTH, DISPO_HEIGHT); saveBufToFile(filename, reinterpret_cast<MUINT8*>(dispoBuf.virtAddr), dispoBuf.size); deallocMem(dispoBuf); } if (vidoBuf.size) { char filename[256]; sprintf(filename, "/data/IT_%dx%d_vidio.yuv", VIDO_WIDTH, VIDO_HEIGHT); saveBufToFile(filename, reinterpret_cast<MUINT8*>(vidoBuf.virtAddr), vidoBuf.size); deallocMem(vidoBuf); } MY_LOGD("X"); return 0; }