android 8.1拍照后图片镜像。缩略图镜像问题
前摄像头拍照人物是左右反过来的,而客户定制拍照缩略图不要镜像具体修改:vendor\mediatek\proprietary\hardware\mtkcam\legacy\platform\mt6755\v1\adapter\MtkDefault\MtkDefaultCamAdapter.Capture.cpp加入//add部分整编
·
前摄像头拍照人物是左右反过来的,而客户定制拍照缩略图不要镜像
具体修改:
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部分整编
更多推荐
已为社区贡献1条内容
所有评论(0)