首页 > 解决方案 > 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);

但这失败了,因为相机已经在使用中(奇怪)。

我还可以做些什么?

标签: androidtorchsamsung-mobileandroid-camera2

解决方案


结果发现主要问题是:

mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);

设备对此有非常不同的设置。

我使用以下方法修复了它:

mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_MANUAL);


推荐阅读