Amplification luminosité faible

Android 15 introduit la fonctionnalité Faible luminosité, un nouveau mode d'exposition automatique disponible pour à la caméra 2 et à l'extension de caméra du mode Nuit. Amplification par faible luminosité ajuste automatiquement la luminosité du flux d'aperçu par faible luminosité et conditions d'exploitation. Ce n'est pas la même chose que l'extension de caméra en mode Nuit des images fixes. En effet, le mode Nuit combine plusieurs photos en rafale pour créer image améliorée. Le mode Nuit est idéal pour créer des images fixes, ne peut pas créer un flux continu d'images, contrairement à l'amplification faible luminosité. Ainsi, L'optimisation par faible luminosité active de nouvelles fonctionnalités de l'appareil photo, par exemple:

  • L'aperçu de l'image amélioré, qui permet aux utilisateurs de mieux cadrer leurs images et même par faible luminosité.
  • Lecture de codes QR en cas de faible luminosité.

Si vous activez l'optimisation par faible luminosité, elle s'active automatiquement en cas de et s'éteint dès qu'il y a plus de lumière.

Les applications peuvent enregistrer hors du flux d'aperçu dans des conditions de faible luminosité pour éviter éclaircis la vidéo.

Vous pouvez utiliser l'amplification faible luminosité dans Camera2 ou via extensions d'appareil photo. Ce document explique comment utiliser l'amplification par faible luminosité avec Camera2. Vous pouvez également utiliser L'option "Faible luminosité" peut être utilisée avec l'extension d'appareil photo Mode Nuit, si elle est compatible avec le appareil.

Vérifier la disponibilité

Avant d'utiliser cette fonctionnalité, vérifiez qu'elle est compatible avec l'appareil. S'il s'agit disponible, l'amplification faible luminosité est l'un des modes d'exposition répertoriés dans camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES (Faible luminosité L'optimisation est un paramètre d'exposition automatique spécifique, puisque les autres paramètres d'exposition automatique ne sont pas compatibles avec l'éclaircissement de l'aperçu effectué par l'amplification basse luminosité.)

Pour vérifier si l'option "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 par faible luminosité

Pour activer l'amplification par faible luminosité dans une session Camera2, définissez CaptureRequest.CONTROL_AE_MODE jusqu'à ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY Ensuite, vous devrez vérifiez que l'amplification faible luminosité est activée ; Pour ce faire, cochez la case CaptureResult.CONTROL_AE_MODE. Vous devez vérifier, car la luminosité est faible La fonctionnalité Boost n'est pas compatible avec toutes les configurations de caméra. Par exemple, la vitesse l'enregistrement n'est pas compatible avec l'amplification par faible luminosité, en raison des considérations liées au FPS. Si L'amplification par faible luminosité n'est pas activée. Vous devrez peut-être changer de caméra configuration, puis réessayez.

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

Surveiller l'amplification par faible luminosité

La fonctionnalité d'optimisation par faible luminosité augmente la luminosité du flux d'aperçu dans des conditions de faible luminosité. n'a aucun effet si l'environnement est déjà suffisamment lumineux pour une température normale capture. Pour vérifier si l'optimisation par faible luminosité est activée, cochez le champ CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. Si vous avez activé Mode faible luminosité activé et actif actuellement, le champ défini sur CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE Vous pouvez ensuite afficher l'icône de lune ou toute autre indication indiquant que l'aperçu est en cours d'éclaircissement.

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