У меня есть код для приложения камеры, позволяющий пользователю переключать некоторые параметры вспышки: OFF
, ON
, TORCH
, AUTO
и RED_EYE
.Когда пользователь меняет режим, у меня появляется следующий оператор switch:
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
, но свет не гаснет.Только когда пользователь щелкнет достаточное количество раз, чтобы добраться до OFF
, свет погаснет.
Я получил это от 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, чтобы помочь улучшить видимость этой проблемы.
Нужно ли начинать новый сеанс захвата с отключенной вспышкой, прежде чем выключить TORCH
?Есть ли лучший способ?
ОБНОВЛЕНИЕ:
Как и предполагалось, я добавил TorchCallback
и получил следующие результаты, хотя я не могу понять их.Это происходит, когда я запускаю первый сеанс захвата, и никогда не меняется при переключении режима вспышки.
onTorchModeChanged(0, false)
onTorchModeChanged(0, false)
onTorchModeUnavailable(0)
onTorchModeUnavailable(0)