Tryb automatycznej ekspozycji w trybie słabego oświetlenia

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