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;
}
Beispiel #3
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;
}
Beispiel #5
0
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;
}
Beispiel #10
0
/*******************************************************************************
*  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;
}