Il livello di astrazione hardware della videocamera (HAL) di Android collega le API del framework della videocamera di livello superiore in android.hardware.camera2 al driver e all'hardware della videocamera sottostanti. A partire da Android 13, lo sviluppo dell'interfaccia HAL della fotocamera utilizza AIDL. Android 8.0 ha introdotto Treble, passando l'API Camera HAL a un'interfaccia stabile definita dal linguaggio HIDL (interfaccia di descrizione dell'interfaccia HAL). Se in precedenza hai sviluppato un modulo e un driver HAL della videocamera per Android 7.0 e versioni precedenti, tieni presente che la pipeline della videocamera ha subito modifiche significative.
HAL della fotocamera AIDL
Per i dispositivi con Android 13 o versioni successive, il framework della fotocamera include il supporto per gli HAL della fotocamera AIDL. Il framework della fotocamera supporta anche gli HAL per fotocamere 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 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 HIDL della fotocamera alle interfacce AIDL della fotocamera.
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 fotocamera AIDL, consulta
hardware/google/camera/common/hal/aidl_service/
.
Le specifiche HAL della fotocamera AIDL si trovano nelle seguenti posizioni:
- Fornitore della videocamera:
hardware/interfaces/camera/provider/aidl/
- Dispositivo della videocamera:
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 di cui è in corso la migrazione ad AIDL, i produttori potrebbero dover modificare il criterio SELinux di Android (sepolicy) e i file RC a seconda della struttura del codice.
Convalida HAL della fotocamera AIDL
Per testare l'implementazione dell'HAL della fotocamera AIDL, assicurati che il dispositivo superi tutti i test CTS e VTS. Android 13 introduce il
test VTS AIDL,
VtsAidlHalCameraProvider_TargetTest.cpp
.
Funzionalità della fotocamera HAL3
Lo scopo del nuovo design dell'API Android Camera è aumentare notevolmente la capacità delle app di controllare il sottosistema della fotocamera sui dispositivi Android, nonché riorganizzare l'API per renderla più efficiente e manutenibile. Il controllo aggiuntivo semplifica la creazione di app per fotocamere di alta qualità su dispositivi Android che possono funzionare in modo affidabile su più prodotti, continuando a utilizzare algoritmi specifici per il dispositivo, ove possibile, per massimizzare la qualità e le prestazioni.
La versione 3 del sottosistema della videocamera organizza le modalità di funzionamento in una singola visualizzazione unificata, che può essere utilizzata per implementare qualsiasi modalità precedente e molte altre, ad esempio la modalità burst. Ciò consente all'utente di avere un maggiore controllo su messa a fuoco ed esposizione e di eseguire più post-elaborazione, come riduzione del rumore, contrasto e affinamento. 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 arrivo per l'acquisizione di frame in frame, su una base 1:1. Le richieste coprono tutte le informazioni di configurazione relative all'acquisizione e all'elaborazione di un frame. Sono inclusi la risoluzione e il formato dei pixel; il controllo manuale del sensore, dell'obiettivo e del flash; le modalità di funzionamento 3A; il controllo dell'elaborazione RAW->YUV; la generazione di statistiche; e così via.
In termini semplici, il framework dell'applicazione richiede un frame dal sottosistema della fotocamera e il sottosistema della fotocamera restituisce i risultati a uno stream di output. Inoltre, per ogni insieme di risultati vengono generati metadati contenenti informazioni quali spazi di colore e ombreggiatura dell'obiettivo. Puoi considerare la versione 3 della videocamera come una pipeline per lo stream unidirezionale della versione 1 della videocamera. Converte ogni richiesta di acquisizione in un'immagine acquisita dal sensore, che viene elaborata in:
- Un oggetto risultato con i metadati della cattura.
- Da uno a N buffer di dati immagine, ciascuno nella propria superficie di destinazione.
L'insieme delle possibili piattaforme di output è preconfigurato:
- Ogni superficie è una destinazione per un flusso di buffer di immagine con risoluzione fissa.
- È possibile configurare come output contemporaneamente solo un numero limitato di superfici (~3).
Una richiesta contiene tutte le impostazioni di acquisizione desiderate e l'elenco delle superfici di output in cui eseguire il push dei buffer delle immagini per questa richiesta (dal set totale configurato). Una richiesta può essere una singola richiesta (con capture()
) o può essere ripetuta a tempo indeterminato (con setRepeatingRequest()
). Le acquisizioni hanno la priorità sulle richieste ripetute.
Panoramica dell'HAL1 della fotocamera
La versione 1 del sottosistema della fotocamera è stata progettata come una scatola nera con controlli di alto livello e le seguenti tre modalità di funzionamento:
- Anteprima
- Registrazione video
- Acquisizione di foto
Ogni modalità ha funzionalità leggermente diverse e che si sovrappongono. Ciò ha reso difficile implementare nuove funzionalità come la modalità burst, che si colloca tra due delle modalità di funzionamento.
Android 7.0 continua a supportare la fotocamera HAL1 perché molti dispositivi si basano ancora su questo protocollo. Inoltre, il servizio della fotocamera Android supporta l'implementazione di entrambi gli HAL (1 e 3), il che è utile quando vuoi supportare una fotocamera frontale meno capace con la fotocamera HAL1 e una fotocamera posteriore più avanzata con la fotocamera HAL3.
Esiste un singolo modulo HAL della videocamera (con il proprio numero di versione), che elenca più dispositivi videocamera indipendenti, ciascuno con il proprio numero di versione. Per supportare i dispositivi 2 o versioni successive, è richiesto il modulo fotocamera 2 o versioni successive. Questi moduli possono avere una combinazione di versioni dei dispositivi della videocamera (questo è ciò che intendiamo quando diciamo che Android supporta l'implementazione di entrambi gli HAL).