Amplification luminosité faible

Android 15 introduit Low Light Boost, un nouveau mode d'exposition automatique disponible à la fois pour Camera 2 et l'extension de caméra en mode Nuit. L'amplification luminosité faible ajuste automatiquement la luminosité du flux d'aperçu dans des conditions de faible luminosité. Le processus est différent de celui utilisé par l'extension de l'appareil photo du mode Nuit pour créer des images fixes, car le mode Nuit combine plusieurs photos en rafale pour créer une seule image améliorée. Bien que le mode Nuit fonctionne très bien pour créer une image fixe, il ne permet pas de créer un flux continu d'images, contrairement à l'amplification luminosité faible. L'amplification luminosité faible offre donc de nouvelles fonctionnalités pour l'appareil photo, par exemple:

  • fournir un aperçu amélioré de l'image afin que les utilisateurs puissent mieux cadrer leurs photos par faible luminosité ;
  • Je scanne des codes QR par faible luminosité.

Si vous activez cette fonctionnalité, elle s'active automatiquement lorsque la luminosité est faible et s'éteint lorsque la luminosité est plus forte.

Les applications peuvent enregistrer en dehors du flux d'aperçu dans des conditions de faible luminosité afin de conserver une vidéo lumineuse.

Vous pouvez utiliser l'amplification faible luminosité dans Camera2 ou via les extensions d'appareil photo. Ce document explique comment utiliser l'option Low Light Boost avec Camera2. Vous pouvez également utiliser l'amplification luminosité faible avec l'extension de caméra en mode Nuit si elle est compatible avec l'appareil.

Vérifier la disponibilité

Avant d'utiliser l'amplification luminosité faible, vérifiez que votre appareil est compatible. Si elle est disponible, l'amplification luminosité faible est l'un des modes d'exposition répertoriés dans camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES. (L'amplification luminosité faible est son propre 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 cette fonctionnalité.)

Ainsi, pour vérifier si l'amplification faible luminosité 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 (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
}

Activer l'amplification luminosité faible

Pour activer l'amplification faible luminosité dans une session Camera2, définissez CaptureRequest.CONTROL_AE_MODE sur ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Ensuite, vous devez confirmer que l'amplification faible luminosité a été activée. Pour ce faire, vérifiez le champ CaptureResult.CONTROL_AE_MODE. Vérification nécessaire, car l'option Low Light Boost n'est pas compatible avec toutes les configurations de caméras. Par exemple, l'enregistrement haute vitesse n'est pas compatible avec l'amplification luminosité faible, pour des raisons de FPS. Si l'option Low Light Boost n'est pas activée, vous devrez peut-être modifier la configuration de la caméra, puis 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 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
);

Amplification luminosité faible de l'écran

L'amplification luminosité faible éclaircit le flux de prévisualisation en cas de faible luminosité. Elle n'a aucun effet si l'environnement est déjà suffisamment lumineux pour une capture normale. Pour vérifier si l'amplification luminosité faible est actuellement activée, consultez le champ CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. Si vous avez activé l'amplification luminosité faible et qu'elle est active, le champ est défini sur CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE. Une icône en forme de lune ou tout autre élément indiquant que l'aperçu est en cours d'amélioration peut s'afficher.

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