Mejora con poca luz

Android 15 presenta el aumento en condiciones de poca luz, un nuevo modo de exposición automática disponible para la Cámara 2 y la extensión de la cámara del modo nocturno. Aumento con poca luz Ajusta automáticamente el brillo de la transmisión de la vista previa con poca luz. condiciones. Esto es diferente de cómo la extensión de cámara del modo nocturno crea imágenes fijas, porque el modo nocturno combina una ráfaga de fotos para crear una con una imagen mejorada. Si bien el modo nocturno funciona muy bien para crear una imagen estática, no puede crear un flujo continuo de fotogramas, pero el aumento con poca luz sí puede hacerlo. Por lo tanto, La potencia para poca luz habilita nuevas funciones de la cámara, como las siguientes:

  • Proporcionar una vista previa mejorada de la imagen, para que los usuarios puedan enmarcar mejor sus fotos con poca luz.
  • Escanea códigos QR con poca luz.

Si habilitas la función Refuerzo con poca luz, se activará automáticamente cuando haya poca luz nivel de luz y se apaga cuando hay más luz.

Las apps pueden grabar fuera de la transmisión de vista previa en condiciones de poca luz para guardar una video iluminado.

Puedes usar la función Potenciación con poca luz en Cámara2 o mediante extensiones de cámara. En este documento, se explica cómo usar la amplificación con poca luz con Camera2. También puedes usar Amplificación por poca luz con la extensión de la cámara en Modo nocturno si es compatible con dispositivo.

Comprueba la disponibilidad

Antes de usar la función Potenciación con poca luz, comprueba que sea compatible con el dispositivo. Si es disponible, el aumento de luz tenue es uno de los modos de exposición que se enumeran en camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES (Luz baja Potenciador es 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 la vista previa que se realiza con el aumento con poca luz).

Por lo tanto, para comprobar si la función Potenciación con poca luz está disponible, llama CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) y verifica si los modos mostrados 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 (next section)
} else {
  // Proceed without Low Light Boost
}

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 (next section)
} else {
  // Proceed without Low Light Boost
}

Habilitar realce de poca luz

Para habilitar la potencia con poca luz en una sesión de Camera2, configura CaptureRequest.CONTROL_AE_MODE a ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY Después de hacerlo, deberás confirma que se haya activado la función Poca luz. Para ello, revisa el CaptureResult.CONTROL_AE_MODE. Debes comprobarlo porque Poca luz Boost no es compatible con todas las configuraciones de la cámara. Por ejemplo, alta velocidad la grabación no es compatible con el aumento de poca luz debido a consideraciones de FPS. Si Potenciación por poca luz no activada, es posible que debas cambiar la cámara configuración y vuelve 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 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 set successfully
      result.get(CaptureResult.CONTROL_AE_MODE) ==
          CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY;
    }
  },
  mCameraHandler
);

Supervisa el aumento de poca luz

La mejora con poca luz ilumina la transmisión de vista previa en condiciones de poca luz. no tiene ningún efecto si el entorno ya es lo suficientemente luminoso para para cada captura. Para confirmar si la función Refuerzo por poca luz está activo, revisa lo siguiente: el campo CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE Si convertiste Amplificación con poca luz activado y está activo en este momento, el campo se establece en CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE Luego, puedes mostrar el ícono de luna o alguna otra indicación de que se ilumina la vista previa.

Kotlin

session.setRepeatingRequest(
  captureRequestBuilder.build(),
  object : CaptureCallback() {
    @Override
    fun onCaptureCompleted(session: CameraCaptureSession,
        request: CaptureRequest, result: TotalCaptureResult) {
      // check if Low Light Boost is active or inactive
      if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) ==
        CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) {
        // Low Light Boost state is active
        // Show Moon Icon
      } else {
        // Low Light Boost state is inactive or AE mode is not set
        // to Low Light Boost
        // 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 is active or inactive
      if (result.get(CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE) ==
        CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE) {
        // Low Light Boost state is active
        // Show Moon Icon
      } else {
        // Low Light Boost state is inactive or AE mode is not set
        // to Low Light Boost
        // Hide Moon Icon
      }
    }
  },
  mCameraHandler
);