Camera2 API无法关闭TORCH模式

时间:2018-10-26 07:14:03

标签: android android-camera2

我有一个相机应用程序的代码,允许用户切换一些闪光灯选项:OFFONTORCHAUTO和{{1} }。当用户交换模式时,我有以下switch语句:

RED_EYE

单击按钮只会遍历这些内容,因此一切正常,直到用户进入when (flash) { Flash.OFF -> { builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON) builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF) } Flash.ON -> { builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH) builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF) } Flash.TORCH -> { builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON) builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH) } Flash.AUTO -> { builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH) builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF) } Flash.RED_EYE -> { builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE) builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF) } } 。手电筒打开,一切都很好,然后用户再单击一次以切换到TORCH,但该灯没有熄灭。只有当用户单击足够的次数到达AUTO时,指示灯才会熄灭。

我是从https://github.com/google/cameraview/blob/master/library/src/main/api21/com/google/android/cameraview/Camera2.java#L544那里得到的,顺便说一下,它也以同样的方式破坏了。

我还在https://github.com/google/cameraview/issues/259创建了一个问题,以帮助您了解此问题。

在退出OFF之前,我是否必须关闭闪光灯启动新的捕获会话?有更好的方法吗?

更新:

根据建议,我添加了TORCH并获得了以下结果,尽管我不太了解它们。这些是在我开始第一个捕获会话时出现的,并且在切换闪光模式时永远不会改变。

TorchCallback

1 个答案:

答案 0 :(得分:0)

我已经找到了解决方法,但是还没有找到解决方法。我已经更新了方法,在switch语句之前包含以下代码段

if (builder.get(CaptureRequest.FLASH_MODE) == CaptureRequest.FLASH_MODE_TORCH &&
        flash != Flash.TORCH) {
    builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON)
    builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF)
    captureSession.capture(builder.build(), null, null)
}

如果当前构建者的闪光模式为手电筒而新闪光器不是,则将闪光模式设置为关闭。我们运行capture是因为它优先于setRepeatingRequest。另外,setRepeatingRequest说,连续调用其中一个以上将取消前者。