android中前后置camera,Android M camera 前置与后置(Front/Back)识别

本文详细探讨了在Android M中如何识别相机的前后置。主要通过CameraInfo类的成员变量来判断,同时介绍了6.0系统中通过cameraId识别的方法。在Camera2应用中,通过AndroidCameraAgentImpl的cameraId来判断前后置相机,当找不到后置相机时,会抛出"No back-facing camera found."的错误。文章还提到了相关源码的调用流程,为理解Android相机API提供了帮助。
摘要由CSDN通过智能技术生成

0,Camera的前置与后置的确定,比较主流的是通过CameraInfo这个类里面的变量来指示的。CameraInfo是Camera.java(frameworks/base/core/java/android/hardware/)的内部类,里面有变量来标志前置与后置:

df9e29ba0ee6b80c955ab55cc450c70c.png

很简单,与screen face front是前置,相反为后置。

APP可以通过Camera这个类来处理获取back/front,但6.0的做法除了CameraInfo这个类之外,还有另外一种,即通过cameraId。这里走一下调用流程,为Camera Hal层的porting提供些思路。

1,先介绍第一种:通过CameraInfo这个类;

在camera2 apk 的 settings界面显示为back camera:

e97cb3f6fcd0292cf147b10e59611522.png

以下来自packages/app/Camera2/

=>”Back camera photo”字符串来自:strings.xml

Back camera photo

=>camera_preferences.xml

b90ed327d8f2002c09414afcb04e3845.png

=>这个ListPreference对应的key为:pref_camera_picturesize_back_key

Camera2/src/com/android/camera/settings/Keys.java:39:    public static final String KEY_PICTURE_SIZE_BACK= “pref_camera_picturesize_back_key”;

=>这个KEY_PICTURE_SIZE_BACK在CameraSettingsActivity.java有使用,分别是用于显示这个list,而其中下面个函数是决定Back/Front

7667555fdbc1c92ffb81b910282062c8.png

=>mPictureSizes.backCameraSizes.isEmpty()这里判断Back/Front

b86cdbc39572b873ec330a06a070489b.png

=>computeSizesForCamera()@PictureSizeLoader.java

int cameraId = SettingsUtil.getCameraId(mCameraDeviceInfo, facingSelector);

mCameraDeviceInfo就包含了前后置的信息

=>mCameraDeviceInfo在PictureSizeLoader类实例化的时候赋值

a4a34b70a3a5d3c810c3aa2c57fd7fae.png

=>

以下来自fremaworks/ex/camera2/portability/src/com/android/ex/camera2/portability/

getAndroidCameraAgent()@CameraAgentFactory.java

sAndroidCameraAgent = new AndroidCameraAgentImpl();

=>AndroidCameraAgentImpl.java的getCameraDeviceInfo()函数如下:

5e75c9fb3d3743c24020d2463af19963.png

=》

public static AndroidCameraDeviceInfo create() {

Camera.getCameraInf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值