Modalità 3A e transizione di stato

Sebbene gli algoritmi 3A effettivi siano all'altezza dell'implementazione HAL, l'interfaccia HAL definisce una descrizione della macchina a stati di alto livello per consentire al dispositivo HAL e al framework di comunicare sullo stato corrente di 3A e attivare eventi 3A.

All'apertura del dispositivo tutti i singoli stati 3A devono essere STATE_INACTIVE. La configurazione del flusso non ripristina 3A. Ad esempio, il focus bloccato deve essere mantenuto durante la chiamata configure() .

L'attivazione di un'azione 3A implica semplicemente l'impostazione della voce di attivazione pertinente nelle impostazioni per la richiesta successiva per indicare l'inizio dell'attivazione. Ad esempio, l'attivatore per l'avvio di una scansione con messa a fuoco automatica imposta la voce ANDROID_CONTROL_AF_TRIGGER su ANDROID_CONTROL_AF_TRIGGER_START per una richiesta; e l'annullamento di una scansione con messa a fuoco automatica viene attivato impostando ANDROID_CONTROL_AF_TRIGGER su ANDROID_CONTRL_AF_TRIGGER_CANCEL. In caso contrario, la voce non esisterà o sarà impostata su ANDROID_CONTROL_AF_TRIGGER_IDLE. Ogni richiesta con una voce di attivazione impostata su un valore non IDLE verrà trattata come un evento di attivazione indipendente.

Al livello superiore, 3A è controllato dall'impostazione ANDROID_CONTROL_MODE. Seleziona tra no 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 automatico del bianco (AWB) sono effettivamente disattivate e nessuno dei controlli di acquisizione può essere sovrascritto dalle routine 3A.
  • Nella modalità AUTO, le modalità AF, AE e AWB eseguono tutte i propri algoritmi indipendenti e hanno la propria modalità, stato e voci di metadati di 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 diversi da FACE_PRIORITY, l'HAL deve sovrascrivere i valori di ANDROID_CONTROL_AE/AWB/AF_MODE per essere la modalità preferita per SCENE_MODE selezionata. Ad esempio, l'HAL potrebbe preferire SCENE_MODE_NIGHT per utilizzare la modalità AF CONTINUOUS_FOCUS. Qualsiasi selezione dell'utente di AE/AWB/AF_MODE quando la scena deve essere ignorata per queste modalità scena.
  • Per SCENE_MODE_FACE_PRIORITY, i controlli AE/AWB/AFMODE funzionano come in ANDROID_CONTROL_MODE_AUTO, ma le routine 3A devono orientarsi verso la misurazione e la messa a fuoco su tutti i volti rilevati nella scena.

Impostazioni di messa a fuoco automatica e voci dei risultati

Principali voci di metadati
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 è disabilitato; il framework/app controlla direttamente la posizione dell'obiettivo.
AF_MODE_AUTO Messa a fuoco automatica a scansione singola. Nessun movimento dell'obiettivo a meno che non venga attivato l'AF.
AF_MODE_MACRO Messa a fuoco automatica ravvicinata con una sola passata. Nessun movimento dell'obiettivo a meno che non venga attivato l'AF
AF_MODE_CONTINUOUS_VIDEO Messa a fuoco continua fluida, per la registrazione di video. L'attivazione blocca immediatamente la messa a fuoco nella posizione corrente. L'annullamento ripristina la messa a fuoco continua.
AF_MODE_CONTINUOUS_PICTURE Messa a fuoco continua e rapida, per riprese fotografiche senza ritardo dell'otturatore. L'attivazione blocca la messa a fuoco una volta conclusa la scansione attualmente attiva. L'annullamento ripristina la messa a fuoco continua.
AF_MODE_EDOF Messa a fuoco avanzata della profondità di campo estesa. Non esiste una scansione della messa a fuoco automatica, quindi attivarne una o annullarne una non ha alcun effetto. Le immagini vengono messe a fuoco automaticamente dall'HAL.
ANDROID_CONTROL_AF_STATE Metadati dinamici che descrivono lo stato corrente dell'algoritmo AF, riportato dall'HAL nei metadati dei risultati.
AF_STATE_INACTIVE Non è stata eseguita la messa a fuoco oppure 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 Un algoritmo di messa a fuoco continua sta attualmente cercando 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 focalizzato. L'obiettivo non si muove. L'HAL può lasciare spontaneamente questo stato.
AF_STATE_PASSIVE_UNFOCUSED Un algoritmo di messa a fuoco continua ritiene di non essere ben focalizzato. L'obiettivo non si muove. L'HAL può lasciare spontaneamente questo stato.
AF_STATE_ACTIVE_SCAN È in corso una scansione attivata dall'utente.
AF_STATE_FOCUSED_LOCKED L'algoritmo AF ritiene che sia 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 l'avvio di una scansione con messa a fuoco automatica, il cui significato dipende dalla modalità e dallo stato. Impostato dal framework nelle impostazioni della richiesta.
AF_TRIGGER_IDLE Nessun trigger attuale.
AF_TRIGGER_START Avvia l'avvio della scansione AF. L'effetto dipende dalla modalità e dallo stato.
AF_TRIGGER_CANCEL Annulla la scansione AF corrente, se presente, e ripristina l'algoritmo ai valori predefiniti.
Voci di metadati aggiuntive
ANDROID_CONTROL_AF_REGIONS Controllo per selezionare le regioni del campo visivo (FOV) da utilizzare per determinare una buona messa a fuoco. Questo vale per tutte le modalità AF che eseguono la scansione della messa a fuoco. Impostato dal framework nelle impostazioni della richiesta.

