Modalità 3A e transizione di stato

Questa pagina descrive le modalità e le macchine a stati 3A per un dispositivo Android. L'interfaccia HAL della fotocamera, che definisce le macchine a stati a un livello elevato, consente all'implementazione HAL e al framework Android di comunicare gli stati attuali di 3A e di attivare gli eventi 3A. L'implementazione HAL è responsabile degli algoritmi 3A che controllano le impostazioni e le transizioni di stato della modalità 3A.

Quando il dispositivo è aperto, tutti i singoli stati 3A devono essere STATE_INACTIVE. La configurazione dello stream non reimposta 3A. Ad esempio, lo stato attivo bloccato deve essere mantenuto durante la chiamata configure().

L'attivazione di un'azione 3A consiste semplicemente nell'impostare la voce di trigger pertinente nelle impostazioni della richiesta successiva per indicare l'inizio dell'attivazione. Ad esempio, l'attivatore per avviare una ricerca automatica dell'autofocus è impostare la voce ANDROID_CONTROL_AF_TRIGGER su ANDROID_CONTROL_AF_TRIGGER_START per una richiesta; e l'annullamento di una ricerca automatica dell'autofocus viene attivato impostando ANDROID_CONTROL_AF_TRIGGER su ANDROID_CONTRL_AF_TRIGGER_CANCEL. In caso contrario, la voce non esisterà o verrà impostata su ANDROID_CONTROL_AF_TRIGGER_IDLE. Ogni richiesta con una voce di attivazione impostata su un valore diverso da IDLE verrà trattata come un evento di attivazione indipendente.

A livello superiore, 3A è controllato dall'impostazione ANDROID_CONTROL_MODE. Consente di scegliere tra nessuna 3A (ANDROID_CONTROL_MODE_OFF), modalità AUTO normale (ANDROID_CONTROL_MODE_AUTO) e utilizzo dell'impostazione della modalità scena (ANDROID_CONTROL_USE_SCENE_MODE):

  • In modalità OFF, ciascuna delle singole modalità di messa a fuoco automatica (AF), esposizione automatica (AE) e bilanciamento del bianco automatico (AWB) è effettivamente OFF e nessuno dei controlli di acquisizione può essere ignorato dalle routine 3A.
  • In modalità AUTO, AF, AE e AWB vengono eseguiti algoritmi indipendenti e sono presenti voci di metadati per modalità, stato e attivazione, come elencato nella sezione successiva.
  • In USE_SCENE_MODE, il valore della voce ANDROID_CONTROL_SCENE_MODE deve essere utilizzato per determinare il comportamento delle routine 3A. In SCENE_MODE diverse da FACE_PRIORITY, l'HAL deve sostituire i valori di ANDROID_CONTROL_AE/AWB/AF_MODE per impostare la modalità che preferisce per la selezionata SCENE_MODE. Ad esempio, l'HAL potrebbe preferire SCENE_MODE_NIGHT per utilizzare la modalità AF CONTINUOUS_FOCUS. Qualsiasi selezione da parte dell'utente di AE/AWB/AF_MODE quando la scena deve essere ignorata per queste modalità.
  • Per SCENE_MODE_FACE_PRIORITY, i controlli AE/AWB/AFMODE funzionano come in ANDROID_CONTROL_MODE_AUTO, ma le routine 3A devono essere orientate alla misurazione e alla messa a fuoco su eventuali volti rilevati nella scena.

Impostazioni di messa a fuoco automatica e voci dei risultati

