Android 15 presenta el modo de exposición automática (AE) con aumento de poca luz, un nuevo modo de exposición automática disponible para Camera 2 y la extensión de cámara del modo noche. El modo de AE con mejora de poca luz ajusta automáticamente el brillo de la transmisión de vista previa en condiciones de poca luz. Esto es diferente de la forma en que la extensión de la cámara del modo nocturno crea imágenes fijas, ya que el modo nocturno combina una ráfaga de fotos para crear una sola imagen mejorada. Si bien el modo nocturno funciona muy bien para crear una imagen fija, no puede crear una transmisión continua de fotogramas, pero el modo de AE con mejora de poca luz sí puede hacerlo. Por lo tanto, el modo de AE con mejora de poca luz habilita nuevas funciones de la cámara, como las siguientes:
- Proporciona una vista previa de imagen mejorada para que los usuarios puedan encuadrar mejor sus fotos con poca luz.
- Escanear códigos QR con poca luz
Si habilitas el modo de AE con mejora de poca luz, se activa automáticamente cuando hay un nivel de luz bajo y se desactiva cuando hay más luz.
Las apps pueden grabar desde la transmisión de vista previa en condiciones de poca luz para guardar un video más brillante.
Puedes usar el modo de AE con mejora de poca luz en Camera2 o a través de extensiones de cámara. En este documento, se explica cómo usar el modo de AE con poca luz con Camera2. También puedes usar el modo de AE con amplificación de poca luz con la extensión de cámara del modo nocturno si el dispositivo es compatible.
Cómo verificar la disponibilidad
Antes de usar el modo de AE con mejora de baja luminosidad, verifica que sea compatible con el dispositivo.
Si está disponible, el modo de AE con mejora de poca luz es uno de los modos de exposición que se enumeran en camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
. (el modo de mejora de poca luz tiene su propio parámetro de configuración de exposición automática, ya que otros parámetros de configuración de exposición automática no son compatibles con el brillo de vista previa que realiza el modo de AE de mejora de poca luz).
Por lo tanto, para comprobar si el modo de AE con mejora de poca luz está disponible, llama a CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)
y verifica si los modos que se muestran incluyen ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
:
Kotlin
val characteristics = cameraManager.getCameraCharacteristics(cameraId) val autoExposureModes = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)!! val lowLightBoostSupported = autoExposureModes.contains( CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY) if (lowLightBoostSupported) { // Enable Low Light Boost AE Mode (next section) } else { // Proceed without Low Light Boost AE Mode }
Java
CameraCharacteristics characteristics = mCameraManager.getCameraCharacteristics(cameraId); int[] autoExposureModes = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES); boolean lowLightBoostSupported = autoExposureModes.contains( CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY); if (lowLightBoostSupported) { // Enable Low Light Boost AE Mode (next section) } else { // Proceed without Low Light Boost AE Mode }
Cómo habilitar el modo de AE con mejora de poca luz
Para habilitar el modo de AE de mejora de poca luz en una sesión de Camera2, establece CaptureRequest.CONTROL_AE_MODE
en ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
. Después de hacerlo, deberás confirmar que se activó el modo de AE con mejora de poca luz. Para ello, marca el campo CaptureResult.CONTROL_AE_MODE
. Debes verificarlo porque el aumento de la luz baja no es compatible con todas las configuraciones de la cámara. Por ejemplo, la grabación de alta velocidad no admite el modo de AE de aumento de poca luz debido a las consideraciones de FPS. Si el modo de AE con mejora de poca luz no está activado, es posible que debas cambiar la configuración de la cámara y volver a intentarlo.
Kotlin
val captureRequestBuilder = camera.createCaptureRequest( CameraDevice.TEMPLATE_PREVIEW) if (isLowLightBoostAvailable(cameraId)) { captureRequestBuilder.set( CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY ) } // other capture request params session.setRepeatingRequest( captureRequestBuilder.build(), object : CaptureCallback() { @Override fun onCaptureCompleted(session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult) { // verify Low Light Boost AE Mode AE mode set successfully result.get(CaptureResult.CONTROL_AE_MODE) == CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY } }, cameraHandler )
Java
CaptureRequest.Builder captureRequestBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); if (isLowLightBoostAvailable(cameraId)) { captureRequestBuilder.set( CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY); } // other capture request params mSession.setRepeatingRequest( captureRequestBuilder.build(), new CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { // verify Low Light Boost AE Mode AE mode set successfully result.get(CaptureResult.CONTROL_AE_MODE) == CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY; } }, mCameraHandler );
Monitoriza el modo de AE de mejora con poca luz
El modo de AE con mejora de poca luz aclara la transmisión de vista previa en condiciones de poca luz y no tiene ningún efecto si el entorno ya es lo suficientemente luminoso para la captura normal. Para confirmar si el modo de AE de aumento de poca luz está activo actualmente, verifica el campo CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
.
Si activaste el modo de AE con refuerzo de poca luz y está activo actualmente, el campo se establece en CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE
.
Luego, puedes mostrar un ícono de luna o algún otro indicador de que la vista previa se está aclarando.
Kotlin
session.setRepeatingRequest( captureRequestBuilder.build(), object : CaptureCallback() { @Override fun onCaptureCompleted(session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult) { // check if Low Light Boost AE Mode is active or inactive if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) == CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) { // Low Light Boost AE Mode state is active // Show Moon Icon } else { // Low Light Boost AE Mode state is inactive or AE mode is not set // to Low Light Boost AE Mode // Hide Moon Icon } } }, cameraHandler )
Java
mSession.setRepeatingRequest( captureRequestBuilder.build(), new CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { // check if Low Light Boost AE Mode is active or inactive if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) == CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) { // Low Light Boost AE Mode state is active // Show Moon Icon } else { // Low Light Boost AE Mode state is inactive or AE mode is not set // to Low Light Boost AE Mode // Hide Moon Icon } } }, mCameraHandler );