Impostazioni di esposizione automatica e voci dei risultati

Principali voci di metadati
ANDROID_CONTROL_AE_MODE Controllo per la selezione della modalità di esposizione automatica corrente. Impostato dal framework nelle impostazioni della richiesta.
AE_MODE_OFF L'esposizione automatica è disabilitata; l'utente controlla l'esposizione, il guadagno, la durata del fotogramma e il flash.
AE_MODE_ON Esposizione automatica standard, con controllo flash disabilitato. L'utente può impostare il flash sul fuoco o sulla modalità torcia.
AE_MODE_ON_AUTO_FLASH Esposizione automatica standard, con flash attivato a discrezione di HAL per la pre-acquisizione e l'acquisizione fissa. Controllo utente del flash disabilitato.
AE_MODE_ON_ALWAYS_FLASH Esposizione automatica standard, con flash sempre attivato per l'acquisizione e a discrezione di HAL per la preacquisizione. Controllo utente del flash disabilitato.
AE_MODE_ON_AUTO_FLASH_REDEYE Esposizione automatica standard, con flash attivato a discrezione di HAL per la pre-acquisizione e l'acquisizione fissa. Utilizzare una raffica di flash alla fine della sequenza di pre-acquisizione per ridurre gli occhi rossi nell'immagine finale. Controllo utente del flash disabilitato.
ANDROID_CONTROL_AE_STATE Metadati dinamici che descrivono lo stato corrente dell'algoritmo AE, riportato dall'HAL nei metadati dei risultati.
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 verso un buon valore e sta regolando i parametri di esposizione.
AE_STATE_CONVERGED AE ha rilevato buoni valori di esposizione per la scena corrente e i parametri di esposizione non cambiano. HAL può lasciare spontaneamente questo stato per cercare una soluzione migliore.
AE_STATE_LOCKED AE è stato bloccato con il controllo AE_LOCK. I valori di esposizione non cambiano.
AE_STATE_FLASH_REQUIRED L'HAL ha convergeto l'esposizione ma ritiene che il flash sia necessario per un'immagine sufficientemente luminosa. Utilizzato per determinare se è possibile utilizzare un frame con ritardo dell'otturatore zero.
AE_STATE_PRECAPTURE L'HAL è nel mezzo di una sequenza di precattura. A seconda della modalità AE, questa modalità potrebbe comportare l'attivazione del flash per la misurazione o una serie di impulsi flash per la riduzione degli 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 trigger attuale.
PRECAPTURE_TRIGGER_START Avvia una sequenza di precattura. L'HAL dovrebbe utilizzare le richieste successive per misurare una buona esposizione/bilanciamento del bianco per un'imminente acquisizione ad alta risoluzione.
Voci di metadati aggiuntive
ANDROID_CONTROL_AE_LOCK Controllo per bloccare i controlli AE sui 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 dei fotogrammi in modo che sia al di fuori di questi limiti.
ANDROID_CONTROL_AE_REGIONS Controllo per selezionare le regioni del FOV da utilizzare per determinare buoni livelli di esposizione. Questo vale per tutte le modalità AE tranne OFF.