Voci di metadati principali
ANDROID_CONTROL_AF_MODE Controllo per selezionare la modalità di messa a fuoco automatica corrente. Impostato dal framework nelle impostazioni della richiesta.
AF_MODE_OFF L'AF è disattivato; il framework/l'app controlla direttamente la posizione dell'obiettivo.
AF_MODE_AUTO Messa a fuoco automatica con un solo passaggio. Nessun movimento dell'obiettivo a meno che non venga attivata l'AF.
AF_MODE_MACRO Messa a fuoco automatica con scansione singola da vicino. Nessun movimento dell'obiettivo a meno che non venga attivata l'AF
AF_MODE_CONTINUOUS_VIDEO Messa a fuoco continua fluida per la registrazione video. L'attivazione immediata blocca lo stato attivo nella posizione corrente. L'annullamento ripristina la messa a fuoco continua.
AF_MODE_CONTINUOUS_PICTURE Messa a fuoco continua rapida per acquisire foto senza tempo di esposizione. L'attivazione blocca lo stato attivo al termine della ricerca attualmente attiva. L'annullamento riprende la messa a fuoco continua.
AF_MODE_EDOF Messa a fuoco avanzata con profondità di campo estesa. Non è presente la funzionalità di scansione dell'autofocus, pertanto l'attivazione o l'annullamento non ha alcun effetto. Le immagini vengono messe automaticamente a fuoco dall'HAL.
ANDROID_CONTROL_AF_STATE Metadati dinamici che descrivono lo stato corrente dell'algoritmo AF, segnalato dall'HAL nei metadati del risultato.
AF_STATE_INACTIVE Non è stato eseguito alcuno scopo o l'algoritmo è stato reimpostato. L'obiettivo non si muove. Sempre lo stato per MODE_OFF o MODE_EDOF. Quando il dispositivo viene aperto, deve avviarsi in questo stato.
AF_STATE_PASSIVE_SCAN Al momento, un algoritmo di messa a fuoco continua è in fase di scansione per trovare una buona messa a fuoco. L'obiettivo si sta muovendo.
AF_STATE_PASSIVE_FOCUSED Un algoritmo di messa a fuoco continua ritiene di essere ben a fuoco. L'obiettivo non si muove. L'HAL potrebbe uscire spontaneamente da questo stato.
AF_STATE_PASSIVE_UNFOCUSED Un algoritmo di messa a fuoco continua ritiene che non sia ben a fuoco. L'obiettivo non si muove. L'HAL potrebbe uscire spontaneamente da questo stato.
AF_STATE_ACTIVE_SCAN È in corso una scansione attivata dall'utente.
AF_STATE_FOCUSED_LOCKED L'algoritmo AF ritiene di essere a fuoco. L'obiettivo non si muove.
AF_STATE_NOT_FOCUSED_LOCKED L'algoritmo AF non è riuscito a mettere a fuoco. L'obiettivo non si muove.
ANDROID_CONTROL_AF_TRIGGER Controllo per avviare una ricerca automatica dell'autofocus, il cui significato dipende dalla modalità e dallo stato. Impostato dal framework nelle impostazioni della richiesta.
AF_TRIGGER_IDLE Nessun attivatore corrente.
AF_TRIGGER_START Attiva l'avvio della scansione AF. L'effetto dipende dalla modalità e dallo stato.
AF_TRIGGER_CANCEL Annullare l'eventuale scansione AF corrente e reimpostare l'algoritmo predefinito.
Voci di metadati aggiuntive
ANDROID_CONTROL_AF_REGIONS Controllo per selezionare le regioni del campo visivo (FOV) da usare per determinare una buona messa a fuoco. Questo vale per tutte le modalità AF che eseguono la ricerca della messa a fuoco. Impostato dal framework nelle impostazioni della richiesta.

Impostazioni di esposizione automatica e voci dei risultati

