Booster für wenig Licht

Mit Android 15 wird die Optimierung bei wenig Licht eingeführt, ein neuer Modus für die automatische Belichtung, der sowohl für Kamera 2 als auch für die Kameraerweiterung für den Nachtmodus verfügbar ist. Die Helligkeit des Vorschaustreams wird bei wenig Licht automatisch angepasst. Dies unterscheidet sich von der Erstellung von Standbildern mit der Nachtmodus-Kameraerweiterung, da der Nachtmodus eine Reihe von Fotos zu einem einzigen, verbesserten Bild kombiniert. Der Nachtmodus eignet sich zwar sehr gut zum Erstellen von Standbildern, er kann jedoch keinen fortlaufenden Stream von Frames erzeugen, die Optimierung bei wenig Licht hingegen schon. Dadurch ermöglicht die Optimierung bei wenig Licht neue Kamerafunktionen wie die folgenden:

  • Mit einer verbesserten Bildvorschau können Nutzer Bilder bei schlechten Lichtverhältnissen besser einordnen.
  • QR-Codes werden bei wenig Licht gescannt.

Wenn Sie „Optimierung bei wenig Licht“ aktivieren, wird sie bei wenig Licht automatisch aktiviert und bei mehr Licht wieder ausgeschaltet.

Apps können bei schlechten Lichtverhältnissen aus dem Vorschaustream aufzeichnen, um ein helleres Video zu speichern.

Sie können die Funktion „Optimierung für wenig Licht“ entweder in Kamera2 oder über Kameraerweiterungen verwenden. In diesem Dokument erfahren Sie, wie Sie die Funktion „Optimierung bei wenig Licht“ mit Camera2 verwenden. Sie können die Funktion „Optimierung bei wenig Licht“ auch mit der Kameraerweiterung „Nachtmodus“ verwenden, wenn sie vom Gerät unterstützt wird.

Verfügbarkeit prüfen

Bevor Sie „Optimierung für wenig Licht“ verwenden, prüfen Sie, ob sie vom Gerät unterstützt wird. Falls verfügbar, ist „Verstärkung bei wenig Licht“ einer der unter camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES aufgeführten Belichtungsmodi. (Bei „Optimierung bei wenig Licht“ handelt es sich um eine eigene Belichtungseinstellung, da andere Einstellungen für die automatische Belichtung nicht mit der Vorschauaufhellung kompatibel sind, die über die Optimierung bei wenig Licht durchgeführt wird.

Wenn Sie prüfen möchten, ob die Optimierung bei wenig Licht verfügbar ist, rufen Sie CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) auf 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
}

Optimierung bei wenig Licht aktivieren

Wenn Sie die Optimierung bei wenig Licht in einer Camera2-Sitzung aktivieren möchten, setzen Sie CaptureRequest.CONTROL_AE_MODE auf ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Danach musst du prüfen, ob die „Optimierung für wenig Licht“ aktiviert ist. Dazu kannst du im Feld CaptureResult.CONTROL_AE_MODE nachsehen. Das müssen Sie prüfen, da die Funktion „Optimierung für wenig Licht“ nicht mit allen Kamerakonfigurationen kompatibel ist. Bei Aufnahmen mit hoher Geschwindigkeit wird die Verstärkung bei wenig Licht aufgrund von fps beispielsweise nicht unterstützt. Wenn die Optimierung bei wenig Licht nicht aktiviert ist, müssen Sie möglicherweise die Kamerakonfiguration ändern und es noch einmal versuchen.

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

Verstärkung bei schwachem Licht überwachen

Die Funktion „Verstärkung bei wenig Licht“ hellt den Vorschaustream bei schlechten Lichtverhältnissen auf. Sie hat keine Auswirkungen, wenn die Umgebung bereits hell genug für eine normale Aufnahme ist. Im Feld CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE können Sie prüfen, ob die Funktion „Optimierung für wenig Licht“ derzeit aktiv ist. Wenn Sie die Funktion „Verstärkung bei schwachem Licht“ aktiviert haben und derzeit aktiv ist, ist das Feld auf CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE festgelegt. Dann kann ein Mondsymbol oder ein anderer Hinweis darauf angezeigt werden, 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
);