Impostazioni del bilanciamento automatico del bianco e voci dei risultati

Principali voci di metadati
ANDROID_CONTROL_AWB_MODE Controllo per selezionare la modalità corrente di bilanciamento del bianco.
AWB_MODE_OFF Il bilanciamento automatico del bianco è disabilitato. L'utente controlla la matrice dei colori.
AWB_MODE_AUTO Il bilanciamento del bianco automatico è abilitato; 3A controlla la trasformazione del colore, possibilmente utilizzando trasformazioni più complesse rispetto a una matrice semplice.
AWB_MODE_INCANDESCENTE Impostazioni fisse del bilanciamento del bianco adatte per l'illuminazione interna a incandescenza (tungsteno), circa 2700K.
AWB_MODE_FLUORESCENTE Impostazioni fisse del bilanciamento del bianco adatte per l'illuminazione fluorescente, circa 5000K.
AWB_MODE_WARM_FLUORESCENTE Impostazioni fisse del bilanciamento del bianco adatte per l'illuminazione fluorescente, circa 3000K.
AWB_MODE_DAYLIGHT Risolte le impostazioni di bilanciamento del bianco adatte alla luce del giorno, circa 5500K.
AWB_MODE_CLOUDY_DAYLIGHT Risolte le impostazioni di bilanciamento del bianco adatte alla luce del giorno nuvolosa, circa 6500K.
AWB_MODE_TWILIGHT Risolte le impostazioni del bilanciamento del bianco adatte per l'alba/il tramonto, circa 15.000 K.
AWB_MODE_SHADE Impostazioni fisse del bilanciamento del bianco adatte per aree illuminate indirettamente dal sole, circa 7500K.
ANDROID_CONTROL_AWB_STATE Metadati dinamici che descrivono lo stato corrente dell'algoritmo AWB, riportato dall'HAL nei metadati dei risultati.
AWB_STATE_INACTIVE Stato AWB iniziale dopo il cambio di modalità. Quando il dispositivo viene aperto, deve avviarsi in questo stato.
AWB_STATE_SEARCHING L'AWB non è convertito a un buon valore e sta modificando i parametri di regolazione del colore.
AWB_STATE_CONVERGED AWB ha rilevato buoni valori di regolazione del colore per la scena corrente e i parametri non cambiano. HAL può lasciare spontaneamente questo stato per cercare una soluzione migliore.
AWB_STATE_LOCKED AWB è stato bloccato con il controllo AWB_LOCK. I valori di regolazione del colore non cambiano.
Voci di metadati aggiuntive
ANDROID_CONTROL_AWB_LOCK Controllo per bloccare le regolazioni del colore AWB sui valori correnti.
ANDROID_CONTROL_AWB_REGIONS Controllo per selezionare le regioni del FOV da utilizzare per determinare un buon bilanciamento del colore. Questo vale solo per la modalità di bilanciamento del bianco automatico.

Note generali sulla transizione della macchina a stati

Il passaggio tra le modalità AF, AE o AWB reimposta sempre lo stato dell'algoritmo su INACTIVE. Allo stesso modo, il passaggio tra CONTROL_MODE o CONTROL_SCENE_MODE se CONTROL_MODE == USE_SCENE_MODE reimposta tutti gli stati dell'algoritmo su INACTIVE.

Le tabelle seguenti sono per modalità.

Macchine a stati AF

modalità = AF_MODE_OFF o AF_MODE_EDOF
Stato Causa della trasformazione Nuovo stato Appunti
INATTIVO L'AF è disabilitato
modalità = AF_MODE_AUTO o AF_MODE_MACRO
Stato Causa della trasformazione Nuovo stato Appunti
INATTIVO AF_TRIGGER ACTIVE_SCAN

Avvia la scansione AF

Obiettivo ora in movimento

ACTIVE_SCAN Scansione AF completata FOCUSATO_BLOCCATO

Se l'AF ha avuto successo

Obiettivo ora bloccato

