HAL della fotocamera

L'hardware abstraction layer (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 l'API HAL della fotocamera a un'interfaccia stabile definita dal linguaggio di descrizione dell'interfaccia HAL (HIDL). Se in precedenza hai sviluppato un modulo e un driver HAL della fotocamera per Android 7.0 e versioni precedenti, tieni presente che la pipeline della fotocamera 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 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 fotocamera HIDL alle interfacce della fotocamera 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 fotocamera AIDL, consulta hardware/google/camera/common/hal/aidl_service/.

Le specifiche dell'HAL della fotocamera 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.

Convalidare l'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 test, VtsAidlHalCameraProvider_TargetTest.cpp.

Funzionalità di Camera HAL3

L'obiettivo della riprogettazione dell'API della fotocamera di Android è aumentare notevolmente la capacità delle app di controllare il sottosistema della fotocamera sui dispositivi Android, riorganizzando al contempo l'API per renderla più efficiente e gestibile. Il controllo aggiuntivo semplifica la creazione di app per fotocamere di alta qualità sui dispositivi Android che possono funzionare in modo affidabile su più prodotti, utilizzando al contempo algoritmi specifici del dispositivo, ove possibile, per massimizzare la qualità e le prestazioni.

La versione 3 delle strutture del sottosistema della fotocamera organizza le modalità operative in un'unica visualizzazione unificata, che può essere utilizzata per implementare una qualsiasi delle modalità precedenti e diverse altre, ad esempio la modalità di scatto continuo. Ciò si traduce in un migliore controllo dell'utente per la messa a fuoco e l'esposizione e in una maggiore post-elaborazione, come la riduzione del rumore, il contrasto e la 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 fotocamera come una pipeline che converte le richieste in entrata per l'acquisizione di frame in frame, su base 1:1. Le richieste incapsulano tutte le informazioni di configurazione sull'acquisizione ed 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à operative 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 set di risultati vengono generati metadati che contengono informazioni come gli spazi colore e l'ombreggiatura dell'obiettivo. Puoi considerare la versione 3 della fotocamera come una pipeline per lo stream unidirezionale della versione 1 della fotocamera. Converte ogni richiesta di acquisizione in un'immagine acquisita dal sensore, che viene elaborata in:

  • Un oggetto risultato con metadati sull'acquisizione.
  • Da uno a N buffer di dati immagine, ognuno nella propria superficie di destinazione.

Il set di superfici di output possibili è preconfigurato:

  • Ogni superficie è una destinazione per uno stream di buffer di immagini di una risoluzione fissa.
  • È possibile configurare come output contemporaneamente solo un piccolo numero di superfici (~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 (dal set totale configurato). Una richiesta può essere una tantum (con capture()) o può essere ripetuta indefinitamente (con setRepeatingRequest()). Le acquisizioni hanno la priorità sulle richieste ripetute.

Modello di dati della videocamera

Figura 1. Modello operativo principale della fotocamera

Panoramica di Camera HAL1

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

  • Anteprima
  • Registrazione video
  • Acquisizione di immagini fisse

Ogni modalità ha funzionalità leggermente diverse e sovrapposte. Ciò ha reso difficile l'implementazione di nuove funzionalità come la modalità di scatto continuo, che rientra tra due delle modalità operative.

Diagramma a blocchi della videocamera

Figura 2. Componenti della fotocamera

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

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