Android include funzionalità che consentono ai client della videocamera di scegliere gli stream della videocamera ottimali per casi d'uso specifici e di garantire che determinate combinazioni di stream siano supportate dal dispositivo della videocamera. Una configurazione dello stream fa riferimento a una singola lo stream della videocamera configurato nel dispositivo con videocamera e si riferisce a una combinazione di stream a uno o più insiemi di stream configurati nel dispositivo videocamera. Per ulteriori informazioni su queste funzioni, vedi le configurazioni degli stream consigliate e API per eseguire query su combinazioni di funzionalità.
Implementazione dei riferimenti
Esiste un'implementazione di riferimento lato fornitore degli stream di configurazione consigliati e dell'API per eseguire query sulle funzionalità di combinazione di stream. Puoi trovare questo dell'implementazione QCamera3HWI.cpp
Configurazioni di stream consigliate
I fornitori di videocamere possono pubblicizzare le configurazioni di streaming consigliate per un uso specifico di assistenza ai client delle videocamere. Queste configurazioni consigliate per i flussi di dati, sottoinsiemi di StreamConfigurationMap, può aiutare i clienti delle videocamere a scegliere le configurazioni ottimali.
Anche se StreamConfigurationMap fornisce informazioni esaustive sulla configurazione dello stream ai client della videocamera, non fornisce alcuna informazione sugli impatti in termini di efficienza, potenza o prestazioni della scelta di uno stream rispetto a un altro. I clienti della fotocamera possono scegliere liberamente da tutte le possibili configurazioni di stream, ma in molti casi ciò porta clienti che utilizzano configurazioni di fotocamera e app non ottimali esaustive in termini di tempo.
Ad esempio, anche se alcuni formati YUV elaborati sono richiesti e devono essere supportati, la videocamera potrebbe non supportare in modo nativo i formati. Questo comporta un ulteriore passaggio di elaborazione per la conversione del formato e riduce efficienza operativa. Anche le dimensioni e le proporzioni corrispondenti possono avere un impatto simile, rendendo preferibili determinate dimensioni in termini di potenza e prestazioni.
Le mappe di configurazione degli stream consigliate non devono essere esaustive rispetto ai StreamConfigurationMap. Le mappe di configurazione suggerite devono rispettare i requisiti della sezione Implementazione e possono includere qualsiasi formato, dimensione o altro valore disponibile in StreamConfigurationMap. I formati, le dimensioni o altri valori nascosti non trovati in StreamConfigurationMap non possono essere inclusi nelle mappe di configurazione stream consigliate.
Tutti i test rimangono invariati e non sono flessibili a seconda del test consigliato configurazioni dei flussi di dati.
Le configurazioni di streaming consigliate fornite dall'implementazione della videocamera sono facoltativi e il client della videocamera può ignorarli.
Implementazione
Per implementare questa funzionalità, segui questi passaggi.
Voci di metadati
Per attivare questa funzionalità, l'HAL della fotocamera deve compilare le seguenti voci statiche dei metadati:
android.scaler.availableRecommendedStreamConfigurations
: il sottoinsieme consigliato di configurazioni di stream per casi d'uso specifici. La dichiarazione utilizza bitmap che indicano i casi d'uso suggeriti sotto forma di[1 << PREVIEW | 1 << RECORD..]
. I casi d'uso estendono tupla regolare (formato, larghezza, altezza, input) con una voce aggiuntiva. I casi d'uso pubblici inesistenti o qualsiasi altro bit impostato nell'intervallo[PUBLIC_END, VENDOR_START]
sono vietati.Queste informazioni vengono memorizzate nel tag metadati
availableRecommendedStreamConfigurations
.L'esempio seguente mostra un array per una configurazione di stream consigliata per una videocamera che supporta solo 4K e 1080p, dove entrambe le risoluzioni sono preferite per la registrazione video, ma solo 1080p è suggerita per l'anteprima.
[3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT), 1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
android.depth.availableRecommendedDepthStreamConfigurations
(disponibile solo se supportato dal dispositivo): lo spazio dati di profondità consigliato configurazioni di streaming suggerite per questo dispositivo videocamera. Simile al sopra la voce dei metadati, una bitmap aggiuntiva del caso d'uso indica e casi d'uso specifici.Queste informazioni vengono memorizzate
availableRecommendedInputOutputFormatsMap
dei metadati.android.scaler.availableRecommendedInputOutputFormatsMap
(disponibile solo se supportata dal dispositivo): la mappatura dei formati delle immagini consigliati che vengono consigliati per questo dispositivo videocamera per gli stream di input, formati di output corrispondenti.Queste informazioni vengono memorizzate
availableRecommendedDepthStreamConfigurations
dei metadati.
Queste informazioni sono disponibili per i client che utilizzano le videocamere tramite recommendedStreamConfigurationMap tramite Google Cloud CLI o tramite l'API Compute Engine.
Casi d'uso obbligatori
È necessario fornire le configurazioni di flussi consigliate per i seguenti casi d'uso e soddisfare i requisiti corrispondenti:
Caso d'uso | Requisito |
---|---|
PREVIEW |
Un'anteprima deve includere solo configurazioni di flussi elaborati senza stallo
con formati di output come YUV_420_888 e
IMPLEMENTATION_DEFINED . |
RECORD |
Un record video deve includere configurazioni di streaming corrispondenti al contenuto pubblicizzato
profili multimediali supportati
nel formato IMPLEMENTATION_DEFINED . |
VIDEO_SNAPSHOT |
Uno snapshot video deve includere configurazioni di stream almeno uguali alle risoluzioni RECORD massime e solo con la combinazione di formato/spazio dati BLOB + DATASPACE_JFIF (JPEG). Le configurazioni non devono causare glitch nell'anteprima e devono essere in grado di funzionare a 30 fps. |
SNAPSHOT |
Le configurazioni degli stream di istantanee devono includere almeno una con dimensioni vicine a android.sensor.info.activeArraySize con la combinazione di formato/spazio dati BLOB + DATASPACE_JFIF (JPEG). Presa in considerazione
a restrizioni su proporzioni, allineamento e ad altre limitazioni specifiche del fornitore.
l'area della dimensione massima suggerita non deve essere inferiore al 97% del sensore
dimensioni dell'array. |
ZSL (se supportato) |
Se supportate dal dispositivo videocamera, le configurazioni consigliate per lo stream di input devono essere pubblicizzati solo insieme ad altri output elaborati o in stallo formati. |
RAW (se supportato) |
Se supportate dal dispositivo della videocamera, le configurazioni consigliate per lo streaming RAW deve includere solo formati di output basati su RAW. |
Altri casi d'uso
Puoi fornire stream di configurazione consigliati aggiuntivi per casi d'uso specifici della tua implementazione.
Convalida
Per testare l'implementazione degli stream di configurazione consigliati, esegui i seguenti test CTS e VTS:
API per eseguire query su combinazioni di caratteristiche
A partire da Android 15, la piattaforma Android fornisce un'API per eseguire query sulle combinazioni di funzionalità. Questa API consente ai client della videocamera di interrogare se una specifica combinazione di funzionalità possa essere supportata dal dispositivo. Questa API è necessaria perché l'API camera2 modella diverse funzionalità come 4K, 60 FPS, video HDR, UltraHDR, zoom ultrawide e stabilizzazione come controlli ortogonali.
Requisiti
Per supportare l'API per eseguire query sulle combinazioni di funzionalità, l'HAL della fotocamera deve implementare la versione 3 dell'interfaccia ICameraDevice
. Per maggiori dettagli, consulta
Implementazione.
Se l'API è supportata, la stabilizzazione dell'anteprima deve essere ortogonale a
altre funzionalità. Ciò significa che per un dispositivo con fotocamera che supporta la stabilizzazione dell'anteprima, il valore restituito di isStreamCombinationWithSettingsSupported
per una determinata combinazione deve essere lo stesso quando la stabilizzazione dell'anteprima è attiva o disattivata. In questo modo, lo spazio di ricerca per le query di combinazione di funzionalità viene ridotto.
Inoltre, per la classe di prestazioni multimediali 15, la fotocamera posteriore principale deve supportare la stabilizzazione dell'anteprima con anteprima HLG10 a 10 bit per l'anteprima 1080p e 720p e JPEG di dimensioni massime. Per ulteriori dettagli su questi requisiti, consulta la sezione 2.2.7.2. Fotocamera del CDD.
Implementazione
Per supportare l'API per eseguire query su combinazioni di funzionalità, implementa quanto segue
le API per le query basate su combinazione di funzionalità nella versione 3 di
ICameraDevice
:
constructDefaultRequestSettings
: Crea le impostazioni predefinite per un tipo diCaptureRequest
specificato. HAL puoi utilizzareICameraDeviceSession::constructDefaultRequestSettings
implementazione.isStreamCombinationWithSettingsSupported
: controlla il supporto del dispositivo per una combinazione di stream della videocamera specificata con parametri di sessione e chiaviCaptureRequest
aggiuntive. Deve restituiscetrue
per le combinazioni supportate efalse
per le combinazioni non supportate combinazioni di caratteristiche. L'HAL può utilizzare l'implementazione diisStreamCombinationSupported
e aggiungere il supporto per controllare le impostazioniCaptureRequest
trasmesse insessionParams
.getSessionCharacteristics
: prende una combinazione di stream supportata con i parametri di sessione e restituisce le caratteristiche specifiche della sessione.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: elenca tutte le configurazioni di sessione di uso comune. Queste configurazioni vengono verificate tramite i test di conformità.
Per le versioni precedenti alla 3 dell'interfaccia ICameraDevice
, l'HAL
dovrebbe implementare
isStreamCombinationSupported
.
Per ulteriori informazioni sulle combinazioni di funzionalità sottoposte a query dall'API, consulta la documentazione su sessionConfigurationQueryVersion
in system/media/camera/docs/metadata_definitions.xml
.
Per un'implementazione di riferimento di questa funzionalità, consulta
hardware/google/camera/devices/EmulatedCamera/hwl/
.
API pubbliche
Le app possono utilizzare le seguenti API pubbliche per eseguire query sulle combinazioni di funzionalità supportate per il dispositivo:
CameraDevice.CameraDeviceSetup
: Una rappresentazione limitata diCameraDevice
che può essere utilizzata per eseguire query sulla caratteristica senza richiedere un'istanzaCameraDevice
.getCameraDeviceSetup
: Acquisisce un oggettoCameraDeviceSetup
per un determinato ID fotocamera seisCameraDeviceSetupSupported
restituiscetrue
.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: supporta le query di combinazione di funzionalità se questo valore è uguale o superiore aVANILLA_ICE_CREAM
.OutputConfiguration
: una classe che descrive l'output della videocamera, che può contenere una superficie differita ai fini delle query di combinazione di funzionalità a bassa latenza.SessionConfiguration
: una classe di utilità che descrive la configurazione della sessione, tra cui le combinazioni di stream e i parametri della sessione, che possono essere utilizzati per le query di combinazione di funzionalità.
Convalida
Per convalidare l'implementazione di questa funzionalità, utilizza i seguenti test VTS, CTS e ITS (CTS Verifier) della fotocamera:
VTS
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombineTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
ITS della fotocamera