Il livello di astrazione hardware della fotocamera di Android (HAL) collega le API del framework della fotocamera di livello superiore in android.hardware.camera2 al driver e all'hardware della fotocamera sottostante. A partire da Android 13, lo sviluppo dell'interfaccia HAL della fotocamera utilizza AIDL . Android 8.0 ha introdotto Treble , trasformando l'API HAL della fotocamera in un'interfaccia stabile definita dal linguaggio di descrizione dell'interfaccia HAL (HIDL). Se in precedenza hai sviluppato un modulo HAL per fotocamera e un driver per Android 7.0 e versioni precedenti, tieni presente i cambiamenti significativi nella pipeline della fotocamera.
Telecamera AIDL HAL
Per i dispositivi con Android 13 o versioni successive, il framework della fotocamera include il supporto per HAL della fotocamera AIDL. Il framework della fotocamera supporta anche gli HAL della fotocamera HIDL, tuttavia le funzionalità della fotocamera aggiunte in Android 13 o versioni successive sono disponibili solo tramite le interfacce HAL della fotocamera AIDL. Per implementare tali funzionalità sui dispositivi che eseguono l'aggiornamento ad Android 13 o versioni successive, i produttori di dispositivi devono migrare il loro processo HAL dall'utilizzo delle interfacce della fotocamera HIDL alle interfacce della fotocamera AIDL.
Per ulteriori informazioni sui vantaggi dell'AIDL, vedere AIDL per HAL .
Implementare la telecamera AIDL HAL
Per un'implementazione di riferimento di una telecamera AIDL HAL, vedere hardware/google/camera/common/hal/aidl_service/
.
Le specifiche HAL della telecamera AIDL si trovano nelle seguenti posizioni:
- Fornitore della fotocamera:
hardware/interfaces/camera/provider/aidl/
- Dispositivo fotocamera:
hardware/interfaces/camera/device/aidl/
- Metadati della fotocamera:
hardware/interfaces/camera/metadata/aidl/
- Tipi di dati comuni:
hardware/interfaces/camera/common/aidl/
Per i dispositivi che migrano ad AIDL, i produttori di dispositivi potrebbero dover modificare la politica SELinux di Android (sepolicy) e i file RC a seconda della struttura del codice.
Convalida la telecamera AIDL HAL
Per testare l'implementazione HAL della videocamera AIDL, assicurati che il dispositivo superi tutti i test CTS e VTS. Android 13 introduce il test AIDL VTS, VtsAidlHalCameraProvider_TargetTest.cpp
.
Caratteristiche della fotocamera HAL3
L'obiettivo della riprogettazione dell'API della fotocamera Android è aumentare sostanzialmente la capacità delle app di controllare il sottosistema della fotocamera sui dispositivi Android, riorganizzando l'API per renderla più efficiente e manutenibile. Il controllo aggiuntivo semplifica la creazione di app per fotocamere di alta qualità su dispositivi Android in grado di funzionare in modo affidabile su più prodotti pur utilizzando algoritmi specifici del dispositivo, ove possibile, per massimizzare la qualità e le prestazioni.
La versione 3 del sottosistema della telecamera struttura le modalità operative in un'unica vista unificata, che può essere utilizzata per implementare una qualsiasi delle modalità precedenti e molte altre, come la modalità burst. Ciò si traduce in un migliore controllo da parte dell'utente per la messa a fuoco e l'esposizione e 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 fotocamera.
L'API modella il sottosistema della telecamera come una pipeline che converte le richieste in entrata di acquisizioni di fotogrammi in fotogrammi, su base 1:1. Le richieste incapsulano tutte le informazioni di configurazione sull'acquisizione e l'elaborazione di un frame. Ciò include la risoluzione e il formato dei pixel; sensore manuale, obiettivo e controllo flash; modalità di funzionamento 3A; Controllo dell'elaborazione RAW->YUV; generazione di statistiche; e così via.
In termini semplici, il framework dell'applicazione richiede un frame dal sottosistema della telecamera e il sottosistema della telecamera restituisce i risultati a un flusso di output. Inoltre, per ogni serie di risultati vengono generati metadati che contengono informazioni come spazi colore e ombreggiatura della lente. Puoi pensare alla fotocamera versione 3 come una pipeline per il flusso unidirezionale della fotocamera versione 1. Converte ogni richiesta di acquisizione in un'immagine catturata dal sensore, che viene elaborata in:
- Un oggetto risultato con metadati sull'acquisizione.
- Da uno a N buffer di dati immagine, ciascuno nella propria superficie di destinazione.
L'insieme delle possibili superfici di uscita è preconfigurato:
- Ogni superficie è una destinazione per un flusso di buffer di immagini a risoluzione fissa.
- È possibile configurare come uscite solo un numero limitato di superfici contemporaneamente (~3).
Una richiesta contiene tutte le impostazioni di acquisizione desiderate e l'elenco delle superfici di output in cui inserire i buffer di immagini per questa richiesta (sul set totale configurato). Una richiesta può essere one-shot (con capture()
) o può essere ripetuta all'infinito (con setRepeatingRequest()
). Le acquisizioni hanno la priorità sulle richieste ripetute.

Figura 1. Modello di funzionamento del core della fotocamera
Panoramica della telecamera HAL1
La versione 1 del sottosistema telecamera è stata progettata come una scatola nera con controlli di alto livello e le seguenti tre modalità operative:
- Anteprima
- Registrazione video
- Cattura ancora
Ogni modalità ha capacità leggermente diverse e sovrapposte. Ciò ha reso difficile l'implementazione di nuove funzionalità come la modalità burst, che rientra tra due delle modalità operative.

Figura 2. Componenti della fotocamera
Android 7.0 continua a supportare la fotocamera HAL1 poiché molti dispositivi fanno ancora affidamento su di essa. Inoltre, il servizio fotocamera Android supporta l'implementazione di entrambi gli HAL (1 e 3), utile quando si desidera supportare una fotocamera frontale meno capace con fotocamera HAL1 e una fotocamera posteriore più avanzata con fotocamera HAL3.
C'è un singolo modulo HAL della telecamera (con il proprio numero di versione ), che elenca più dispositivi della telecamera indipendenti che hanno ciascuno il proprio numero di versione. Il modulo fotocamera 2 o più recente è necessario per supportare i dispositivi 2 o più recenti e tali moduli fotocamera possono avere un mix di versioni del dispositivo fotocamera (questo è ciò che intendiamo quando diciamo che Android supporta l'implementazione di entrambi gli HAL).