Reduce la latencia con el retraso sin obturador

A partir de CameraX 1.2, el retraso sin obturador está disponible como modo de captura. Habilita el retraso sin obturador para reducir significativamente la latencia en comparación con el modo de captura predeterminado, de modo que nunca te pierdas la foto.

Cómo habilitar el retraso sin obturador

Para habilitar el retraso sin obturador, pasa CAPTURE_MODE_ZERO_SHOT_LAG a ImageCapture.Builder.setCaptureMode(). Si no funciona, setCaptureMode() regresa a CAPTURE_MODE_MINIMIZE_LATENCY.

Para obtener más información sobre los modos de captura, consulta la Guía de captura de imágenes.

Cómo funciona

El retraso sin obturador utiliza un búfer de anillo que almacena los tres marcos de captura más recientes. Cuando el usuario presiona el botón de captura, CameraX invoca a takePicture(), y el búfer de anillo recupera el fotograma capturado con la marca de tiempo más cercana a la de presionar el botón. CameraX luego reprocesa la sesión de captura para generar una imagen a partir de ese fotograma, que se guarda en el disco en formato JPEG.

Requisitos previos

Antes de habilitar el retraso sin obturador, usa isZslSupported() para determinar si el dispositivo cumple con los siguientes requisitos:

  • Se orienta a Android 6.0 y versiones posteriores (nivel de API 23 y versiones posteriores).
  • Admite el reprocesamiento de PRIVATE.

En el caso de los dispositivos que no cumplen con los requisitos mínimos, CameraX recurre a CAPTURE_MODE_MINIMIZE_LATENCY.

El retraso sin obturador solo está disponible para la captura de imágenes. No puedes habilitarlo para la captura de video ni con las extensiones de cámara.

Por último, debido a que el uso de flash da como resultado una mayor latencia, el retraso sin obturador no funciona cuando el flash está ACTIVADO ni en modo AUTOMÁTICO. Para obtener más información sobre cómo configurar el modo de flash, consulta setFlashMode().