android - Android Camera2 - FLASH_MODE_TORCH 在某些设备(例如三星 Galaxy S8)上无法与 CONTROL_MODE_OFF 一起使用
问题描述
我正在创建一个启用了 Torch 的连续捕获会话:
captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
captureBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, new Range(Framerate, Framerate));
captureBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, characteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE));
captureBuilder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_OFF);
captureBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH);
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, 100000L);
captureBuilder.set(CaptureRequest.SENSOR_FRAME_DURATION, 66666666L);
captureBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, 1000);
captureBuilder.addTarget(imageReader.getSurface());
mCaptureSession.setRepeatingRequest(captureBuilder.build(), callback, null);
它在许多设备上运行良好,但在其他一些设备上(例如三星 Galaxy S8),FLASH_MODE_TORCH
似乎触发了一些内部代码,然后覆盖我的CONTROL_MODE_OFF
.
我可以通过检查结果帧的传感器值来测试这一点:
CameraCaptureSession.CaptureCallback callback = new CameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
RealSensorSentivity = result.get(CaptureResult.SENSOR_SENSITIVITY);
super.onCaptureCompleted(session, request, result);
}
};
1000
我总是得到,而不是得到64
。
如果我删除FLASH_MODE_TORCH
参数,一切(除了手电筒)都可以正常工作。
我尝试将 Camera1 API 与此一起使用,但没有成功。还尝试使用较新的:
manager.setTorchMode(camId, true);
但这失败了,因为相机已经在使用中(奇怪)。
我还可以做些什么?
解决方案
结果发现主要问题是:
mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
设备对此有非常不同的设置。
我使用以下方法修复了它:
mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_MANUAL);
推荐阅读
- android - textView 中的 Ellipsize - 点与 textView 高度的中心对齐
- terraform - 在执行开始和结束时强制资源?
- node.js - (错误)使用串行端口时通过套接字向客户端发送多条消息
- javascript - 在混合移动应用程序中使用 VueJs 实现 google 地方
- html - 为什么十进制不预填充而整数呢?
- css - Vue datetimepicker - 月视图仅显示 1 行
- javascript - 无法导航到 href,url 只是丢失了参数
- cdi - 升级到 JSF 2.3 后,具有属性/注入的自定义转换器不再使用
- java - 如果库存为 10,如何限制增量按钮?
- opencv - 如何从 cuda::convolution 函数测量 fft 和 ifft 时间?