Fotocamera HAL

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 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 e un driver della fotocamera 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 gli 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 processo HAL dall'utilizzo delle interfacce per fotocamera HIDL alle interfacce per fotocamera AIDL.

Per conoscere i vantaggi di AIDL, vedere AIDL per HAL .

Implementare l'HAL della fotocamera AIDL

Per un'implementazione di riferimento di un HAL per fotocamera AIDL, vedere hardware/google/camera/common/hal/aidl_service/ .

Le specifiche HAL della fotocamera AIDL si trovano nelle seguenti posizioni:

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

Convalidare l'HAL della telecamera AIDL

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

Caratteristiche della fotocamera HAL3

Lo scopo della riprogettazione dell'API della fotocamera Android è aumentare sostanzialmente 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 fotocamera di alta qualità su dispositivi Android in grado di funzionare in modo affidabile su più prodotti, pur utilizzando algoritmi specifici del dispositivo quando possibile per massimizzare la qualità e le prestazioni.

La versione 3 del sottosistema della fotocamera struttura le modalità operative in un'unica visualizzazione unificata, che può essere utilizzata per implementare qualsiasi modalità precedente e molte altre, come la modalità burst. Ciò si traduce in un migliore controllo da parte dell'utente per messa a fuoco ed esposizione e una maggiore post-elaborazione, come riduzione del rumore, contrasto e nitidezza. Inoltre, questa visualizzazione semplificata rende più semplice per gli sviluppatori di applicazioni l'utilizzo delle varie funzioni della fotocamera.

L'API modella il sottosistema della fotocamera come una pipeline che converte le richieste in entrata per l'acquisizione di fotogrammi in fotogrammi, su base 1:1. Le richieste incapsulano tutte le informazioni di configurazione relative alla cattura e all'elaborazione di un frame. Ciò include la risoluzione e il formato pixel; controllo manuale del sensore, dell'obiettivo e del flash; Modalità operative 3A; Controllo elaborazione RAW->YUV; 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 un flusso di output. Inoltre, per ogni serie di risultati vengono generati metadati che contengono informazioni quali spazi colore e ombreggiatura delle lenti. Puoi pensare alla versione 3 della fotocamera come a una pipeline verso il flusso unidirezionale della 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 di immagine, ciascuno nella propria superficie di destinazione.

L'insieme delle possibili superfici di output è preconfigurato:

  • Ciascuna superficie è una destinazione per un flusso di buffer di immagini con una risoluzione fissa.
  • Solo un numero limitato di superfici può essere configurato 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 (del set totale configurato). Una richiesta può essere one-shot (con capture() ), oppure può essere ripetuta indefinitamente (con setRepeatingRequest() ). Le acquisizioni hanno priorità rispetto alle richieste ripetute.

Modello di dati della fotocamera

Figura 1. Modello di funzionamento principale della fotocamera

Panoramica della telecamera 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
  • Cattura ancora

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

Diagramma a blocchi della telecamera

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), il che è utile quando si desidera supportare una fotocamera frontale con meno funzionalità con la fotocamera HAL1 e una fotocamera posteriore più avanzata con fotocamera HAL3.

Esiste un modulo HAL per telecamera singola (con il proprio numero di versione ), che elenca più dispositivi telecamera indipendenti, ciascuno con il proprio numero di versione. Per supportare i dispositivi 2 o successivi è necessario il modulo fotocamera 2 o successivo e tali moduli fotocamera possono avere un mix di versioni di dispositivi fotocamera (questo è ciò che intendiamo quando diciamo che Android supporta l'implementazione di entrambi gli HAL).