Mode d'exposition automatique avec amplification de la luminosité faible

Android 15 introduit le mode d'exposition automatique (AE) avec amplification de la luminosité, un nouveau mode d'exposition automatique disponible à la fois pour Camera 2 et l'extension de l'appareil photo en mode Nuit. Le mode AE avec amplification de la luminosité ajuste automatiquement la luminosité du flux d'aperçu en cas de faible luminosité. Cela diffère de la façon dont l'extension d'appareil photo du mode Nuit crée des images fixes, car le mode Nuit combine une rafale de photos pour créer une seule image améliorée. Bien que le mode Nuit soit très efficace pour créer une image fixe, il ne peut pas créer un flux continu d'images, contrairement au mode AE avec boost en basse lumière. Ainsi, le mode AE avec amplification de la luminosité vous permet d'accéder à de nouvelles fonctionnalités de l'appareil photo, comme les suivantes:

  • Fournit un aperçu amélioré des images afin que les utilisateurs puissent mieux cadrer leurs photos prises en basse luminosité.
  • Scanner des codes QR dans des conditions de faible luminosité

Si vous activez le mode AE avec boost en basse luminosité, il s'active automatiquement lorsque le niveau de luminosité est faible et se désactive lorsque la luminosité est plus élevée.

Les applications peuvent enregistrer le flux d'aperçu par faible luminosité dans le but d'éclaircir les vidéos.

Vous pouvez utiliser le mode AE avec amplification de la luminosité dans Camera2 ou via les extensions de l'appareil photo. Ce document explique comment utiliser le mode AE avec boost en basse luminosité avec Camera2. Vous pouvez également utiliser le mode AE avec amplification de la luminosité avec l'extension de l'appareil photo du mode Nuit si l'appareil est compatible.

Vérifier la disponibilité

Avant d'utiliser le mode AE avec boost faible luminosité, vérifiez qu'il est compatible avec l'appareil. Si elle est disponible, l'option "Mode AE avec amplification de la luminosité faible" est l'un des modes d'exposition listés dans camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES. (L'amplification de la luminosité est un paramètre d'exposition automatique, car les autres paramètres d'exposition automatique ne sont pas compatibles avec l'éclaircissement de l'aperçu effectué par le mode AE d'amplification de la luminosité.)

Pour vérifier si le mode AE avec boost en basse lumière est disponible, appelez CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) et vérifiez si les modes renvoyés incluent 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
}

Activer le mode AE Boost faible luminosité

Pour activer le mode AE avec amplification de la luminosité dans une session Camera2, définissez CaptureRequest.CONTROL_AE_MODE sur ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Ensuite, vous devez vérifier que le mode AE avec boost en basse luminosité a été activé. Pour ce faire, cochez le champ CaptureResult.CONTROL_AE_MODE. Vous devez le vérifier, car l'amplification de la luminosité n'est pas compatible avec toutes les configurations de caméra. Par exemple, l'enregistrement haute vitesse n'est pas compatible avec le mode AE Boost en basse lumière, en raison de considérations liées aux FPS. Si le mode AE avec boost en basse lumière n'est pas activé, vous devrez peut-être modifier la configuration de l'appareil photo et réessayer.

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
);

Surveiller le mode AE avec amplification luminosité faible

Le mode AE Boost en basse luminosité éclaircit le flux d'aperçu par faible luminosité et n'a aucun effet si l'environnement est déjà suffisamment lumineux pour la capture normale. Vous pouvez vérifier si le mode AE Boost en basse lumière est actuellement actif en consultant le champ CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. Si vous avez activé le mode AE avec boost faible luminosité et qu'il est actuellement actif, le champ est défini sur CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE. Vous pouvez ensuite afficher une icône en forme de lune ou un autre indicateur indiquant que l'aperçu est éclairci.

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
);