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