Tryb automatycznej ekspozycji w trybie słabego oświetlenia

Android 15 wprowadza tryb automatycznego ustawiania ekspozycji z ulepszeniem obrazu przy słabym oświetleniu. Jest to nowy tryb automatycznego ustawiania ekspozycji dostępny zarówno w Camera 2, jak i w rozszerzeniu aparatu do trybu nocnego. Tryb AE ze wzmocnieniem przy słabym oświetleniu automatycznie dostosowuje jasność strumienia podglądu w warunkach słabego oświetlenia. Różni się to od sposobu, w jaki rozszerzenie aparatu do trybu nocnego tworzy zdjęcia, ponieważ tryb nocny łączy serię zdjęć w jeden ulepszony obraz. Tryb nocny świetnie sprawdza się przy tworzeniu zdjęć, ale nie może utworzyć ciągłego strumienia klatek, co jest możliwe w trybie AE ulepszonej ekspozycji przy słabym oświetleniu. Dzięki temu tryb AE ulepszonego oświetlenia przy słabym świetle umożliwia korzystanie z nowych funkcji aparatu, takich jak:

  • ulepszony podgląd obrazu, dzięki któremu użytkownicy mogą lepiej kadrować zdjęcia przy słabym oświetleniu;
  • skanowanie kodów QR przy słabym oświetleniu,

Jeśli włączysz tryb AE wzmocnienia słabego oświetlenia, będzie on automatycznie włączać się przy słabym oświetleniu i wyłączać, gdy światła będzie więcej.

Aplikacje mogą nagrywać ze strumienia podglądu przy słabym oświetleniu, aby zapisać rozjaśniony film.

Trybu AE ulepszonej ekspozycji przy słabym oświetleniu możesz używać w aplikacji Camera2 lub za pomocą rozszerzeń aparatu. Ten dokument zawiera informacje o tym, jak używać trybu AE ulepszonej ekspozycji przy słabym oświetleniu z Camera2. Możesz też używać trybu AE ze wzmocnieniem przy słabym oświetleniu z rozszerzeniem aparatu Tryb nocny, jeśli urządzenie obsługuje tę funkcję.

Sprawdzanie dostępności

Zanim użyjesz trybu AE wzmocnienia słabego oświetlenia, sprawdź, czy jest on obsługiwany na urządzeniu. Jeśli jest dostępny, tryb AE doświetlania przy słabym oświetleniu jest jednym z trybów ekspozycji wymienionych w camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES. (Ulepszenie słabego oświetlenia to osobne ustawienie automatycznej ekspozycji, ponieważ inne ustawienia automatycznej ekspozycji nie są zgodne z rozjaśnianiem podglądu wykonywanym przez tryb automatycznej ekspozycji ulepszenia słabego oświetlenia).

Aby sprawdzić, czy tryb AE wzmocnienia słabego oświetlenia jest dostępny, wywołaj CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) i sprawdź, czy zwrócone tryby obejmują ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY:

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

Włącz tryb AE doświetlania przy słabym oświetleniu

Aby włączyć tryb AE ulepszonej ekspozycji przy słabym oświetleniu w sesji Camera2, ustaw CaptureRequest.CONTROL_AE_MODE na ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Następnie musisz potwierdzić, że tryb AE wzmocnienia słabego oświetlenia został włączony. Możesz to zrobić, sprawdzając pole CaptureResult.CONTROL_AE_MODE. Musisz to sprawdzić, ponieważ ulepszenie obrazu przy słabym oświetleniu nie jest zgodne ze wszystkimi konfiguracjami kamery. Na przykład nagrywanie z dużą szybkością nie obsługuje trybu AE ze wzmocnieniem przy słabym oświetleniu ze względu na liczbę klatek na sekundę. Jeśli tryb AE ulepszenia przy słabym oświetleniu nie jest włączony, może być konieczna zmiana konfiguracji kamery i ponowna próba.

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
)

Monitorowanie trybu AE doświetlania przy słabym oświetleniu

Tryb AE wzmocnienia przy słabym oświetleniu rozjaśnia podgląd strumienia w warunkach słabego oświetlenia i nie ma żadnego wpływu, jeśli otoczenie jest już wystarczająco jasne do normalnego nagrywania. Aby sprawdzić, czy tryb AE ulepszonej ekspozycji przy słabym oświetleniu jest obecnie aktywny, sprawdź pole CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. Jeśli tryb AE doświetlania przy słabym oświetleniu jest włączony i jest obecnie aktywny, pole ma wartość CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE. Możesz wtedy wyświetlić ikonę księżyca lub inny symbol wskazujący, że podgląd jest rozjaśniany.

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
)