Supporto multicamera

Android 9 ha introdotto il supporto API per la modalità multicamera dispositivi mediante una nuova videocamera logica composta da due o più dispositivi fisici fotocamere che puntano nella stessa direzione. La fotocamera logica è come singolo CameraDevice/CaptureSession a un'app che consente interazione con le funzionalità multicamera integrate con HAL. Le app possono facoltativamente accedere e controllare gli stream, i metadati e i controlli della videocamera fisica sottostante.

Supporto multicamera

Figura 1. Supporto multicamera

In questo diagramma, i diversi ID videocamera sono codificati per colore. L'app può riprodurre in streaming buffer non elaborati da ciascuna videocamera fisica contemporaneamente. È inoltre possibile è possibile impostare controlli separati e ricevere metadati separati da fotocamere fisiche.

Esempi e fonti

I dispositivi multicamera devono essere pubblicizzati tramite la funzionalità multicamera logica.

I client delle videocamere possono eseguire query sull'ID videocamera dei dispositivi fisici di una determinata della fotocamera principale chiamando getPhysicalCameraIds() Gli ID restituiti come parte del risultato vengono poi utilizzati per controllare i dispositivi fisici individualmente setPhysicalCameraId() È possibile eseguire query sui risultati di queste singole richieste risultato richiamando getPhysicalCameraResults()

Le richieste di singole videocamere fisiche potrebbero supportare solo un sottoinsieme limitato di parametri. Per ricevere un elenco dei parametri supportati, gli sviluppatori possono chiamare getAvailablePhysicalCameraRequestKeys()

Gli stream fisici della videocamera sono supportati solo per le richieste di non rielaborazione e solo per sensori monocromatici e bayer.

Implementazione

Elenco di controllo dell'assistenza

Per aggiungere dispositivi multicamera logici sul lato HAL:

Per i dispositivi con Android 9, le fotocamere devono: supporta la sostituzione di uno stream logico YUV/RAW con flussi fisici del stessa dimensione (non si applica agli stream RAW) e lo stesso formato da due file fisici videocamere. Questo non vale per i dispositivi con Android 10.

Per i dispositivi con Android 10 in cui la versione del dispositivo HAL della videocamera è 3,50 o superiore, il dispositivo deve supportare isStreamCombinationSupported: per consentire alle app di chiedere se una particolare combinazione di stream contenente sono supportati i flussi fisici.

Mappa di configurazione dei flussi

Per una videocamera logica, le combinazioni di stream obbligatorie per il dispositivo videocamera di un determinato livello hardware è uguale a quello richiesto CameraDevice.createCaptureSession Tutti i flussi nella mappa di configurazione degli stream devono essere flussi logici.

Per un dispositivo con fotocamera logica che supporta la funzionalità RAW con videocamere secondarie fisiche di dimensioni diverse, se un'app configura uno stream RAW logico, il dispositivo della fotocamera logica non deve passare a videocamere secondarie fisiche con diverse dimensioni del sensore. In questo modo le app di acquisizione RAW esistenti non si interrompono.

Per sfruttare lo zoom ottico implementato da HAL, passando da le fotocamere secondarie fisiche durante l'acquisizione RAW, le app devono per configurare lo stream fisico della videocamera secondaria anziché uno stream RAW logico.

Combinazione di stream garantita

Sia la fotocamera logica che le fotocamere fisiche sottostanti devono garantire combinazioni di stream obbligatorie richiesti per i loro livelli di dispositivo.

Una fotocamera logica deve funzionare allo stesso modo di una videocamera fisica dispositivo in base al livello e alle funzionalità hardware. Ti consigliamo di eseguire l'accesso di caratteristiche è un soprainsieme di quello delle singole fotocamere fisiche.

Su dispositivi con Android 9, per ogni di stream, la fotocamera logica deve supportare:

  • Sostituzione di un YUV_420_888 logico o di un flusso non elaborato con due flussi fisici di di avere le stesse dimensioni e lo stesso formato, ciascuno utilizzando una fotocamera fisica separata, dato che dimensioni e formato sono supportati dalle fotocamere fisiche.

  • Aggiunta di due stream non elaborati, uno per ciascuna videocamera fisica, se si tratta della videocamera logica non pubblicizza la funzionalità RAW, ma le fotocamere fisiche sottostanti sì. Questo di solito si verifica quando le fotocamere fisiche hanno dimensioni del sensore diverse.

  • Utilizzare flussi fisici al posto di quelli logici delle stesse dimensioni e formato. Questo non deve rallentare la frequenza fotogrammi dell'acquisizione quando la durata minima dei frame dei flussi fisici e logici è la stessa.