Voci di metadati principali
ANDROID_CONTROL_AE_MODE Controllo per selezionare la modalità di esposizione automatica corrente. Impostato dal framework nelle impostazioni della richiesta.
AE_MODE_OFF L'esposizione automatica è disattivata; l'utente controlla l'esposizione, il guadagno, la durata del frame e il flash.
AE_MODE_ON Esposizione automatica standard, con il controllo del flash disattivato. L'utente può impostare il flash in modalità di attivazione o torcia.
AE_MODE_ON_AUTO_FLASH Esposizione automatica standard, con flash attivo a discrezione dell'HAL per la preacquisizione e la cattura di foto. Controllo utente del flash disattivato.
AE_MODE_ON_ALWAYS_FLASH Esposizione automatica standard, con il flash sempre attivato per l'acquisizione e a discrezione dell'HAL per la preacquisizione. Controllo utente del flash disattivato.
AE_MODE_ON_AUTO_FLASH_REDEYE Esposizione automatica standard, con flash attivo a discrezione dell'HAL per la preacquisizione e la cattura di foto. Utilizza una raffica di flash alla fine della sequenza di preacquisizione per ridurre l'effetto occhi rossi nella foto finale. Controllo utente del flash disattivato.
AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY Il potenziamento automatico regola automaticamente la luminosità dello stream di anteprima in condizioni di scarsa illuminazione. Ciò può comportare un aumento della sfocatura in movimento e del rumore in condizioni di scarsa illuminazione. I produttori di dispositivi devono assicurarsi che la frequenza fotogrammi non scenda al di sotto di 10 fps.
ANDROID_CONTROL_AE_STATE Metadati dinamici che descrivono lo stato attuale dell'algoritmo AE, registrato dall'HAL nei metadati del risultato.
AE_STATE_INACTIVE Stato AE iniziale dopo il cambio di modalità. Quando il dispositivo viene aperto, deve avviarsi in questo stato.
AE_STATE_SEARCHING L'AE non è convergente a un valore buono e sta regolando i parametri di esposizione.
AE_STATE_CONVERGED L'AE ha trovato valori di esposizione buoni per la scena corrente e i parametri di esposizione non cambiano. HAL può uscire spontaneamente da questo stato per cercare una soluzione migliore.
AE_STATE_LOCKED L'AE è stato bloccato con il controllo AE_LOCK. I valori di esposizione non cambiano.
AE_STATE_FLASH_REQUIRED L'HAL ha convergono l'esposizione, ma ritiene che il flash sia necessario per un'immagine sufficientemente luminosa. Utilizzato per determinare se è possibile utilizzare un frame con tempo di esposizione zero.
AE_STATE_PRECAPTURE L'HAL è nel mezzo di una sequenza di preacquisizione. A seconda della modalità AE, questa modalità può comportare l'accensione del flash per la misurazione o una serie di impulsi del flash per la riduzione dell'effetto occhi rossi.
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER Controllo per avviare una sequenza di misurazione prima di acquisire un'immagine di alta qualità. Impostato dal framework nelle impostazioni della richiesta.
PRECAPTURE_TRIGGER_IDLE Nessun attivatore corrente.
PRECAPTURE_TRIGGER_START Avvia una sequenza di preacquisizione. L'HAL deve utilizzare le richieste successive per misurare un'esposizione/un bilanciamento del bianco ottimali per un'acquisizione futura ad alta risoluzione.
Voci di metadati aggiuntive
ANDROID_CONTROL_AE_LOCK Controllo per bloccare i controlli AE ai valori correnti.
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION Controllo per la regolazione del punto di luminosità target dell'algoritmo AE.
ANDROID_CONTROL_AE_TARGET_FPS_RANGE Controllo per selezionare l'intervallo di frame rate target per l'algoritmo AE. La routine AE non può modificare la frequenza fotogrammi in modo che superi questi limiti.
ANDROID_CONTROL_AE_REGIONS Controllo per selezionare le regioni del FOV da utilizzare per determinare livelli di esposizione ottimali. Questo vale per tutte le modalità AE tranne OFF.

Impostazioni del bilanciamento del bianco automatico e voci dei risultati

