Videocamera HAL

L'HAL (Camera Hardware Astrazione Layer) di Android connette le porte di le API del framework della videocamera android.hardware.camera2 all'hardware e al driver della videocamera. A partire da Android 13, lo sviluppo dell'interfaccia HAL della fotocamera utilizza AIDL. Introduzione di Android 8.0 Alti, passando dall'API Camera HAL su un'interfaccia stabile definita dal protocollo HIDL (interfaccia HIDL) dell'HAL. Se avete precedentemente sviluppato un modulo e un driver per fotocamera HAL per Android 7.0 e meno, considera i casi significativi modifiche nella pipeline della videocamera.

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 a Android 13 o versioni successive, i produttori di dispositivi devono migrare il processo HAL dall'utilizzo delle interfacce delle fotocamere HIDL alla fotocamera AIDL interfacce.

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

Implementazione dell'HAL per 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 videocamera AIDL si trovano nelle seguenti posizioni:

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 per fotocamera AIDL

Per testare l'implementazione dell'HAL della fotocamera AIDL, assicurati che il dispositivo superi tutti Test CTS e VTS. Android 13 introduce l'AIDL VTS test, 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 fotocamera struttura le modalità operative in una visualizzazione unificata, che può essere utilizzata per implementare una qualsiasi delle modalità precedenti e molti altri, come la modalità raffica. Ciò si traduce in un migliore controllo da parte dell'utente messa a fuoco ed esposizione e altre attività di post-elaborazione, come la riduzione del rumore, il contrasto e l'aumento della 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 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. sensore manuale, obiettivo e flash controllo; Modalità operative 3A; Controllo di elaborazione RAW->YUV; generazione di statistiche; e così via.

In parole povere, il framework dell'applicazione richiede un fotogramma alla fotocamera e il sottosistema della videocamera restituisce i risultati a uno stream di output. Nella Inoltre, i metadati che contengono informazioni quali spazi colore e obiettivo viene generato lo ombreggiamento per ogni insieme di risultati. Puoi considerare la versione 3 della videocamera come una pipeline per lo stream unidirezionale della versione 1 della videocamera. Converte ogni acquisizione richiesta in un'immagine acquisita dal sensore, che viene elaborata in:

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

L'insieme delle possibili piattaforme di output è preconfigurato:

  • Ogni superficie è la destinazione di un flusso di buffer di immagine di un risoluzione del problema.
  • È 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 inviare i buffer delle immagini per questa richiesta (nell'ambito dell'insieme configurato totale). Una richiesta può essere one-shot (con capture()) oppure può essere ripetuto all'infinito (con setRepeatingRequest()). Acquisizioni hanno la priorità sulle richieste ripetute.

Modello dei dati della fotocamera

Figura 1. Modello di funzionamento di base della videocamera

Panoramica della fotocamera HAL1

La versione 1 del sottosistema delle fotocamere è stata progettata come una scatola nera con di controllo e le tre seguenti modalità operative:

  • Anteprima
  • Registrazione video
  • Acquisisci ancora

Ogni modalità ha funzionalità leggermente diverse e che si sovrappongono. Ce l'ha fatta difficili da implementare nuove funzionalità, come la modalità burst, che rientra tra due di le modalità operative.

Diagramma a blocchi di una videocamera

Figura 2. Componenti della videocamera

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. È necessario il modulo della videocamera 2 o versioni successive per supportare i dispositivi 2 o versioni successive e questi moduli della videocamera possono avere una combinazione di versioni del dispositivo della videocamera (è questo che intendiamo quando diciamo che Android supporta l'implementazione di entrambi gli HAL).