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. |