ACTIVE_SCAN Scansione AF completata NOT_FOCUSED_LOCKED

Se l'AF ha avuto successo

Obiettivo ora bloccato

ACTIVE_SCAN AF_CANCEL INATTIVO

Annulla/reimposta AF

Obiettivo ora bloccato

FOCUSATO_BLOCCATO AF_CANCEL INATTIVO Annulla/reimposta AF
FOCUSATO_BLOCCATO AF_TRIGGER ACTIVE_SCAN

Inizia una nuova scansione

Obiettivo ora in movimento

NOT_FOCUSED_LOCKED AF_CANCEL INATTIVO Annulla/reimposta AF
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

Inizia una nuova scansione

Obiettivo ora in movimento

Tutti gli stati Cambio di modalità INATTIVO
modalità = AF_MODE_CONTINUOUS_VIDEO
Stato Causa della trasformazione Nuovo stato Appunti
INATTIVO L'HAL avvia una nuova scansione PASSIVA_SCANSIONE

Avvia la scansione AF

Obiettivo ora in movimento

INATTIVO AF_TRIGGER NOT_FOCUSED_LOCKED

Interrogazione sullo stato AF

Obiettivo ora bloccato

PASSIVA_SCANSIONE L'HAL completa la scansione corrente PASSIVO_FOCUSATO

Termina la scansione AF

Obiettivo ora bloccato

PASSIVA_SCANSIONE AF_TRIGGER FOCUSATO_BLOCCATO

Trasformazione immediata se la messa a fuoco è buona

Obiettivo ora bloccato

PASSIVA_SCANSIONE AF_TRIGGER NOT_FOCUSED_LOCKED

Trasformazione immediata se la messa a fuoco è scarsa

Obiettivo ora bloccato

PASSIVA_SCANSIONE AF_CANCEL INATTIVO

Ripristina la posizione dell'obiettivo

Obiettivo ora bloccato

PASSIVO_FOCUSATO L'HAL avvia una nuova scansione PASSIVA_SCANSIONE

Avvia la scansione AF

Obiettivo ora in movimento

PASSIVO_FOCUSATO AF_TRIGGER FOCUSATO_BLOCCATO

Trasformazione immediata se la messa a fuoco è buona

Obiettivo ora bloccato

PASSIVO_FOCUSATO AF_TRIGGER NOT_FOCUSED_LOCKED Trasformazione immediata se la messa a fuoco è scarsa

Obiettivo ora bloccato

FOCUSATO_BLOCCATO AF_TRIGGER FOCUSATO_BLOCCATO Nessun effetto
FOCUSATO_BLOCCATO AF_CANCEL INATTIVO Riavviare la scansione AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Nessun effetto
NOT_FOCUSED_LOCKED AF_CANCEL INATTIVO Riavviare la scansione AF
modalità = AF_MODE_CONTINUOUS_PICTURE
Stato Causa della trasformazione Nuovo stato Appunti
INATTIVO L'HAL avvia una nuova scansione PASSIVA_SCANSIONE

Avvia la scansione AF

Obiettivo ora in movimento

INATTIVO AF_TRIGGER NOT_FOCUSED_LOCKED

Interrogazione sullo stato AF

Obiettivo ora bloccato

PASSIVA_SCANSIONE L'HAL completa la scansione corrente PASSIVO_FOCUSATO Termina la scansione AF

Obiettivo ora bloccato

PASSIVA_SCANSIONE AF_TRIGGER FOCUSATO_BLOCCATO

L'eventuale trasformazione una volta focalizzata è buona

Obiettivo ora bloccato

PASSIVA_SCANSIONE AF_TRIGGER NOT_FOCUSED_LOCKED

Eventuale trasformazione se non si riesce a concentrarsi

Obiettivo ora bloccato

PASSIVA_SCANSIONE AF_CANCEL INATTIVO

Ripristina la posizione dell'obiettivo

Obiettivo ora bloccato

PASSIVO_FOCUSATO L'HAL avvia una nuova scansione PASSIVA_SCANSIONE

Avvia la scansione AF

Obiettivo ora in movimento

PASSIVO_FOCUSATO AF_TRIGGER FOCUSATO_BLOCCATO

Trasformazione immediata se la messa a fuoco è buona

Obiettivo ora bloccato

