Aumento luce

Android 15 introduce Low Light Boost, una nuova modalità di esposizione automatica disponibile sia la Fotocamera 2 sia l'estensione Fotocamera per la modalità notturna. Aumento luce regola automaticamente la luminosità dello stream di anteprima in condizioni di scarsa illuminazione le condizioni di traffico. È diverso dalla modalità di creazione dell'estensione fotocamera per la modalità notturna immagini statiche, perché la modalità notturna combina una serie di foto a raffica per creare un'unica l'immagine migliorata. La modalità notturna funziona molto bene per creare un'immagine statica, non è possibile creare uno stream continuo di fotogrammi, mentre la funzionalità Incremento luce può farlo. Pertanto, L'opzione Luce avanzata attiva nuove funzionalità della fotocamera, tra cui:

  • Fornire un'anteprima dell'immagine migliorata, in modo che gli utenti siano in grado di inquadrare meglio i loro in condizioni di scarsa illuminazione.
  • Scansione dei codici QR in condizioni di scarsa illuminazione.

Se attivi la funzionalità Aumento luce, questa funzionalità si attiva automaticamente quando c'è una bassa luminosità livello di luce e si spegne quando c'è più luce.

Le app possono registrare lo stream in anteprima in condizioni di scarsa illuminazione per salvare un aumenta la luminosità del video.

Puoi usare Low Light Boost in Fotocamera2 o tramite estensioni per la videocamera. Questo documento spiega come utilizzare la funzionalità Incremento di luce scarsa con Fotocamera2. Puoi anche utilizzare Aumento luce con l'estensione fotocamera per la modalità notturna, se supportata dal dispositivo.

Verifica la disponibilità

Prima di utilizzare Low Light Boost, verifica che sia supportato sul dispositivo. Se si tratta di disponibile, la funzionalità Incremento di luce basso è una delle modalità di esposizione elencate in camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES (Luce scarsa Boost è un'impostazione di esposizione automatica, poiché altre impostazioni di esposizione automatica non sono compatibili con l'aumento di luminosità dell'anteprima eseguito con la funzionalità Low Light Boost.

Quindi, per controllare se la funzionalità Aumento luce è disponibile, chiama CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) e controlla se le modalità restituite includono 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 (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
}

Attiva Incremento luce

Per attivare Low Light Boost in una sessione Fotocamera2, imposta Da CaptureRequest.CONTROL_AE_MODE a ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Dopo averlo fatto, dovrai conferma che la funzionalità Amplificazione luce è stata attivata. puoi farlo controllando CaptureResult.CONTROL_AE_MODE. Devi controllare perché Luce scarsa La modalità Boost non è compatibile con tutte le configurazioni della videocamera. Ad esempio, alta velocità la registrazione non supporta la funzionalità Low Light Boost, per via di considerazioni relative ai f/s. Se L'opzione Aumento luce non è attiva, potrebbe essere necessario cambiare la fotocamera configurazione e riprova.

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

Monitora l'incremento luce scarsa

La funzionalità Aumenta luce aumenta la luminosità dello stream di anteprima in condizioni di scarsa illuminazione e non ha alcun effetto se l'ambiente è già sufficientemente luminoso per la normale acquisizioni. Puoi verificare se l'opzione Amplificazione scarsa è attualmente attiva controllando il campo CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. Se hai attivato L'opzione Aumento luce è attivata e attualmente è attivo, il campo è impostato su CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE Potresti quindi mostrare l'icona della luna o qualche altra indicazione che l'anteprima sta per diventare più luminosa.

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