Man*_*ger 4 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);
Run Code Online (Sandbox Code Playgroud)
2.) 创建 MeteringRectangle 列表
meteringFocusRectangleList = new MeteringRectangle[]{new MeteringRectangle(0,0,500,500,1000)};
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
4.) 告诉相机开始曝光控制
camera2SupportHandler.mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CameraMetadata.CONTROL_AE_PRECAPTURE_TRIGGER_START);
Run Code Online (Sandbox Code Playgroud)
CONTROL_AE_STATE 始终在 CONTROL_AE_STATE_SEARCHING 中,但不使用配置的区域...
经过长时间的测试和开发,我找到了答案。
红色 = CAM1;绿色 = CAM2;如下图所示,蓝色矩形是 Cam1 可能的对焦/曝光区域的坐标。使用Cam2 API,首先要查询高度和宽度的最大值。请在此处找到更多信息。
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);
Run Code Online (Sandbox Code Playgroud)
所以这个配置适用于大多数安卓手机。不幸的是,它不适用于三星 S6/7。出于这个原因,我测试了他们的相机 SDK,可以在这里找到。
经过深入调查,我发现了配置字段“SCaptureRequest.METERING_MODE”。通过将其设置为“SCaptureRequest.METERING_MODE_MANUAL”的值,AE 区域也适用于三星手机。
我会尽快在github上添加一个例子。
| 归档时间: |
|
| 查看次数: |
3535 次 |
| 最近记录: |