Booster für wenig Licht

Mit Android 15 wurde die Funktion Optimierung bei wenig Licht eingeführt, ein neuer Modus für die automatische Belichtung Kamera 2 und die Kameraerweiterung für den Nachtmodus verwenden. Booster für wenig Licht Passt die Helligkeit des Vorschau-Streams bei wenig Licht automatisch an . Dies unterscheidet sich von der Art und Weise, wie die Kameraerweiterung für den Nachtmodus da der Nachtmodus eine Reihe von Fotos zu einer einzelnen, optimiertes Bild. Der Nachtmodus eignet sich gut zur Erstellung von Standbildern, kann keinen kontinuierlichen Frame-Stream erstellen, die Funktion für wenig Licht hingegen schon. Das heißt: Die Funktion „Modus für wenig Licht“ ermöglicht neue Kamerafunktionen, darunter:

  • Bereitstellung einer optimierten Bildvorschau, damit Nutzer ihre Bilder besser bei schlechten Lichtverhältnissen.
  • QR-Codes werden bei wenig Licht gescannt.

Wenn du die Funktion „Boost für wenig Licht“ aktivierst, wird sie bei schlechten Lichtverhältnissen Helligkeit und schaltet sich bei mehr Licht aus.

Apps können bei wenig Licht Aufnahmen aus dem Vorschaustream machen, um einen aufhellendes Video.

Die Optimierung für wenig Licht kann entweder in der Kamera2 oder im Kameraerweiterungen. In diesem Dokument wird beschrieben, wie die Optimierung für wenig Licht mit Camera2 verwendet wird. Sie können auch „Modus für wenig Licht“ mit der Kameraerweiterung „Nachtmodus“ aktivieren, wenn sie vom .

Verfügbarkeit prüfen

Prüfen Sie vor der Verwendung der Funktion für wenig Licht, ob sie von Ihrem Gerät unterstützt wird. Wenn es ist „Optimierung für wenig Licht“ einer der Belichtungsmodi, die in camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES (Wenig Licht) Die Verstärkung ist eine eigene automatische Belichtungseinstellung, da andere sind nicht mit der Vorschau-Aufhellung kompatibel, die von der Optimierung für wenig Licht durchgeführt wird.)

Wenn Sie prüfen möchten, ob die Funktion „Optimierung für wenig Licht“ verfügbar ist, rufen Sie CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) und prüfen Sie, ob die zurückgegebenen Modi ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY enthalten:

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
}

„Boost für wenig Licht“ aktivieren

Um die Funktion für wenig Licht in einer Camera2-Sitzung zu aktivieren, CaptureRequest.CONTROL_AE_MODE bis ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY Anschließend müssen Sie Prüfen, ob die Optimierung für wenig Licht aktiviert ist können Sie dies tun, indem Sie CaptureResult.CONTROL_AE_MODE-Feld. Das musst du überprüfen, da wenig Licht Die Optimierung ist nicht mit allen Kamerakonfigurationen kompatibel. Zum Beispiel sind hohe Geschwindigkeiten wird die Optimierung bei wenig Licht aus Gründen der FPS nicht unterstützt. Wenn Die Funktion „Optimierung für wenig Licht“ ist nicht aktiviert. Möglicherweise musst du die Kamera wechseln. und versuchen Sie es noch einmal.

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

„Booster bei wenig Licht“ im Blick behalten

Mit dieser Funktion wird die Vorschau des Streams bei wenig Licht aufgehellt. Hat keine Auswirkung, wenn die Umgebung bereits hell genug für normale Lichtverhältnisse ist. aufnehmen. Ob die Funktion „Optimierung für wenig Licht“ derzeit aktiviert ist, sehen Sie an Das Feld CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE Wenn Sie die Funktion „Boost für wenig Licht“ aktiviert und derzeit aktiv ist, ist das Feld auf CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE Daraufhin wird eine oder ein anderer Hinweis darauf, dass die Vorschau aufgehellt wird.

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