前摄像头拍照人物是左右反过来的,而客户定制拍照缩略图不要镜像

具体修改:

vendor\mediatek\proprietary\hardware\mtkcam\legacy\platform\mt6755\v1\adapter\MtkDefault\MtkDefaultCamAdapter.Capture.cpp

onCaptureThreadLoop()
{
    bool ret = false;
    MUINT32 transform = 0;
    ResMgrDrv::MODE_STRUCT mode;
    //
    if(mpResMgrDrv)
    {
        mpResMgrDrv->getMode(&mode);
    }
    //
    //  [1] transit to "Capture" state.
    if(mpStateManager->isState(IState::eState_Idle))
    {
        mpStateManager->transitState(IState::eState_Capture);
        if(mShotMode == eShotMode_ContinuousShot)
        {
            mode.scenSw = ResMgrDrv::SCEN_SW_CAM_CSHOT;
        }
        else
        {
            mode.scenSw = ResMgrDrv::SCEN_SW_CAM_CAP;
        }
    }
    else
    if(mpStateManager->isState(IState::eState_Preview))
    {
        mpStateManager->transitState(IState::eState_PreviewCapture);
        if(mShotMode == eShotMode_ContinuousShotCc)
        {
            mode.scenSw = ResMgrDrv::SCEN_SW_CAM_CSHOT;
        }
        else
        {
            mode.scenSw = ResMgrDrv::SCEN_SW_ZSD;
        }
    }
    else
    if(mpStateManager->isState(IState::eState_Recording))
    {
        mpStateManager->transitState(IState::eState_VideoSnapshot);
        mode.scenSw = ResMgrDrv::SCEN_SW_VIDEO_VSS;
    }
    //
    if(mpResMgrDrv)
    {
        mpResMgrDrv->setMode(&mode);
    }
    //
    if( mpStateManager->isState(IState::eState_VideoSnapshot) &&
        (   mpDefaultCtrlNode->isRecBufSnapshot() ||
            mbLowPowerVideoRecord == MTRUE))
    {
        if(mpRecBufSnapshotlNode != NULL)
        {
            mpRecBufSnapshotlNode->takePicture(
                                        mpParamsMgr->getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH),
                                        mpParamsMgr->getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT),
                                        mpParamsMgr->getInt(CameraParameters::KEY_ROTATION),
                                        mpParamsMgr->getInt(CameraParameters::KEY_JPEG_QUALITY),
                                        mpParamsMgr->getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY),
                                        this);
        }
    }
    else
    {
        //
        //  [2.1] update mpShot instance.
        ret = updateShotInstance();
        sp<IShot> pShot = mpShot;
        //
        //  [2.2] return if no shot instance.
        if  ( ! ret || pShot == 0 )
        {
            #warning "[TODO] perform a dummy compressed-image callback or CAMERA_MSG_ERROR to inform app of end of capture?"
            MY_LOGE("updateShotInstance(%d), pShot.get(%p)", ret, pShot.get());
            goto lbExit;
        }
        else
        {
            //  [3.1] prepare parameters
            sp<IParamsManager> pParamsMgr = getParamsManager();
            //
            int iPictureWidth = 0, iPictureHeight = 0;
            if(mpStateManager->isState(IState::eState_VideoSnapshot))
            {
                mpDefaultCtrlNode->getVideoSnapshotSize(iPictureWidth, iPictureHeight);
            }
            else
            {
                pParamsMgr->getPictureSize(&iPictureWidth, &iPictureHeight);
            }
            //
            int iPreviewWidth = 0, iPreviewHeight = 0;
            pParamsMgr->getPreviewSize(&iPreviewWidth, &iPreviewHeight);
            String8 s8DisplayFormat = mpImgBufProvidersMgr->queryFormat(IImgBufProvider::eID_DISPLAY);
            if  ( String8::empty() == s8DisplayFormat ) {
                MY_LOGW("Display Format is empty");
            }
            //
            bool setCapBufMgr = MFALSE;
            if(mName == MtkCameraParameters::APP_MODE_NAME_MTK_ZSD ||       //ZSD preview
                    mpStateManager->isState(IState::eState_VideoSnapshot) ) //VSS shot
            {
                setCapBufMgr = MTRUE;
            }
            // convert rotation to transform
            MINT32 rotation = pParamsMgr->getInt(CameraParameters::KEY_ROTATION);
            //
            switch(rotation)
            {
                case 0:
                    transform = 0;
                    break;
                case 90:
                    transform = eTransform_ROT_90;
                    break;
                case 180:
                    transform = eTransform_ROT_180;
                    break;
                case 270:
                    transform = eTransform_ROT_270;
                    break;
                default:
                    break;
            }
			
			//add
			if (getOpenId() == 1) {
				switch (transform) {
					case eTransform_ROT_90:
						transform = eTransform_ROT_90|eTransform_FLIP_V;
						break;
					case eTransform_ROT_270:
						transform = eTransform_ROT_90|eTransform_FLIP_H;
						break;
					case eTransform_ROT_180:
						transform = eTransform_FLIP_V;
						break;
					default:
						transform = eTransform_FLIP_H;
						break;
				}
			}
			//add
			
            //  [3.2] prepare parameters: ShotParam
            ShotParam shotParam;
            shotParam.miPictureFormat           = NSCam::Utils::Format::queryImageFormat(pParamsMgr->getStr(CameraParameters::KEY_PICTURE_FORMAT));
            if  ( 0 != iPictureWidth && 0 != iPictureHeight )
            {
                shotParam.mi4PictureWidth       = iPictureWidth;
                shotParam.mi4PictureHeight      = iPictureHeight;
            }
            else
            {   //  When 3rd-party apk sets "picture-size=0x0", replace it with "preview-size".
                shotParam.mi4PictureWidth       = iPreviewWidth;
                shotParam.mi4PictureHeight      = iPreviewHeight;
            }
            shotParam.miPostviewDisplayFormat   = NSCam::Utils::Format::queryImageFormat(s8DisplayFormat.string());
            shotParam.miPostviewClientFormat    = NSCam::Utils::Format::queryImageFormat(pParamsMgr->getStr(CameraParameters::KEY_PREVIEW_FORMAT));
            shotParam.mi4PostviewWidth          = iPreviewWidth;
            shotParam.mi4PostviewHeight         = iPreviewHeight;
            shotParam.ms8ShotFileName           = pParamsMgr->getStr(MtkCameraParameters::KEY_CAPTURE_PATH);
            shotParam.mu4ZoomRatio              = pParamsMgr->getZoomRatio();
            shotParam.mu4ShotCount              = pParamsMgr->getInt(MtkCameraParameters::KEY_BURST_SHOT_NUM);
            shotParam.mu4Transform              = transform;
            shotParam.mu4MultiFrameBlending     = pParamsMgr->getMultFrameBlending();
            //
            //  [3.3] prepare parameters: JpegParam
            JpegParam jpegParam;
            jpegParam.mu4JpegQuality            = pParamsMgr->getInt(CameraParameters::KEY_JPEG_QUALITY);
            jpegParam.mu4JpegThumbQuality       = pParamsMgr->getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY);
            jpegParam.mi4JpegThumbWidth         = pParamsMgr->getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH);
            jpegParam.mi4JpegThumbHeight        = pParamsMgr->getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT);
            jpegParam.ms8GpsLatitude            = pParamsMgr->getStr(CameraParameters::KEY_GPS_LATITUDE);
            jpegParam.ms8GpsLongitude           = pParamsMgr->getStr(CameraParameters::KEY_GPS_LONGITUDE);
            jpegParam.ms8GpsAltitude            = pParamsMgr->getStr(CameraParameters::KEY_GPS_ALTITUDE);
            jpegParam.ms8GpsTimestamp           = pParamsMgr->getStr(CameraParameters::KEY_GPS_TIMESTAMP);
            jpegParam.ms8GpsMethod              = pParamsMgr->getStr(CameraParameters::KEY_GPS_PROCESSING_METHOD);
            //
            //  [4.1] perform Shot operations.
            if(!mbTakePicPrvNotStop)
            {
                if(mShotMode == eShotMode_ContinuousShot)
                {
                    mpDefaultBufHdl->mapPort(DefaultBufHandler::eBuf_Disp, PASS2_PRV_DST_0, 10, MTRUE);
                    mpDefaultBufHdl->mapPort(DefaultBufHandler::eBuf_Disp, PASS2_CAP_DST_0, 10);
                }
                else
                {
                    mpDefaultBufHdl->mapPort(DefaultBufHandler::eBuf_Disp, PASS2_PRV_DST_0, 6*100, MTRUE);
                    mpDefaultBufHdl->mapPort(DefaultBufHandler::eBuf_Disp, PASS2_CAP_DST_0, 6*100);
                }
            }
            //check if raw16 CB is enable
            if( mEnRaw16CB == 1 )//CAMERA_CMD_ENABLE_RAW16_CALLBACK
            {
                MY_LOGD("adapter.capture: mEnRaw16CB == 1 to enableDataMsg(NSShot::EIShot_DATA_MSG_RAW)");
                pShot->enableDataMsg(NSShot::EIShot_DATA_MSG_RAW);
            }
            //
            if( mShotMode == eShotMode_ZsdShot )
            {
                MUINT32 width = 0, height = 0;
                if( shotParam.mu4Transform & eTransform_ROT_90 ) // 90(=4), 270(=7)
                {
                    width    = shotParam.mi4PictureHeight;
                    height   = shotParam.mi4PictureWidth;
                }
                else
                {
                    width    = shotParam.mi4PictureWidth;
                    height   = shotParam.mi4PictureHeight;
                }
                allocateReuseZsdP2outBuf(width, height);
            }
            else
            {
                freeReuseZsdP2outBuf();
            }

            ret =
                    pShot->sendCommand(eCmd_reset)
                &&  pShot->setCallback(this)
                &&  pShot->sendCommand(eCmd_setShotParam, (MUINTPTR)&shotParam, sizeof(ShotParam))
                &&  pShot->sendCommand(eCmd_setJpegParam, (MUINTPTR)&jpegParam, sizeof(JpegParam))
                &&  pShot->sendCommand(eCmd_setPrvBufHdl, (MUINTPTR)mpDefaultBufHdl, sizeof(DefaultBufHandler))
                &&  ( (mShotMode == eShotMode_ZsdShot) ?
                        pShot->sendCommand(eCmd_setP2outBuf, (MUINTPTR)reuseZsdP2outBuf) :
                        MTRUE )
                &&  ( setCapBufMgr ?
                        pShot->sendCommand(eCmd_setCapBufMgr, (MUINTPTR)mpCapBufMgr, sizeof(CapBufMgr)) :
                        MTRUE )
                &&  pShot->sendCommand(eCmd_capture)
                    ;
            if  ( ! ret )
            {
                MY_LOGE("fail to perform shot operations");
            }
            //
            if(!mbTakePicPrvNotStop)
            {
                mpDefaultBufHdl->unmapPort(DefaultBufHandler::eBuf_Disp);
            }
        }
        //
        //
        lbExit:
        //
        //  [5.1] uninit shot instance.
        MY_LOGD("free shot instance: (mpShot/pShot)=(%p/%p)", mpShot.get(), pShot.get());
        mpShot = NULL;
        pShot  = NULL;
        //
        //  [5.2] notify capture done.
    }
    //
    mpStateManager->getCurrentState()->onCaptureDone(this);
    //
    //
    return  true;
}

加入//add部分整编
         

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