Voci di metadati principali
ANDROID_CONTROL_AWB_MODE Controllo per selezionare la modalità di bilanciamento del bianco corrente.
AWB_MODE_OFF Il bilanciamento del bianco automatico è disattivato. L'utente controlla la matrice dei colori.
AWB_MODE_AUTO Il bilanciamento del bianco automatico è attivo; 3A controlla la trasformazione del colore, eventualmente utilizzando trasformazioni più complesse di una semplice matrice.
AWB_MODE_INCANDESCENT Impostazioni di bilanciamento del bianco fisse adatte per illuminazione interna a incandescenza (tungsteno), circa 2700 K.
AWB_MODE_FLUORESCENT Impostazioni di bilanciamento del bianco fisse ideali per l'illuminazione fluorescente, circa 5000 K.
AWB_MODE_WARM_FLUORESCENT Impostazioni di bilanciamento del bianco fisse adatte per l'illuminazione fluorescente, circa 3000 K.
AWB_MODE_DAYLIGHT Impostazioni del bilanciamento del bianco fisse, ideali per la luce del giorno, circa 5500 K.
AWB_MODE_CLOUDY_DAYLIGHT Impostazioni di bilanciamento del bianco fisse ideali per la luce diurna con cielo nuvoloso, circa 6500 K.
AWB_MODE_TWILIGHT Impostazioni del bilanciamento del bianco corrette, ideali per l'alba/il tramonto, circa 15000 K.
AWB_MODE_SHADE Impostazioni di bilanciamento del bianco fisse, ideali per le aree illuminate indirettamente dal sole, circa 7500 K.
ANDROID_CONTROL_AWB_STATE Metadati dinamici che descrivono lo stato corrente dell'algoritmo AWB, segnalato dall'HAL nei metadati del risultato.
AWB_STATE_INACTIVE Stato iniziale AWB dopo il passaggio di modalità. Quando il dispositivo viene aperto, deve avviarsi in questo stato.
AWB_STATE_SEARCHING La bilanciatura automatica del bianco non è convergente a un valore buono e sta modificando i parametri di aggiustamento del colore.
AWB_STATE_CONVERGED Il bilanciamento del bianco automatico ha trovato buoni valori di regolazione del colore per la scena corrente e i parametri non cambiano. HAL può uscire spontaneamente da questo stato per cercare una soluzione migliore.
AWB_STATE_LOCKED L'AWB è stato bloccato con il controllo AWB_LOCK. I valori di aggiustamento del colore non cambiano.
Voci di metadati aggiuntive
ANDROID_CONTROL_AWB_LOCK Controllo per bloccare le regolazioni del colore AWB sui valori attuali.
ANDROID_CONTROL_AWB_REGIONS Controllo per selezionare le regioni del campo visivo da utilizzare per determinare un buon bilanciamento del colore. Questo vale solo per la modalità bilanciamento del bianco automatico.

Note generali sulle transizioni della macchina a stati

Il passaggio da una modalità AF, AE o AWB all'altra reimposta sempre lo stato dell'algoritmo su NON ATTIVO. Analogamente, il passaggio da CONTROL_MODE a CONTROL_SCENE_MODE se CONTROL_MODE == USE_SCENE_MODE reimposta tutti gli stati dell'algoritmo su INACTIVE.

Le tabelle riportate di seguito sono per modalità.

Macchine a stati AF

mode = AF_MODE_OFF o AF_MODE_EDOF
Stato Causa della trasformazione Nuovo stato Note
NON ATTIVO AF è disattivato
mode = AF_MODE_AUTO o AF_MODE_MACRO
Stato Causa della trasformazione Nuovo stato Note
NON ATTIVO AF_TRIGGER ACTIVE_SCAN

Avvia la ricerca automatica dell'AF

Obiettivo in movimento

ACTIVE_SCAN Scansione AF completata FOCUSED_LOCKED

Se AF è andato a buon fine

L'obiettivo è ora bloccato

ACTIVE_SCAN Scansione AF completata NOT_FOCUSED_LOCKED

Se AF è andato a buon fine

L'obiettivo è ora bloccato

ACTIVE_SCAN AF_CANCEL NON ATTIVO

Annullare/reimpostare l'AF

L'obiettivo è ora bloccato

