Android 15 introduce la modalità di esposizione automatica (AE) con potenziamento in condizioni di scarsa illuminazione, una nuova modalità di esposizione automatica disponibile sia per Fotocamera 2 sia per l'estensione della fotocamera con modalità notturna. La modalità AE Potenziamento automatico in condizioni di luce scarsa regola automaticamente la luminosità dello stream di anteprima. Questo è diverso dal modo in cui l'estensione della fotocamera in modalità Notte crea immagini fisse, perché la modalità Notte combina una raffica di foto per creare un'unica immagine migliorata. Sebbene la modalità Notte funzioni molto bene per creare un'immagine fissa, non può creare uno stream continuo di fotogrammi, ma la modalità AE Boost in condizioni di scarsa illuminazione può. Pertanto, la modalità AE Low Light Boost abilita nuove funzionalità della fotocamera, ad esempio:
- 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 con miglioramento in condizioni di scarsa illuminazione, questa si attiva automaticamente quando il livello di illuminazione è 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 Low Light Boost in Camera2 o tramite le estensioni della fotocamera. Questo documento spiega come utilizzare la modalità AE con potenziamento automatico in condizioni di scarsa illuminazione con Camera2. Puoi anche utilizzare la modalità AE Low Light Boost con l'estensione della fotocamera per la modalità notturna se è supportata dal dispositivo.
Verifica la disponibilità
Prima di utilizzare la modalità AE Boost 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, poiché le altre impostazioni di esposizione automatica
non sono compatibili con l'illuminazione dell'anteprima eseguita dalla modalità AE
Low Light Boost.
Pertanto, per verificare se la modalità AE di Boost 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
:
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 }
Attivare la modalità AE Boost in condizioni di scarsa illuminazione
Per attivare la modalità AE Low Light Boost in una sessione Camera2, imposta
CaptureRequest.CONTROL_AE_MODE
su
ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
. Dopodiché, dovrai verificare che la modalità AE di Boost in condizioni di scarsa illuminazione sia attivata. Puoi farlo controllando il campo CaptureResult.CONTROL_AE_MODE
. Devi controllare perché il potenziamento automatico non è compatibile con tutte le configurazioni della videocamera. 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 FPS. Se la modalità AE Boost in condizioni di scarsa illuminazione non è attiva, potresti dover cambiare la configurazione della fotocamera e riprovare.
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 );
Monitora la modalità AE con aumento luce scarsa
La modalità AE di potenziamento automatico in condizioni di scarsa illuminazione illumina lo stream di anteprima
e non ha alcun effetto se l'ambiente è già abbastanza luminoso per la fotografia normale. Puoi verificare se la modalità AE Boost in condizioni di scarsa illuminazione è attualmente attiva controllando il campo CaptureResult.CONTROL_LOW_LIGHT_BOOST_STATE
.
Se hai attivato la modalità AE di miglioramento in condizioni di scarsa illuminazione e è attualmente attiva, il campo è impostato su CameraMetadata.CONTROL_LOW_LIGHT_BOOST_STATE_ACTIVE
.
Potresti mostrare un'icona a forma di luna o un'altra indicazione che l'anteprima viene illuminata.
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 );