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

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

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

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

Подробнее о режимах фотосъемки…

Принцип работы

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

Требования

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

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

Нулевая задержка затвора доступна только для фотосъемки. Его нельзя включить для видеозаписи или при использовании расширений камеры.

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