FOCUSED_LOCKED AF_CANCEL NON ATTIVO Annullare/reimpostare l'AF
FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Avvia nuovo rilevamento

Obiettivo in movimento

NOT_FOCUSED_LOCKED AF_CANCEL NON ATTIVO Annullare/reimpostare l'AF
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Avvia nuovo rilevamento

Obiettivo in movimento

Tutti gli stati Cambio modalità NON ATTIVO
mode = AF_MODE_CONTINUOUS_VIDEO
Stato Causa della trasformazione Nuovo stato Note
NON ATTIVO HAL avvia una nuova scansione SCANSIONE_PASSIVA

Avvia la ricerca automatica dell'AF

Obiettivo in movimento

NON ATTIVO AF_TRIGGER NOT_FOCUSED_LOCKED

Query sullo stato AF

L'obiettivo è ora bloccato

SCANSIONE_PASSIVA HAL completa la scansione corrente PASSIVE_FOCUSED

Termina la ricerca AF

L'obiettivo è ora bloccato

SCANSIONE_PASSIVA AF_TRIGGER FOCUSED_LOCKED

Trasformazione immediata se la messa a fuoco è buona

L'obiettivo è ora bloccato

SCANSIONE_PASSIVA AF_TRIGGER NOT_FOCUSED_LOCKED

Trasformazione immediata se il fuoco non è buono

L'obiettivo è ora bloccato

SCANSIONE_PASSIVA AF_CANCEL NON ATTIVO

Reimposta la posizione dell'obiettivo

L'obiettivo è ora bloccato

PASSIVE_FOCUSED HAL avvia una nuova scansione SCANSIONE_PASSIVA

Avvia scansione AF

Obiettivo in movimento

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

Trasformazione immediata se la messa a fuoco è buona

L'obiettivo è ora bloccato

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED Trasformazione immediata se il fuoco non è buono

L'obiettivo è ora bloccato

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED Nessun effetto
FOCUSED_LOCKED AF_CANCEL NON ATTIVO Riavvia la ricerca AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Nessun effetto
NOT_FOCUSED_LOCKED AF_CANCEL NON ATTIVO Riavvia la ricerca AF
mode = AF_MODE_CONTINUOUS_PICTURE
Stato Causa della trasformazione Nuovo stato Note
NON ATTIVO HAL avvia una nuova scansione SCANSIONE_PASSIVA

Avvia scansione AF

Obiettivo in movimento

NON ATTIVO AF_TRIGGER NOT_FOCUSED_LOCKED

Query sullo stato AF

L'obiettivo è ora bloccato

SCANSIONE_PASSIVA HAL completa la scansione corrente PASSIVE_FOCUSED Termina la ricerca AF

L'obiettivo è ora bloccato

SCANSIONE_PASSIVA AF_TRIGGER FOCUSED_LOCKED

Trasformazione eventuale una volta che il focus è buono

L'obiettivo è ora bloccato

SCANSIONE_PASSIVA AF_TRIGGER NOT_FOCUSED_LOCKED

Trasformazione eventuale se non è possibile mettere a fuoco

L'obiettivo è ora bloccato

SCANSIONE_PASSIVA AF_CANCEL NON ATTIVO

Reimposta la posizione dell'obiettivo

L'obiettivo è ora bloccato

PASSIVE_FOCUSED HAL avvia una nuova scansione SCANSIONE_PASSIVA

Avvia scansione AF

Obiettivo in movimento

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

Trasformazione immediata se la messa a fuoco è buona

L'obiettivo è ora bloccato

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED

Trasformazione immediata se il fuoco non è corretto

L'obiettivo è ora bloccato

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED Nessun effetto
FOCUSED_LOCKED AF_CANCEL NON ATTIVO Riavvia la ricerca AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Nessun effetto
NOT_FOCUSED_LOCKED AF_CANCEL NON ATTIVO Riavvia la ricerca AF

Macchine a stati AE e AWB

