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\)

时间: 2024-10-12 13:41:49

android 如何实现前置camera自拍镜像功能的相关文章

玩转Android Camera开发(一):Surfaceview预览Camera,基础拍照功能完整demo

杂家前文是在2012年的除夕之夜仓促完成,后来很多人指出了一些问题,琐事缠身一直没有进行升级.后来随着我自己的使用,越来越发现不出个升级版的demo是不行了.有时候就连我自己用这个demo测一些性能.功能点,用着都不顺手.当初代码是在linux下写的,弄到windows里下全是乱码.还要自己改几分钟才能改好.另外,很多人说不能正常预览,原因是我在布局里把Surfaceview的尺寸写死了.再有就是initCamera()的时候设参数失败,直接黑屏退出,原因也是我把预览尺寸和照片尺寸写死了.再有就

Camera实现照相功能的关键步骤

Camera类用于设置图像采集相关设置,开始/停止预览,拍照,检索编码视频帧.该类是 Camera 服务的客户端,管理真实的 camera 硬件. 要访问camera设备,必须在 Android Manifest中声明 CAMERA 权限.还要保证包含 <uses-feature> manifest 元素声明你的应用程序使用的相机功能.例如,如果是使用 camera 和 auto-focus(自动对焦)功能,你的 Manifest 中应该包含以下: <uses-permission an

Android源码笔记&mdash;&mdash;Camera系统架构

Camera的架构与Android系统的整体架构保持一致,如下图所示,本文主要从以下四个方面对其进行说明. Framework:Camera.java Android Runtime:android_hardware_Camera.cpp Library:Camera Client和Camera Service HAL:CameraHardwareInterface 一.Framework:Camera.java Camera是应用层软件直接使用的类,涵盖了启动.预览.拍摄及关闭等操作摄像头的全

Android 4.4 Kitkat 使能 USB adb 功能

背景 在 Linux-3.8 以后,Android 的内核分支,便去掉了 f_adb,改使用 USB function FS,在用户空间实现 USB adb 功能.这篇文章根据原作者的 Google+ 文章,在 Atmel sama5 开发板上做了测试,将步骤记录如下,供需要使用的读者参考,你也可以查看作者原文:https://plus.google.com/111524780435806926688/posts/AaEccFjKNHE 在 Linux-3.10 上使能 USB ADB 编译内核

Eclipse for android 实现代码自动提示智能提示功能

Eclipse for android 实现代码自动提示智能提示功能,介绍 Eclipse for android 编辑器中实现两种主要文件 java 与 xml 代码自动提示功能,解决 eclipse 代码提示失效.eclipse 不能自动提示.eclipse 没有代码提示的问题. 1.设置 java 文件的代码提示功能 打开 Eclipse 依次选择Window > Preferences > Java > Editor - Content Assist > Auto acti

Android 实现用户列表信息滑动删除功能和选择删除功能

在项目开发过程中,常常需要对用户列表的信息进行删除的操作.Android中常用的删除操作方式有两种 ,一种就是类似微信的滑动出现删除按钮方式,还有一种是通过CheckBox进行选择,然后通过按钮进行删除的方式.本来的实例集成上述的两种操作方式来实现用户列表删除的效果. 设计思路:在适配器类MyAdapter一个滑动删除按钮显示或隐藏的Map,一个用于CheckBox是否选中的Map和一个与MainAcitivyt进行数据交互的接口ContentsDeleteListener,同时该接口包含两个方

使用SAE的Storage来为Android应用提供版本更新的检查和下载功能

因为Android的市场比较分散,有时候上传和审核都麻烦.为了让用户能第一时间获得更新,接下来要实现版本检查和下载功能.先在Storage里放入应用的APK.一个json的文档或者xml文件,因为我比较喜欢用json,所以接下来就用json文档.写json文档的时候记得不要用记事本,要用Notepad++之类的文本编辑器来写,然后保存成UTF-8无BOM的格式.不然android4.0以下版本解析会有问题.更新数据的格式:{      "version": 10,      "

android传感器;摇一摇抽签功能

package com.kane.sensortest; import java.util.Random; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.ap

Android 4.4 KitKat 支持 u 盘功能

Android U 盘功能实现和分析 u 盘功能实现结果: u 盘会当成 usb storage 在 Settings Storage 里面显示. 准备工作 内核需支持 usb host,需支持 FUSE 文件系统,在 FS 选项里面配置即可(CONFIG_FUSE_FS=y). Android 的配置 配置 init.<board>.rc mkdir /storage/udisk0 0000 system system mkdir /mnt/media_rw/udisk0 0700 medi