HAL della fotocamera

Il livello di astrazione hardware (HAL) della fotocamera di Android collega le API del framework della fotocamera di livello superiore in android.hardware.camera2 al driver e all'hardware della fotocamera sottostanti. A partire da Android 13, lo sviluppo dell'interfaccia HAL della fotocamera utilizza AIDL. Android 8.0 ha introdotto Treble, passando all'API Camera HAL a un'interfaccia stabile definita dal linguaggio di descrizione dell'interfaccia HAL (HIDL). Se in precedenza hai sviluppato un modulo HAL e un driver della videocamera per Android 7.0 e versioni precedenti, tieni presente che sono state apportate modifiche significative alla pipeline della videocamera.

HAL della videocamera AIDL

Per i dispositivi con Android 13 o versioni successive, il framework della fotocamera include il supporto per le HAL della fotocamera AIDL. Il framework della fotocamera supporta anche le HAL della fotocamera HIDL, ma le funzionalità della fotocamera aggiunte in Android 13 o versioni successive sono disponibili solo tramite le interfacce HAL della fotocamera AIDL. Per implementare queste funzionalità sui dispositivi che eseguono l'upgrade ad Android 13 o versioni successive, i produttori di dispositivi devono eseguire la migrazione del processo HAL dall'utilizzo delle interfacce della videocamera HIDL alle interfacce della videocamera AIDL.

Per scoprire i vantaggi di AIDL, consulta AIDL per HAL.

Implementare l'HAL della fotocamera AIDL

Per un'implementazione di riferimento di un HAL della videocamera AIDL, vedi hardware/google/camera/common/hal/aidl_service/.

Le specifiche dell'HAL della videocamera AIDL si trovano nelle seguenti posizioni:

Per i dispositivi che eseguono la migrazione ad AIDL, i produttori di dispositivi potrebbero dover modificare i file Android SELinux policy (sepolicy) e RC a seconda della struttura del codice.

Convalida dell'HAL della fotocamera AIDL

Per testare l'implementazione dell'HAL della videocamera AIDL, assicurati che il dispositivo superi tutti i test CTS e VTS. Android 13 introduce il test VTS AIDL, VtsAidlHalCameraProvider_TargetTest.cpp.

Funzionalità HAL3 della fotocamera

Lo scopo della riprogettazione dell'API Android Camera è aumentare in modo sostanziale la capacità delle app di controllare il sottosistema della fotocamera sui dispositivi Android, riorganizzando l'API per renderla più efficiente e gestibile. Il controllo aggiuntivo semplifica la creazione di app per fotocamera di alta qualità su dispositivi Android in grado di funzionare in modo affidabile su più prodotti, utilizzando comunque algoritmi specifici del dispositivo, ove possibile, per massimizzare la qualità e le prestazioni.

La versione 3 del sottosistema della videocamera struttura le modalità operative in una singola visualizzazione unificata, che può essere utilizzata per implementare una qualsiasi delle modalità precedenti e molte altre, come la modalità scatto a raffica. Ciò si traduce in un migliore controllo da parte dell'utente per messa a fuoco ed esposizione e in una maggiore post-elaborazione, come riduzione del rumore, contrasto e nitidezza. Inoltre, questa visualizzazione semplificata consente agli sviluppatori di applicazioni di utilizzare più facilmente le varie funzioni della videocamera.

L'API modella il sottosistema della videocamera come una pipeline che converte le richieste in entrata di acquisizione di frame in frame, su base 1:1. Le richieste contengono tutte le informazioni di configurazione relative all'acquisizione e all'elaborazione di un frame. Sono inclusi risoluzione e formato pixel; controllo manuale di sensore, obiettivo e flash; modalità operative 3A; controllo dell'elaborazione RAW->YUV; generazione di statistiche; e così via.

In termini semplici, il framework dell'applicazione richiede un frame al sottosistema della videocamera e il sottosistema della videocamera restituisce i risultati a un flusso di output. Inoltre, per ogni insieme di risultati vengono generati metadati che contengono informazioni come spazi colore e ombreggiatura dell'obiettivo. Puoi considerare la versione 3 della videocamera come una pipeline per lo stream unidirezionale della versione 1. Converte ogni richiesta di acquisizione in un'immagine acquisita dal sensore, che viene elaborata in:

  • Un oggetto risultato con metadati sulla cattura.
  • Da 1 a N buffer di dati immagine, ciascuno nella propria superficie di destinazione.

L'insieme delle possibili superfici di output è preconfigurato:

  • Ogni superficie è una destinazione per un flusso di buffer di immagini a risoluzione fissa.
  • È possibile configurare solo un numero limitato di superfici come output contemporaneamente (~3).

Una richiesta contiene tutte le impostazioni di acquisizione desiderate e l'elenco delle superfici di output in cui inserire i buffer delle immagini per questa richiesta (dal set totale configurato). Una richiesta può essere one-shot (con capture()) o ripetuta all'infinito (con setRepeatingRequest()). Le acquisizioni hanno la priorità sulle richieste ripetute.

Modello di dati della videocamera

Figura 1. Modello di funzionamento del core della videocamera

Panoramica di HAL1 della fotocamera

La versione 1 del sottosistema della videocamera è stata progettata come una scatola nera con controlli di alto livello e le seguenti tre modalità operative:

  • Anteprima
  • Registrazione video
  • Acquisizione di foto

Ogni modalità ha funzionalità leggermente diverse e sovrapposte. In questo modo era difficile implementare nuove funzionalità come la modalità Burst, che rientra tra due delle modalità operative.

Diagramma a blocchi della videocamera

Figura 2. Componenti della videocamera

Android 7.0 continua a supportare la fotocamera HAL1, poiché molti dispositivi si basano ancora su questa API. Inoltre, il servizio fotocamera Android supporta l'implementazione di entrambe le HAL (1 e 3), il che è utile quando vuoi supportare una fotocamera anteriore meno potente con la HAL della fotocamera 1 e una fotocamera posteriore più avanzata con la HAL della fotocamera 3.

Esiste un singolo modulo HAL della videocamera (con il proprio numero di versione), che elenca più dispositivi videocamera indipendenti, ognuno con il proprio numero di versione. Per supportare i dispositivi 2 o versioni successive è necessario il modulo della videocamera 2 o versioni successive e questi moduli possono avere una combinazione di versioni del dispositivo videocamera (questo è ciò che intendiamo quando affermiamo che Android supporta l'implementazione di entrambe le HAL).