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自动闪存的答案但没有工作.
请帮忙.我不明白这是什么问题.
我骗了!我写了一个 \xe2\x80\x8dCaptureCallback并在onCaptureCompleted回调中,我得到AE_STATE并且如果AE_STATE等于CONTROL_AE_STATE_FLASH_REQUIRED然后我手动打开闪光灯。此解决方案不适用于某些设备,例如三星 J7 或三星 A5。在返回 null 的设备上,AE_STATE此解决方案将不起作用。半条面包总比没有面包好。:)
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};\nRun Code Online (Sandbox Code Playgroud)\n您应该将回调添加到setRepeatingRequest.
| 归档时间: |
|
| 查看次数: |
458 次 |
| 最近记录: |