Considerazioni sulle prestazioni e sull'alimentazione

  • Rendimento:

    • La configurazione e lo streaming di flussi fisici possono rallentare la frequenza di acquisizione della fotocamera logica a causa di risorse limitate.
    • L'applicazione delle impostazioni della fotocamera fisica può rallentare la frequenza di acquisizione se delle fotocamere sottostanti sono inserite in diverse frequenze fotogrammi.
  • Alimentazione:

    • L'ottimizzazione dell'alimentazione di HAL continua a funzionare nel caso predefinito.
    • La configurazione o la richiesta di flussi fisici potrebbero sostituire quelli interni dell'HAL dell'ottimizzazione dell'alimentazione e comporta un maggiore consumo dell'energia.

Personalizzazione

Puoi personalizzare l'implementazione del dispositivo nei seguenti modi.

  • L'output unito del dispositivo della fotocamera logica dipende interamente dall'HAL implementazione. La decisione su come vengono derivati i flussi logici fusi Le fotocamere fisiche sono trasparenti per l'app e la fotocamera Android il modello di machine learning.
  • Facoltativamente, le richieste fisiche e i risultati possono essere supportati. La dell'insieme di parametri disponibili in queste richieste dipende inoltre completamente l'implementazione specifica dell'HAL.
  • A partire da Android 10, l'HAL può ridurre il numero che possono essere aperte direttamente da un'app scegliendo di non pubblicizza alcuni o tutti i PHYSICAL_ID in getCameraIdList Chiamata a getPhysicalCameraCharacteristics in corso... deve quindi restituire le caratteristiche della fotocamera fisica.

Convalida

I dispositivi logici multicamera devono superare il CTS come qualsiasi altra videocamera normale. Gli scenari di test che prendono di mira questo tipo di dispositivo sono disponibili nel LogicalCameraDeviceTest in maggior dettaglio più avanti in questo modulo.

Questi tre test ITS hanno come obiettivo i sistemi multicamera per facilitare la fusione di immagini:

I test della scena 1 e della scena 4 vengono eseguiti con Test ITS-in-a-box rig. Il test test_multi_camera_match afferma che la luminosità del parametro il centro delle immagini corrisponda quando entrambe le fotocamere sono attive. La Il test test_multi_camera_alignment afferma che le distanze, gli orientamenti e che i parametri di distorsione e distorsione siano caricati correttamente. Se il sistema multicamera Include una fotocamera Wide FoV (>90o), è richiesta la versione rev2 della scatola ITS.

Sensor_fusion è un secondo banco di prova che consente l'uso ripetuto di uno smartphone prescritto movimento e asserisce che i timestamp del giroscopio e del sensore fotografico corrispondano e che i fotogrammi della fotocamera multicamera siano sincronizzati.

Tutti i pacchetti sono disponibili tramite AcuSpec, Inc. (www.acuspecinc.com, fred@acuspecinc.com) e MYWAY Produzione (www.myway.tw, vendite@myway.tw). Inoltre, la scatola ITS rev1 può essere acquistata tramite West-Mark (www.west-mark.com, dgoodman@west-mark.com).

Best practice