PASSIVO_FOCUSATO AF_TRIGGER NOT_FOCUSED_LOCKED

Trasformazione immediata se la messa a fuoco è scarsa

Obiettivo ora bloccato

FOCUSATO_BLOCCATO AF_TRIGGER FOCUSATO_BLOCCATO Nessun effetto
FOCUSATO_BLOCCATO AF_CANCEL INATTIVO Riavviare la scansione AF
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED Nessun effetto
NOT_FOCUSED_LOCKED AF_CANCEL INATTIVO Riavviare la scansione AF

Macchine a stati AE e AWB

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

modalità = AE_MODE_OFF / modalità AWB non AUTO
Stato Causa della trasformazione Nuovo stato Appunti
INATTIVO AE/AWB disabilitato
modalità = AE_MODE_ON_* / AWB_MODE_AUTO
Stato Causa della trasformazione Nuovo stato Appunti
INATTIVO L'HAL avvia la scansione AE/AWB RICERCA
INATTIVO AE/AWB_LOCK attivato BLOCCATO Valori bloccati
RICERCA HAL termina la scansione AE/AWB CONVERGENTE Buoni valori, che non cambiano
RICERCA HAL termina la scansione AE FLASH_REQUIRED Convergente ma troppo scuro senza flash
RICERCA AE/AWB_LOCK attivato BLOCCATO Valori bloccati
CONVERGENTE L'HAL avvia la scansione AE/AWB RICERCA Valori bloccati
CONVERGENTE AE/AWB_LOCK attivato BLOCCATO Valori bloccati
FLASH_REQUIRED L'HAL avvia la scansione AE/AWB RICERCA Valori bloccati
FLASH_REQUIRED AE/AWB_LOCK attivato BLOCCATO Valori bloccati
BLOCCATO AE/AWB_LOCK disattivato RICERCA Valori non buoni dopo lo sblocco
BLOCCATO AE/AWB_LOCK disattivato CONVERGENTE Valori buoni dopo lo sblocco
BLOCCATO AE_LOCK disattivato FLASH_REQUIRED Esposizione buona, ma troppo scura
Tutti gli stati dell'AE PRECAPTURE_INIZIO PRECAPTURA Avvia la sequenza di precattura
PRECAPTURA Sequenza terminata, AE_LOCK disattivato CONVERGENTE Pronto per l'acquisizione di alta qualità
PRECAPTURA Sequenza terminata, AE_LOCK attivo BLOCCATO Pronto per l'acquisizione di alta qualità

Abilitazione del controllo manuale

Diversi controlli sono inoltre coinvolti nella configurazione dei blocchi 3A del dispositivo per consentire il controllo diretto dell'applicazione.

Il modello HAL per il controllo 3A prevede che per ogni richiesta l'HAL controlli lo stato dei campi di controllo 3A. Se una qualsiasi routine 3A è abilitata, tale routine sovrascrive le variabili di controllo ad essa correlate e questi valori di sovrascrittura saranno quindi disponibili nei metadati dei risultati per quella acquisizione. Quindi, ad esempio, se l'esposizione automatica è abilitata in una richiesta, l'HAL dovrebbe sovrascrivere i campi di esposizione, guadagno e durata del fotogramma (e potenzialmente i campi flash, a seconda della modalità AE) della richiesta. L'elenco dei controlli rilevanti è:

Nome del controllo Unità Appunti
android.control.mode enum: OFF, AUTO, USE_SCENE_MODE Controllo 3A di alto livello. Quando impostato su OFF, tutti i controlli 3A da parte dell'HAL sono disabilitati. L'applicazione stessa deve impostare i campi per i parametri di acquisizione. Se impostato su AUTO, sono attivi 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ù disabilitati e l'HAL implementa una delle impostazioni della modalità scena (come AZIONE, TRAMONTO o PARTY) come desidera.
android.control.afMode enum OFF significa controllo manuale della messa a fuoco dell'obiettivo tramite android.lens.focusDistance.
android.control.aeMode enum OFF significa controllo manuale di esposizione/guadagno/durata del fotogramma tramite android.sensor.exposureTime / .sensitivity / .frameDuration
android.control.awbMode enum OFF significa controllo manuale del bilanciamento del bianco.