Android 15 wprowadza tryb automatycznego ustawiania ekspozycji (AE) w trybie słabego oświetlenia, czyli nowy tryb automatycznego ustawiania ekspozycji dostępny zarówno w aparacie 2, jak i w rozszerzeniu aparatu w trybie nocnym. Tryb AE Boost w słabym oświetleniu automatycznie dostosowuje jasność strumienia podglądu w warunkach słabego oświetlenia. Jest to inne podejście niż w przypadku rozszerzenia aparatu w trybie nocnym, które tworzy statyczne obrazy, ponieważ tryb nocny łączy serię zdjęć w jeden ulepszony obraz. Chociaż tryb nocny sprawdza się bardzo dobrze w przypadku tworzenia statycznych obrazów, nie może tworzyć ciągłego strumienia klatek. Tryb AE z ulepszonym oświetleniem w ciemności może to jednak robić. Tryb AE wzmacniający w oświetleniu słabym umożliwia korzystanie z nowych funkcji aparatu, takich jak:
- Udostępnianie ulepszonej podglądu obrazu, aby użytkownicy mogli lepiej kadrować zdjęcia w słabym oświetleniu.
- skanowanie kodów QR w warunkach słabego oświetlenia.
Jeśli włączysz tryb AE w trybie słabego oświetlenia, włączy się on automatycznie, gdy poziom światła będzie niski, i wyłączy, gdy będzie wyższy.
Aplikacje mogą nagrywać strumień podglądu w warunkach słabego oświetlenia, aby zapisać film z jaśniejszym obrazem.
Tryb AE Boost w przypadku słabego oświetlenia możesz używać w aplikacji Camera2 lub za pomocą rozszerzeń aparatu. Z tego dokumentu dowiesz się, jak korzystać z trybu wzmocnienia AE w ciemnych warunkach z aplikacją Camera2. Możesz też użyć trybu AE w słabym oświetleniu w rozszerzeniu aparatu Tryb nocny, jeśli urządzenie obsługuje tę funkcję.
Sprawdzanie dostępności
Zanim użyjesz trybu AE Boost w słabym oświetleniu, sprawdź, czy jest on obsługiwany na urządzeniu.
Jeśli jest dostępny, tryb wzmocnienia AE w słabym oświetleniu jest jednym z trybów ekspozycji wymienionych w sekcji camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
. (Low Light Boost to osobne ustawienie automatycznej ekspozycji, ponieważ inne ustawienia automatycznej ekspozycji nie są zgodne z trybem podświetlenia podglądu w trybie Low Light Boost AE).
Aby sprawdzić, czy tryb wzmocnienia AE w słabym oświetleniu jest dostępny, wywołaj funkcję CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES)
i sprawdź, czy w zwróconych trybach znajduje się 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 AE Mode (next section) } else { // Proceed without Low Light Boost AE Mode }
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 AE Mode (next section) } else { // Proceed without Low Light Boost AE Mode }
Włączanie trybu AE Boost w słabym oświetleniu
Aby włączyć tryb AE z ulepszonym oświetleniem w sesji Camera2, ustaw wartość CaptureRequest.CONTROL_AE_MODE
na ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
. Następnie musisz potwierdzić, że tryb wzmocnienia AE w słabym oświetleniu został włączony. Aby to zrobić, sprawdź pole CaptureResult.CONTROL_AE_MODE
. Musisz to sprawdzić, ponieważ funkcja Boost Low Light nie jest zgodna ze wszystkimi konfiguracjami kamer. Na przykład nagrywanie z dużą szybkością nie obsługuje trybu automatycznego ustawiania ekspozycji w słabym oświetleniu ze względu na liczbę klatek na sekundę. Jeśli tryb automatycznej ekspozycji w oświetleniu słabym może być konieczne zmienić konfigurację aparatu i spróbować ponownie.
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 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 AE mode set successfully result.get(CaptureResult.CONTROL_AE_MODE) == CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY; } }, mCameraHandler );
Tryb monitorowania AE w trybie wzmocnienia słabego oświetlenia
Tryb AE wzmacniający 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 wystarczająco jasne do normalnego nagrywania. Aby sprawdzić, czy tryb wzmocnienia AE w warunkach słabego oświetlenia jest obecnie aktywny, sprawdź pole CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
.
Jeśli tryb wzmocnienia AE w słabym oświetleniu jest włączony i aktywny, pole jest ustawione na CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE
.
Możesz wtedy wyświetlić ikonę księżyca lub inny wskaźnik, że podgląd jest rozjaśniany.
Kotlin
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 )
Java
mSession.setRepeatingRequest( captureRequestBuilder.build(), new CaptureCallback() { @Override public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { // 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 } } }, mCameraHandler );