Le macchine a stati AE e AWB sono per lo più identiche. AE ha stati aggiuntivi FLASH_REQUIRED e PRECAPTURE. Pertanto, le righe di seguito che fanno riferimento a questi due stati devono essere ignorate per la macchina a stati AWB.

mode = AE_MODE_OFF / AWB mode not AUTO
Stato Causa della trasformazione Nuovo stato Note
NON ATTIVO AE/AWB disattivata
mode = AE_MODE_ON_* / AWB_MODE_AUTO
Stato Causa della trasformazione Nuovo stato Note
NON ATTIVO HAL avvia la ricerca AE/AWB RICERCA IN CORSO
NON ATTIVO AE/AWB_LOCK on BLOCCATO Valori bloccati
RICERCA IN CORSO HAL completa la scansione AE/AWB CONVERGED Valori buoni, non cambiano
RICERCA IN CORSO L'HAL completa la scansione AE FLASH_REQUIRED Foto convergente, ma troppo scura senza flash
RICERCA IN CORSO AE/AWB_LOCK on BLOCCATO Valori bloccati
CONVERGED HAL avvia la ricerca AE/AWB RICERCA IN CORSO Valori bloccati
CONVERGED AE/AWB_LOCK on BLOCCATO Valori bloccati
FLASH_REQUIRED HAL avvia la ricerca AE/AWB RICERCA IN CORSO Valori bloccati
FLASH_REQUIRED AE/AWB_LOCK on BLOCCATO Valori bloccati
BLOCCATO AE/AWB_LOCK off RICERCA IN CORSO Valori non validi dopo lo sblocco
BLOCCATO AE/AWB_LOCK off CONVERGED Valori validi dopo lo sblocco
BLOCCATO AE_LOCK off FLASH_REQUIRED Esposizione buona, ma troppo scura
Tutti gli stati AE PRECAPTURE_START PRECAPTURE Avvia la sequenza di preacquisizione
PRECAPTURE Sequenza completata, AE_LOCK disattivato CONVERGED Pronto per l'acquisizione di immagini di alta qualità
PRECAPTURE Sequenza completata, AE_LOCK attivo BLOCCATO Pronto per l'acquisizione di immagini di alta qualità

Attiva il controllo manuale

Nella configurazione dei blocchi 3A del dispositivo sono coinvolti anche diversi controlli per consentire il controllo diretto delle app.

Il modello HAL per il controllo 3A prevede che, per ogni richiesta, l'HAL esamini lo stato dei campi di controllo 3A. Se è attiva una routine 3A, questa override le variabili di controllo correlate e questi valori di override sono disponibili nei metadati del risultato per quella cattura. Ad esempio, se l'esposizione automatica è attivata in una richiesta, l'HAL deve sovrascrivere i campi esposizione, guadagno e durata fotogramma (e potenzialmente i campi flash, a seconda della modalità AE) della richiesta. L'elenco dei controlli pertinenti è:

Nome controllo Unità Note
android.control.mode enum: OFF, AUTO, USE_SCENE_MODE Controllo 3A di alto livello. Se impostato su OFF, tutto il controllo 3A da parte dell'HAL viene disattivato. L'app deve impostare i campi per i parametri di acquisizione. Se impostato su AUTO, vengono applicati i singoli controlli dell'algoritmo in android.control.*, ad esempio android.control.afMode. Se impostato su USE_SCENE_MODE, i singoli controlli in android.control.* sono per lo più disattivate e l'HAL implementa una delle impostazioni della modalità Scena (ad esempio Azione, Tramonto o Festa) come preferisce.
android.control.afMode enum OFF indica il controllo manuale della messa a fuoco dell'obiettivo tramite android.lens.focusDistance.
android.control.aeMode enum OFF indica il controllo manuale dell'esposizione/del guadagno/della durata del fotogramma tramite android.sensor.exposureTime / .sensitivity / .frameDuration
android.control.awbMode enum OFF indica il controllo manuale del bilanciamento del bianco.