Начиная с версии CameraX 1.2 , в качестве режима съемки доступна функция нулевой задержки затвора. Включите нулевую задержку затвора, чтобы значительно сократить задержку по сравнению с режимом съемки по умолчанию и никогда не пропустить кадр.
Включить задержку при нулевой затворе
Чтобы включить задержку нулевой затвора, передайте CAPTURE_MODE_ZERO_SHOT_LAG
в ImageCapture.Builder.setCaptureMode()
. В случае неудачи setCaptureMode()
возвращается к CAPTURE_MODE_MINIMIZE_LATENCY
.
Дополнительную информацию о режимах захвата см. в руководстве по захвату изображений .
Как это работает
Функция Zero-Shutter Lag использует кольцевой буфер, в котором хранятся три последних кадра захвата. Когда пользователь нажимает кнопку захвата, CameraX вызывает takePicture()
, а кольцевой буфер извлекает захваченный кадр с отметкой времени, наиболее близкой к отметке времени нажатия кнопки. Затем CameraX повторно обрабатывает сеанс захвата, чтобы создать изображение из этого кадра, которое сохраняется на диск в формате JPEG.
Предварительные условия
Прежде чем включить нулевую задержку затвора, используйте isZslSupported()
чтобы определить, соответствует ли ваше устройство следующим требованиям:
- Ориентирован на Android 6.0+ (уровень API 23 и выше).
- Поддерживает
PRIVATE
повторную обработку .
Для устройств, которые не соответствуют минимальным требованиям, CameraX возвращается к CAPTURE_MODE_MINIMIZE_LATENCY
.
Нулевая задержка затвора доступна только для захвата изображения . Вы не можете включить его для захвата видео или с расширениями камеры .
Наконец, поскольку использование вспышки приводит к большей задержке, задержка нулевой затвора не работает, когда вспышка включена или в режиме АВТО. Для получения дополнительной информации о настройке режима вспышки см. setFlashMode()
.