微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > MT6595、MT6752前摄像头拍照实现镜像功能

MT6595、MT6752前摄像头拍照实现镜像功能

时间:10-02 整理:3721RD 点击:

MT6595、MT6752,前摄,对于normal、zsd、facebeauty、continuous、vss拍照,实现mirror。
解决办法:
以MT6595为例,MT6752请更正文件路径。
1、
normal shot.
alps\mediatek\platform\mt6595\hardware\mtkcam\v1\adapter\Scenario\Shot\NormalShot\NormalShot.cpp,bool

  1. NormalShot::
  2. onCmd_capture()
  3. {
  4. ...
  5. //加上以下code
  6. if(getOpenId() == 1 && bFlip){
  7. switch(mShotParam.mu4Transform){
  8. case eTransform_ROT_90:
  9. mShotParam.mu4Transform = eTransform_FLIP_V | eTransform_ROT_90;
  10. break;
  11. case eTransform_ROT_270:
  12. mShotParam.mu4Transform = eTransform_FLIP_H | eTransform_ROT_90;
  13. break;
  14. case eTransform_ROT_180:
  15. mShotParam.mu4Transform = eTransform_FLIP_V;
  16. break;
  17. default:
  18. mShotParam.mu4Transform = eTransform_FLIP_H;
  19. break;
  20. }

复制代码

(2)Face beauty,
alps\mediatek\platform\mt6595\hardware\mtkcam\v1\adapter\Scenario\Shot\FBShot\Facebeauty.cpp,MBOOL

  1. Mhal_facebeauty::
  2. createJpegImg(IImageBuffer const * rSrcImgBufInfo
  3. , NSCamShot::JpegParam const & rJpgPARM
  4. , MUINT32 const u4Transform
  5. , IImageBuffer const * rJpgImgBufInfo
  6. , MUINT32 & u4JpegSize)
  7. {
  8. ...

复制代码


pISIMager->setTransform(u4Transform);
替换为

  1. if(getOpenId() == 1 && bFlip){
  2. MUINT32 mu4Transform = 0;
  3. switch(u4Transform){
  4. case eTransform_ROT_90:
  5. mu4Transform = eTransform_FLIP_V | eTransform_ROT_90;
  6. break;
  7. case eTransform_ROT_270:
  8. mu4Transform = eTransform_FLIP_H | eTransform_ROT_90;
  9. break;
  10. case eTransform_ROT_180:
  11. mu4Transform = eTransform_FLIP_V;
  12. break;
  13. default:
  14. mu4Transform = eTransform_FLIP_H;
  15. break;
  16. }
  17. pISImager->setTransform(mu4Transform);
  18. }else
  19. pISImager->setTransform(u4Transform);

复制代码

(3)zsd shot,
alps\mediatek\platform\mt6595\hardware\mtkcam\v1\adapter\Scenario\Shot\CapBufShot\CapBufShot.cpp,bool

  1. CapBufShot::
  2. onCmd_capture()
  3. {
  4. ...
  5. //加上以下code
  6. if(getOpenId() == 1 && bFlip){
  7. switch(mShotParam.mu4Transform){
  8. case eTransform_ROT_90:
  9. mShotParam.mu4Transform = eTransform_FLIP_V | eTransform_ROT_90;
  10. break;
  11. case eTransform_ROT_270:
  12. mShotParam.mu4Transform = eTransform_FLIP_H | eTransform_ROT_90;
  13. break;
  14. case eTransform_ROT_180:
  15. mShotParam.mu4Transform = eTransform_FLIP_V;
  16. break;
  17. default:
  18. mShotParam.mu4Transform = eTransform_FLIP_H;
  19. break;
  20. }

复制代码

(4)continuousshot shot,
alps\mediatek\platform\mt6595\hardware\mtkcam\v1\adapter\Scenario\Shot\ContinuousShot\ContinuousShot.cpp,bool

  1. ContinuousShot::
  2. onCmd_capture()
  3. {
  4. ...
  5. //加上以下code
  6. if(getOpenId() == 1 && bFlip){
  7. switch(mShotParam.mu4Transform){
  8. case eTransform_ROT_90:
  9. mShotParam.mu4Transform = eTransform_FLIP_V | eTransform_ROT_90;
  10. break;
  11. case eTransform_ROT_270:
  12. mShotParam.mu4Transform = eTransform_FLIP_H | eTransform_ROT_90;
  13. break;
  14. case eTransform_ROT_180:
  15. mShotParam.mu4Transform = eTransform_FLIP_V;
  16. break;
  17. default:
  18. mShotParam.mu4Transform = eTransform_FLIP_H;
  19. break;
  20. }

复制代码

(5)vss,
alps\mediatek\platform\mt6752\hardware\mtkcam\v1\adapter\CamNode\RecBufSnapshotlNode.cpp
pISImager->setTransform(transform);
替换为

  1. if(getOpenId() == 1 && bFlip){
  2. MUINT32 mu4Transform = 0;
  3. switch(transform){
  4. case eTransform_ROT_90:
  5. mu4Transform = eTransform_FLIP_V | eTransform_ROT_90;
  6. break;

复制代码

2、
alps/mediatek/platform/mt6595/hardware/mtkcam/core/
SingleShot.cpp
BurstShot.cpp
MultiShot.cpp
pass2node.preview.cpp
pass2node.capture.cpp
搜索eTransform_ROT_90,

if( XX == eTransform_ROT_90 ||
XX == eTransform_ROT_270 )
替换为
if( XX& eTransform_ROT_90 ||
XX == eTransform_ROT_270)

3、
(1)alps/mediatek/platform/mt6595/hardware/mtkcam/core/iopipe/SImager/ImageTransform/ImageTransform.cpp
MBOOL

  1. ImageTransform::
  2. convertTransform(
  3. MUINT32 const u4Transform,
  4. MUINT32 & u4Rotation,
  5. MUINT32 & u4Flip
  6. )
  7. {
  8. ...

复制代码


  1. #define TransCase( trans, rot, flip ) \
  2. case trans: \
  3. u4Rotation = (rot); \
  4. u4Flip = (flip); \
  5. break;
  6. TransCase(0 , 0 , 0)
  7. TransCase(eTransform_FLIP_H , 180 , 1)
  8. TransCase(eTransform_FLIP_V , 0 , 1)
  9. TransCase(eTransform_ROT_90 , 90 , 0)
  10. TransCase(eTransform_ROT_180 , 180 , 0)
  11. TransCase(eTransform_ROT_270 , 270 , 0)
  12. default:
  13. MY_LOGE("not supported transform(0x%x)", u4Transform);
  14. u4Rotation = 0;
  15. u4Flip = 0;
  16. return MFALSE;
  17. break;
  18. #undef TransCase

复制代码

替换为

  1. #define TransCase( trans, rot, flip ) \
  2. case trans: \
  3. u4Rotation = (rot); \
  4. u4Flip = (flip); \
  5. break;
  6. TransCase(0 , 0 , 0)
  7. TransCase(eTransform_FLIP_H , 0 , 1)
  8. TransCase(eTransform_FLIP_V , 180 , 1)
  9. TransCase(eTransform_ROT_90 , 90 , 0)
  10. TransCase(eTransform_ROT_180 , 180 , 0)
  11. TransCase(eTransform_FLIP_H|eTransform_ROT_90 , 270 , 1)
  12. TransCase(eTransform_FLIP_V|eTransform_ROT_90 , 90 , 1)
  13. TransCase(eTransform_ROT_270 , 270 , 0)
  14. default:
  15. MY_LOGE("not supported transform(0x%x)", u4Transform);
  16. u4Rotation = 0;
  17. u4Flip = 0;
  18. return MFALSE;
  19. break;
  20. #undef TransCase

复制代码

(2)alps\mediatek\platform\mt6595\hardware\mtkcam\core\iopipe\PostProc\HalPipeWrapper.cpp,
将:
TransformMapping mTransformMapping[TRANSFORM_MAX]=
{
{0, NSImageio::NSISPIo::eImgRot_0, NSImageio::NSIspio::eImgFlip_OFF},
{eTransform_FLIP_H, NSImageio::NSIspio::eImgRot_0, NSImageio::NSIspio::eImgFlip_ON},
{eTransform_FLIP_V, NSImageio::NSIspio::eImgRot_0, NSImageio::NSIspio::eImgFlip_ON},
{eTransform_ROT_180,NSImageio::NSIspio::eImgRot_180,NSImageio::NSIspio::eImgFlip_OFF},
{eTransform_ROT_90, NSImageio::NSIspio::eImgRot_90, NSImageio::NSIspio::eImgFlip_OFF},
{0, NSImageio::NSIspio::eImgRot_0, NSImageio::NSIspio::eImgFlip_OFF},
{0, NSImageio::NSIspio::eImgRot_0, NSImageio::NSIspio::eImgFlip_OFF},
{eTransform_ROT_270,NSImageio::NSIspio::eImgRot_270,NSImageio::NSIspio::eImgFlip_OFF}
};
替换为
TransformMapping mTransformMapping[TRANSFORM_MAX]=
{
{0, NSImageio::NSIspio::eImgRot_0, NSImageio::NSIspio::eImgFlip_OFF},
{eTransform_FLIP_H, NSImageio::NSIspio::eImgRot_0, NSImageio::NSIspio::eImgFlip_ON},
{eTransform_FLIP_V, NSImageio::NSIspio::eImgRot_180, NSImageio::NSIspio::eImgFlip_ON},
{eTransform_ROT_180,NSImageio::NSIspio::eImgRot_180,NSImageio::NSIspio::eImgFlip_OFF},
{eTransform_ROT_90, NSImageio::NSIspio::eImgRot_90, NSImageio::NSIspio::eImgFlip_OFF},
{eTransform_FLIP_H|eTransform_ROT_90, NSImageio::NSIspio::eImgRot_270, NSImageio::NSIspio::eImgFlip_ON},
{eTransform_FLIP_V|eTransform_ROT_90, NSImageio::NSIspio::eImgRot_90, NSImageio::NSIspio::eImgFlip_ON},
{eTransform_ROT_270,NSImageio::NSIspio::eImgRot_270,NSImageio::NSIspio::eImgFlip_OFF}
};
[注意:]在实际应用中,请在Parameters中新增一个Flip参数,并在app中通过
Parameters传递Flip值到HAL层来通知底层做flip(&& bFlip). (为避免影响CTS测试和
三方应用,请勿直接根据前摄id设置flip.)
涉及修改的文件主要如下:
NormalShot.cpp (mediatek\platform\mt6595\hardware\mtkcam\v1\adapter\scenario\shot\normalshot)
IShot.h (mediatek\platform\mt6595\hardware\mtkcam\v1\adapter\inc\scenario\shot)
CAMERAParameters.cpp (php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks\av\camera)
CameraParameters.h (frameworks\av\include\camera)
ParamsManager.update.cpp (mediatek\hardware\mtkcam\v1\common\paramsmgr\params)
MtkDefaultCamAdapter.Capture.cpp
(mediatek\platform\mt6595\hardware\mtkcam\v1\adapter\MtkDefault)
Camera.java(\frameworks\base\core\java\android\hardware\)

进来学习学习

进来学习学习

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top