Camera 2 API视频录制 - 自动闪光无法正常工作

iMD*_*oid 9 camera android android-camera2

我已经实现了一个使用camera2 API录制视频的自定义相机.可以选择将闪光灯设置为"开","关"和"自动".将闪光灯设置为"自动"不起作用,而其他选项工作正常.

这是代码:

    private void updateFlash() {
            Log.e(TAG, "Flash = " + currentFlash);
            switch (currentFlash) {
                case Constants.FLASH_OFF:
                    previewRequestBuilder.set(CaptureRequest.FLASH_MODE,
                            CaptureRequest.FLASH_MODE_OFF);
                    break;
                case Constants.FLASH_ON:
                    previewRequestBuilder.set(CaptureRequest.FLASH_MODE,
                            CaptureRequest.FLASH_MODE_TORCH);
                    break;
                case Constants.FLASH_TORCH:
                    previewRequestBuilder.set(CaptureRequest.FLASH_MODE,
                            CaptureRequest.FLASH_MODE_TORCH);
                    break;
                case Constants.FLASH_AUTO:
                    previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);

                    break;
            }
 cameraCaptureSession.setRepeatingRequest(previewRequestBuilder.build(),
                        null, null);
}
Run Code Online (Sandbox Code Playgroud)

我已经google了很多,并尝试了几乎所有stackoverflow自动闪存的答案但没有工作.

请帮忙.我不明白这是什么问题.

Ham*_*uhi 0

我骗了!我写了一个 \xe2\x80\x8dCaptureCallback并在onCaptureCompleted回调中,我得到AE_STATE并且如果AE_STATE等于CONTROL_AE_STATE_FLASH_REQUIRED然后我手动打开闪光灯。此解决方案不适用于某些设备,例如三星 J7 或三星 A5。在返回 null 的设备上,AE_STATE此解决方案将不起作用。半条面包总比没有面包好。:)

\n
 private CameraCaptureSession.CaptureCallback captureCallback\n        = new CameraCaptureSession.CaptureCallback() {\n\n    @Override\n    public void onCaptureCompleted(@NonNull CameraCaptureSession session,\n                                   @NonNull CaptureRequest request,\n                                   @NonNull TotalCaptureResult result) {\n        if (previewFlashMode == FLASH_AUTO) {\n            Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);\n            if (aeState != null) {\n                if (currentPreviewFlashMode != FLASH_ON && aeState == CaptureResult.CONTROL_AE_STATE_FLASH_REQUIRED) {\n                    setFlashMode(captureRequestBuilder, FLASH_ON);\n                    setRepeatingRequestAfterSetFlash();\n                }\n            }\n        }\n\n    }\n\n};\n
Run Code Online (Sandbox Code Playgroud)\n

您应该将回调添加到setRepeatingRequest.

\n