首页 > 代码库 > android 如何实现前置camera自拍镜像功能
android 如何实现前置camera自拍镜像功能
默认的前置camera, 文字”XI”在preview时显示为”IX”(前置camera preview时默认会有mirror效果), 拍摄出来的照片为"XI",如何让拍摄出来的照片也是”IX” , 也就是和preview时保持一致?
对于普通单拍(非ZSD或其他拍照模式), 需要修改的代码为normalShot.cpp文件中的onCmd_capture()方法,
将原来的
bool
NormalShot::
onCmd_capture()
{
AutoCPTLog cptlog(Event_Shot_capture);
MBOOL ret = MTRUE;
NSCamShot::ISingleShot *pSingleShot = NSCamShot::ISingleShot::createInstance(static_cast<EShotMode>(mu4ShotMode), "NormalShot");
......
// shot param
NSCamShot::ShotParam rShotParam(eImgFmt_YUY2, //yuv format
mShotParam.mi4PictureWidth, //picutre width
mShotParam.mi4PictureHeight, //picture height
mShotParam.mi4Rotation, //picture rotation
0, //picture flip
ePostViewFmt, // postview format
mShotParam.mi4PostviewWidth, //postview width
mShotParam.mi4PostviewHeight, //postview height
0, //postview rotation
0, //postview flip
mShotParam.mu4ZoomRatio //zoom
);
......
}
修改为:
bool
NormalShot::
onCmd_capture()
{
AutoCPTLog cptlog(Event_Shot_capture);
MBOOL ret = MTRUE;
NSCamShot::ISingleShot *pSingleShot = NSCamShot::ISingleShot::createInstance(static_cast<EShotMode>(mu4ShotMode), "NormalShot");
......
// shot param
NSCamShot::ShotParam rShotParam(eImgFmt_YUY2, //yuv format
mShotParam.mi4PictureWidth, //picutre width
mShotParam.mi4PictureHeight, //picture height
mShotParam.mi4Rotation, //picture rotation
(getOpenId()==1? 1:0), //picture flip //此处为修改的代码,将这里的值改为1,底层则会将image做横向的flip, 相当于mirror.
ePostViewFmt, // postview format
mShotParam.mi4PostviewWidth, //postview width
mShotParam.mi4PostviewHeight, //postview height
0, //postview rotation
0, //postview flip
mShotParam.mu4ZoomRatio //zoom
);
......
}
主要将参数rShotParam里面的flip值改为1, 值为1表示底层将把image做横向的flip,若为0则不做.
(上述改动中的getOpenId()==1? 1:0只为测试使用,意为判断当前是否为前置camera, 若为前置camera, 则赋值为1)
请您注意:
在实际应用中, 请在Parameters中新增一个Flip参数, 并在app中通过Parameters传递Flip值到HAL层来通知底层做flip. (为避免影响CTS测试和三方应用, 请勿直接将上述的提到的flip值固定写为1.)
涉及修改的文件主要如下:
NormalShot.cpp (mediatek\platform\mt6589\hardware\camera\hal\adapter\scenario\shot\normalshot)
IShot.h (mediatek\platform\mt6589\hardware\camera\hal\adapter\inc\scenario\shot)
CameraParameters.cpp (frameworks\av\camera)
CameraParameters.h (frameworks\av\include\camera)
ParamsManager.update.cpp (mediatek\hardware\camera\common\paramsmgr\params)
MtkPhotoCamAdapter.Capture.cpp (mediatek\platform\mt6589\hardware\camera\hal\adapter\mtkphoto)
Camera.java(\frameworks\base\core\java\android\hardware\)
android 如何实现前置camera自拍镜像功能