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.
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:
- Aggiungi un
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
per qualsiasi dispositivo con fotocamera logica supportato da due o più videocamere esposte a un'app. - Compila il testo statico
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
campo di metadati con un elenco di ID fisici delle videocamere. - Compila i metadati statici correlati alla profondità necessari per correlare tra
videocamera fisica in streaming" pixel:
ANDROID_LENS_POSE_ROTATION
,ANDROID_LENS_POSE_TRANSLATION
,ANDROID_LENS_INTRINSIC_CALIBRATION
,ANDROID_LENS_DISTORTION
,ANDROID_LENS_POSE_REFERENCE
. Imposta l'statica
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
campo dei metadati per:ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE
: Per i sensori in modalità principale-principale, nessuna sincronizzazione hardware/otturatore/esposizione.ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
: Per i sensori in modalità principale-secondaria, sincronizzazione hardware/otturatore/esposizione.
Compila
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
con un elenco dei parametri supportati per le singole videocamere fisiche. La l'elenco può essere vuoto se il dispositivo logico non supporta le richieste individuali.Se le singole richieste sono supportate, elaborale e applicale
physicalCameraSettings
che possono arrivare come parte delle richieste di acquisizione e aggiungere il singolophysicalCameraMetadata
di conseguenza.Per dispositivi HAL con fotocamera versione 3.5 (introdotte in Android 10) o versioni successive, compila la
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
: chiave risultato utilizzando l'ID della fotocamera fisica attiva corrente che supporta il fotocamera logica.
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 agetPhysicalCameraCharacteristics
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:
scene1/test_multi_camera_match.py
scene4/test_multi_camera_alignment.py
sensor_fusion/test_multi_camera_frame_sync.py
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 utilizzareANDROID_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 diANDROID_SCALER_CROP_REGION
,ANDROID_CONTROL_AE_REGIONS
,ANDROID_CONTROL_AWB_REGIONS
,ANDROID_CONTROL_AF_REGIONS
,ANDROID_STATISTICS_FACE_RECTANGLES
, eANDROID_STATISTICS_FACE_LANDMARKS
per trattare le aree post-zoom campo visivo come array attivo del sensore. Per ulteriori informazioniANDROID_SCALER_CROP_REGION
collabora conANDROID_CONTROL_ZOOM_RATIO
, consultacamera3_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
, eANDROID_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.
- 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
- 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.