在我的 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,但不使用配置的区域...
最佳答案
经过长时间的测试和开发,我找到了答案。
- 坐标系——Camera 1 API VS Camera 2 API
红色 = CAM1;绿色 = CAM2;如下图所示,蓝色矩形是 Cam1 可能的对焦/曝光区域的坐标。使用Cam2 API,首先要查询高度和宽度的最大值。请查找更多信息 here .
CONTROL_AF_MODE 和 CONTROL_AE_MODE 的初始值:参见上述问题。
设置 CONTROL_AE_REGIONS:参见上面的问题。
设置 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);
- ''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/