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