Modalità di esposizione automatica con aumento luce

Android 15 introduce la modalità di esposizione automatica (AE) Low Light Boost, una nuova modalità di esposizione automatica disponibile sia per Camera 2 sia per l'estensione della fotocamera in modalità notturna. La modalità AE di potenziamento automatico regola automaticamente la luminosità dello stream di anteprima in condizioni di scarsa illuminazione. Questo è diverso dal modo in cui l'estensione della fotocamera per la modalità notturna crea immagini fisse, perché la modalità notturna combina una serie di foto per creare un'unica immagine migliorata. Sebbene la modalità notturna funzioni molto bene per creare un'immagine fissa, non può creare un flusso continuo di fotogrammi, mentre la modalità AE Luce scarsa avanzata può farlo. In questo modo, la modalità AE Low Light Boost consente di utilizzare nuove funzionalità della fotocamera, come:

  • Fornire un'anteprima dell'immagine migliorata, in modo che gli utenti possano inquadrare meglio le foto in condizioni di scarsa illuminazione.
  • Scansione di codici QR in condizioni di scarsa illuminazione.

Se attivi la modalità AE Ottimizzazione della luminosità, questa si attiva automaticamente quando il livello di luminosità è basso e si disattiva quando c'è più luce.

Le app possono registrare l'anteprima stream quando la luce è bassa in modo che il video salvato sia più luminoso.

Puoi utilizzare la modalità AE Ottimizzazione della luminosità in Camera2 o tramite le estensioni della fotocamera. Questo documento spiega come utilizzare la modalità AE di potenziamento automatico in condizioni di scarsa illuminazione con Camera2. Puoi anche utilizzare la modalità AE Low Light Boost con l'estensione della fotocamera Modalità notturna, se supportata dal dispositivo.

Verifica la disponibilità

Prima di utilizzare la modalità AE di ottimizzazione in condizioni di scarsa illuminazione, verifica che sia supportata sul dispositivo. Se disponibile, la modalità AE Low Light Boost è una delle modalità di esposizione elencate in camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES. (Low Light Boost è un'impostazione di esposizione automatica a sé stante, poiché le altre impostazioni di esposizione automatica non sono compatibili con la luminosità dell'anteprima eseguita dalla modalità AE di Low Light Boost).

Quindi, per verificare se la modalità AE di ottimizzazione in condizioni di scarsa illuminazione è disponibile, chiama CameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES) e controlla se le modalità restituite includono 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.
}

Attiva la modalità AE Luce scarsa ottimizzata

Per attivare la modalità AE Luce scarsa avanzata in una sessione Camera2, imposta CaptureRequest.CONTROL_AE_MODE su ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY. Dopodiché, dovrai confermare che la modalità AE di ottimizzazione della luminosità è stata attivata. Puoi farlo controllando il campo CaptureResult.CONTROL_AE_MODE. Devi controllare perché la funzionalità Luce scarsa+ non è compatibile con tutte le configurazioni della fotocamera. Ad esempio, la registrazione ad alta velocità non supporta la modalità AE di potenziamento automatico in condizioni di scarsa illuminazione a causa di considerazioni relative ai fotogrammi al secondo. Se la modalità AE di ottimizzazione in condizioni di scarsa illuminazione non è attiva, potrebbe essere necessario modificare la configurazione della fotocamera e riprovare.

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
)

Monitora la modalità AE di Luminosità Migliorata

La modalità AE di potenziamento automatico aumenta la luminosità dello stream di anteprima in condizioni di scarsa illuminazione e non ha alcun effetto se l'ambiente è già abbastanza luminoso per l'acquisizione normale. Puoi verificare se la modalità AE di ottimizzazione della luminosità è attualmente attiva controllando il campo CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE. Se hai attivato la modalità AE Modalità scarsa illuminazione e è attualmente attiva, il campo è impostato su CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE. Potresti quindi mostrare un'icona a forma di luna o un'altra indicazione che l'anteprima è in fase di illuminazione.

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
)