Уменьшите задержку с помощью функции Zero-Shutter Lag

Начиная с версии CameraX 1.2 , в качестве режима съемки доступна функция нулевой задержки затвора. Включите нулевую задержку затвора, чтобы значительно сократить задержку по сравнению с режимом съемки по умолчанию и никогда не пропустить кадр.

Включить задержку при нулевой затворе

Чтобы включить задержку нулевой затвора, передайте CAPTURE_MODE_ZERO_SHOT_LAG в ImageCapture.Builder.setCaptureMode() . В случае неудачи setCaptureMode() возвращается к CAPTURE_MODE_MINIMIZE_LATENCY .

Дополнительную информацию о режимах захвата см. в руководстве по захвату изображений .

Как это работает

Функция Zero-Shutter Lag использует кольцевой буфер, в котором хранятся три последних кадра захвата. Когда пользователь нажимает кнопку захвата, CameraX вызывает takePicture() , а кольцевой буфер извлекает захваченный кадр с отметкой времени, наиболее близкой к отметке времени нажатия кнопки. Затем CameraX повторно обрабатывает сеанс захвата, чтобы создать изображение из этого кадра, которое сохраняется на диск в формате JPEG.

Предварительные условия

Прежде чем включить нулевую задержку затвора, используйте isZslSupported() чтобы определить, соответствует ли ваше устройство следующим требованиям:

Для устройств, которые не соответствуют минимальным требованиям, CameraX возвращается к CAPTURE_MODE_MINIMIZE_LATENCY .

Нулевая задержка затвора доступна только для захвата изображения . Вы не можете включить его для захвата видео или с расширениями камеры .

Наконец, поскольку использование вспышки приводит к большей задержке, задержка нулевой затвора не работает, когда вспышка включена или в режиме АВТО. Для получения дополнительной информации о настройке режима вспышки см. setFlashMode() .