我有一个相机应用程序的代码,允许用户切换一些闪光灯选项:OFF
,ON
,TORCH
,AUTO
和{{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
答案 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
说,连续调用其中一个以上将取消前者。