Android Camera2 API - 设置 AE 区域不起作用

标签 android android-camera android-camera2

在我的 Android Camera2 API 项目中,我想为我的曝光计算设置一个区域。不幸的是它不起作用。另一方面,焦点区域工作没有任何问题。

设备:三星 S7/Nexus 5

1.) CONTROL_AF_MODE 和 CONTROL_AE_MODE 的初始值

mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);

2.) 创建 MeteringRectangle 列表

meteringFocusRectangleList = new MeteringRectangle[]{new MeteringRectangle(0,0,500,500,1000)};

3.) 检查设备是否支持并设置 CONTROL_AE_REGIONS(与 CONTROL_AF_REGIONS 相同)

if (camera2SupportHandler.cameraCharacteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AE) > 0) {
      camera2SupportHandler.mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_REGIONS, meteringFocusRectangleList);
}

4.) 告诉相机开始曝光控制

camera2SupportHandler.mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CameraMetadata.CONTROL_AE_PRECAPTURE_TRIGGER_START);

CONTROL_AE_STATE 始终处于 CONTROL_AE_STATE_SEARCHING,但不使用配置的区域...

最佳答案

经过长时间的测试和开发,我找到了答案。

  1. 坐标系——Camera 1 API VS Camera 2 API

红色 = CAM1;绿色 = CAM2;如下图所示,蓝色矩形是 Cam1 可能的对焦/曝光区域的坐标。使用Cam2 API,首先要查询高度和宽度的最大值。请查找更多信息 here .

enter image description here

  1. CONTROL_AF_MODE 和 CONTROL_AE_MODE 的初始值:参见上述问题。

  2. 设置 CONTROL_AE_REGIONS:参见上面的问题。

  3. 设置 CONTROL_AE_PRECAPTURE_TRIGGER。

//这是告诉相机开始AE控制的方法

                CaptureRequest captureRequest = camera2SupportHandler.mPreviewRequestBuilder.build();
              camera2SupportHandler.mCaptureSession.setRepeatingRequest(captureRequest, captureCallbackListener, camera2SupportHandler.mBackgroundHandler);
                camera2SupportHandler.mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START);
                camera2SupportHandler.mCaptureSession.capture(captureRequest, captureCallbackListener, camera2SupportHandler.mBackgroundHandler);
  1. ''captureCallbackListener'' 提供 AE 控制的反馈(当然也用于 AF 控制)

So this configuration works for the most Android phones. Unfortunately it doesn't work for the Samsung S6/7. For this reason I've tested their Camera SDK, which can be found here.

经过深入调查,我发现配置字段“SCaptureRequest.METERING_MODE”。通过将其设置为“SCaptureRequest.METERING_MODE_MANUAL”的值,AE 区域也适用于三星手机。

我将在 github 中添加一个示例尽快。

关于Android Camera2 API - 设置 AE 区域不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42299668/

相关文章:

android - 使用 Android camera2 获取全屏预览

android - 自定义相机 textureView 未调整为横向模式

android - 如何访问不是init函数中成员变量的构造函数参数?

java - 如何动态更改抽屉导航的标题布局背景颜色?

android - 我应该在我的 iOS 或 Android 应用程序中存储硬编码的加密 key 吗

Android Camera2 管道 : How do I encode h. 264 个单元使用来自输入 Surface 的 MediaCodec?

android - 相机预览 onPictureTaken 在 android 中返回错误数据

android - 发布版本上没有类定义错误?

某些设备中的 Android 自定义相机问题

android - 在opencv中使用javacamera2view