Per sfruttare appieno le funzionalità abilitate dalla modalità multicamera, mantenendo al contempo compatibilità app, segui queste best practice quando implementi una Dispositivo multicamera:

  • (Android 10 o versioni successive) Nascondi le videocamere secondarie fisiche getCameraIdList Questo riduce il numero di videocamere che possono essere aperte direttamente di app, eliminando così la necessità di avere una logica complessa di selezione della fotocamera.
  • (Android 11 o versioni successive) Per una funzionalità multicamera logica dispositivo che supporta lo zoom ottico, implementa ANDROID_CONTROL_ZOOM_RATIO API e utilizzare ANDROID_SCALER_CROP_REGION solo per il ritaglio delle proporzioni. ANDROID_CONTROL_ZOOM_RATIO consente al dispositivo di diminuire lo zoom e di mantenere una migliore precisione. In questo caso, l'HAL deve modificare il sistema di coordinate di ANDROID_SCALER_CROP_REGION, ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS, ANDROID_STATISTICS_FACE_RECTANGLES, e ANDROID_STATISTICS_FACE_LANDMARKS per trattare le aree post-zoom campo visivo come array attivo del sensore. Per ulteriori informazioni ANDROID_SCALER_CROP_REGION collabora con ANDROID_CONTROL_ZOOM_RATIO, consulta camera3_crop_reprocess#cropping.
  • Per i dispositivi multicamera con fotocamere fisiche dotate di diverse funzionalità, assicurati che il dispositivo pubblicizzi il supporto per un determinato valore o intervallo per un controllo solo se l'intero intervallo di zoom supporta il valore o un intervallo di valori. Ad esempio, se la fotocamera logica è composta da un obiettivo ultrawide, una fotocamera grandangolare e con teleobiettivo:
    • Se le dimensioni dell'array attivo delle fotocamere fisiche sono diverse, dell'HAL deve eseguire la mappatura dagli array attivi delle telecamere fisiche l'array attivo della fotocamera logica per ANDROID_SCALER_CROP_REGION, ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS, ANDROID_STATISTICS_FACE_RECTANGLES, e ANDROID_STATISTICS_FACE_LANDMARKS in modo che dal punto di vista dell'app, è la dimensione dell'array attivo della fotocamera logica.
    • Se le fotocamere grandangolari e con teleobiettivo supportano la messa a fuoco automatica, ma le fotocamere ultrawide la fotocamera è a fuoco fissa, assicurati che la fotocamera logica pubblicizzi la messa a fuoco automatica assistenza in tempo reale. L'HAL deve simulare una macchina a stato con messa a fuoco automatica per l'obiettivo videocamera in modo che quando l'app diminuisce lo zoom sull'obiettivo ultrawide, il fatto che la fotocamera fisica sottostante è a fuoco fisso e trasparente per l'app, e le macchine dello stato della messa a fuoco automatica per le modalità AF supportate funzionano previsto.
    • Se le fotocamere grandangolari e con teleobiettivo supportano la risoluzione 4K a 60 f/s e La fotocamera ultrawide supporta solo 4K a 30 f/s o 1080p a 60 f/s, ma non in 4K a 60 f/s, assicurati che la fotocamera logica non evidenzi il formato 4K a 60 f/s 60 f/s nelle configurazioni di stream supportate. Ciò garantisce l'integrità delle funzionalità della fotocamera logica, assicurando che l'app si è verificato il problema di non raggiungere la risoluzione 4K a 60 f/s a una velocità massima ANDROID_CONTROL_ZOOM_RATIO inferiore a 1.
  • Presente su Android 10, una logica multi-camera non è necessario per supportare combinazioni di stream che includono stream fisici. Se l'HAL supporta una combinazione con stream fisici:
    • (Android 11 o versioni successive) Per gestire meglio l'utilizzo come la profondità dello stereo e il rilevamento del movimento, rendono il campo visivo di output di flussi fisici di dimensioni pari a quelle che possono essere ottenute dall'hardware. Tuttavia, se un flusso fisico e uno logico hanno origine dalla stessa videocamera fisica, le limitazioni hardware possono forzare il campo visivo del il flusso fisico sia uguale al flusso logico.
    • Per risolvere il problema della pressione di memoria causata da più flussi fisici, assicurati che le app utilizzino discardFreeBuffers deallocare i buffer liberi (buffer rilasciati dal consumatore, ma non ancora rimosso dalla coda dal produttore) se si prevede che un flusso fisico inattivo per un determinato periodo di tempo.
    • Se in genere gli stream fisici provenienti da videocamere fisiche diverse non sono allegati alla stessa richiesta, assicurati che le app utilizzino surface group in modo che una coda del buffer venga utilizzata per eseguire il backup di due piattaforme rivolte alle app, riducendo il consumo di memoria.