Automatischer Belichtungsmodus mit Modus für wenig Licht

Mit Android 15 wird der Modus für automatische Belichtung bei wenig Licht eingeführt, ein neuer Modus für die automatische Belichtung, der sowohl für Camera 2 als auch für die Kameraerweiterung für den Nachtmodus verfügbar ist. Der AE-Modus für den Low Light-Modus passt die Helligkeit des Vorschaustreams bei schlechten Lichtverhältnissen automatisch an. Das unterscheidet sich von der Art und Weise, wie die Kameraerweiterung für den Nachtmodus Standbilder erstellt, da im Nachtmodus eine Reihe von Fotos zu einem einzigen, verbesserten Bild kombiniert wird. Der Nachtmodus eignet sich zwar sehr gut für die Erstellung eines Standbilds, kann aber keinen kontinuierlichen Stream von Frames erzeugen. Der AE-Modus „Low Light Boost“ kann das jedoch. Der AE-Modus „Low Light Boost“ ermöglicht neue Kamerafunktionen, z. B.:

  • Eine verbesserte Bildvorschau, damit Nutzer ihre Bilder bei schlechten Lichtverhältnissen besser ausrichten können.
  • QR-Code scannen bei wenig Licht

Wenn du den AE-Modus für die Aufhellung bei wenig Licht aktivierst, wird er automatisch eingeschaltet, wenn wenig Licht vorhanden ist, und ausgeschaltet, wenn mehr Licht vorhanden ist.

Apps können die Vorschau eines Streams bei schlechten Lichtverhältnissen aufnehmen und dann ein aufgehelltes Video speichern.

Du kannst den AE-Modus für die Optimierung bei schlechten Lichtverhältnissen entweder in Camera2 oder über Kameraerweiterungen verwenden. In diesem Dokument wird beschrieben, wie du den AE-Modus „Low Light Boost“ mit Camera2 verwendest. Du kannst den AE-Modus „Low Light-Modus“ auch mit der Kameraerweiterung „Nachtmodus“ verwenden, wenn er vom Gerät unterstützt wird.

Verfügbarkeit prüfen

Prüfe vor der Verwendung des AE-Modus für die Aufhellung bei wenig Licht, ob er auf dem Gerät unterstützt wird. Wenn der AE-Modus „Low Light Boost“ verfügbar ist, ist er einer der Belichtungsmodi, die in camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES aufgeführt sind. (Der Low Light-Modus ist eine eigene Einstellung für die automatische Belichtung, da andere Einstellungen für die automatische Belichtung nicht mit der Aufhellung der Vorschau durch den AE-Modus des Low Light-Modus kompatibel sind.)

Wenn du prüfen möchtest, ob der AE-Modus für die Aufhellung bei wenig Licht verfügbar ist, rufe CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) auf und prüfe, ob die zurückgegebenen Modi ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY enthalten:

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.
}

AE-Modus für Low Light-Modus aktivieren

Wenn du den AE-Modus „Low Light-Modus“ in einer Camera2-Sitzung aktivieren möchtest, setze CaptureRequest.CONTROL_AE_MODE auf ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Anschließend müssen Sie prüfen, ob der AE-Modus für die Low Light Boost-Funktion aktiviert wurde. Dazu können Sie das Feld CaptureResult.CONTROL_AE_MODE prüfen. Das ist wichtig, da der Low Light-Modus nicht mit allen Kamerakonfigurationen kompatibel ist. Bei Hochgeschwindigkeitsaufnahmen wird beispielsweise der AE-Modus für den Low Light-Modus aufgrund von FPS-Überlegungen nicht unterstützt. Wenn der AE-Modus „Low Light Boost“ nicht aktiviert ist, müssen Sie möglicherweise die Kamerakonfiguration ändern und es noch einmal versuchen.

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
)

AE-Modus für Low Light-Modus überwachen

Der AE-Modus „Low Light Boost“ hellt den Vorschaustream bei schlechten Lichtverhältnissen auf und hat keine Auswirkungen, wenn die Umgebung bereits hell genug für normale Aufnahmen ist. Ob der AE-Modus für die Optimierung bei schwachem Licht derzeit aktiv ist, können Sie im Feld CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE prüfen. Wenn du den AE-Modus für den Low Light-Modus aktiviert hast und er gerade aktiv ist, wird das Feld auf CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE gesetzt. Du kannst dann ein Mondsymbol oder einen anderen Hinweis anzeigen, dass die Vorschau aufgehellt wird.

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
)