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 di streaming si riferisce a uno stream di una singola videocamera configurato nel dispositivo videocamera, mentre una combinazione di stream fa riferimento a uno o più insiemi di stream configurati nel dispositivo videocamera. Per saperne di più su queste funzionalità, consulta le configurazioni di stream consigliate e l'API per eseguire query sulle 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 questa implementazione in QCamera3HWI.cpp
Configurazioni di stream consigliate
I fornitori di videocamere possono pubblicizzare configurazioni di stream consigliate per casi d'uso specifici ai clienti delle videocamere. Queste configurazioni consigliate per lo streaming, che sono sottoinsiemi di StreamConfigurationMap, possono aiutare i client della videocamera a scegliere le configurazioni ottimali.
Sebbene StreamConfigurationMap fornisca informazioni esaustive sulla configurazione dello stream ai client videocamera, non fornisce alcuna informazione sull'efficienza, sulla potenza o sulle prestazioni dell'impatto della scelta di uno stream rispetto a un altro. I client della videocamera possono scegliere liberamente tra tutte le possibili configurazioni dello stream, ma in molti casi questo porta i client a utilizzare configurazioni e app per videocamere non ottimali, con ricerche esaustive che richiedono molto tempo.
Ad esempio, anche se alcuni formati YUV elaborati sono obbligatori e devono essere supportati, il dispositivo della fotocamera potrebbe non avere il supporto nativo per i formati. Ciò comporta un ulteriore passaggio di elaborazione per la conversione del formato e riduce l'efficienza. 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 dello stream consigliate non devono essere esaustive rispetto a StreamConfigurationMap. Le mappe di configurazione suggerite devono rispettare i requisiti riportati nella sezione relativa all'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 agevolati a seconda delle configurazioni di stream consigliate.
Le configurazioni di streaming consigliate fornite dall'implementazione della videocamera sono facoltative e il client della videocamera può ignorarle.
Implementazione
Per implementare questa funzionalità, segui questi passaggi.
Voci di metadati
Per abilitare questa funzionalità, la videocamera HAL deve completare le seguenti voci di metadati statici:
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 la tupla normale (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 è consigliata 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): le configurazioni di streaming dello spazio dati di profondità consigliate per questo dispositivo della videocamera. Analogamente alla voce dei metadati riportata sopra, una bitmap aggiuntiva del caso d'uso indica i casi d'uso suggeriti.Queste informazioni vengono memorizzate nel tag metadati
availableRecommendedInputOutputFormatsMap
.android.scaler.availableRecommendedInputOutputFormatsMap
(disponibile solo se supportato dal dispositivo): la mappatura dei formati dell'immagine consigliati per gli stream di input di questa videocamera per gli stream di input corrispondenti ai formati di output corrispondenti.Queste informazioni vengono memorizzate nel tag metadati
availableRecommendedDepthStreamConfigurations
.
Queste informazioni sono disponibili per i client della videocamera tramite l'API recommendedStreamConfigurationMap.
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 stream elaborati senza arresti anomali con formati di output come YUV_420_888 e IMPLEMENTATION_DEFINED . |
RECORD |
Un record video deve includere configurazioni di stream corrispondenti ai profili media supportati pubblicizzati con il 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 di stream di snapshot devono includerne almeno una con dimensioni vicine a android.sensor.info.activeArraySize e la combinazione formato/spazio dati (JPEG) BLOB + DATASPACE_JFIF. Tenendo conto delle limitazioni relative alle proporzioni, all'allineamento e ad altre limitazioni specifiche del fornitore, l'area della dimensione massima suggerita non deve essere inferiore al 97% dell'area della dimensione dell'array del sensore. |
ZSL (se supportato) |
Se supportate dal dispositivo della videocamera, le configurazioni consigliate per gli stream di input devono essere pubblicizzate solo insieme ad altri formati di output elaborati o in blocco. |
RAW (se supportato) |
Se supportate dal dispositivo della videocamera, le configurazioni consigliate per gli stream RAW devono 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 sulle combinazioni di funzionalità
A partire da Android 15, la piattaforma fornisce un'API per eseguire query su combinazioni di funzionalità. Questa API consente ai client della fotocamera di verificare se una combinazione specifica di funzionalità può essere supportata dal dispositivo. Questa API è necessaria perché l'API camera2 modella diverse funzionalità, ad esempio 4K, 60 f/s, 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 la sezione Implementazione.
Quando l'API è supportata, la stabilizzazione dell'anteprima deve essere ortogonale alle 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 le seguenti
API per query con combinazioni di funzionalità nella versione 3 di
ICameraDevice
:
constructDefaultRequestSettings
: crea le impostazioni predefinite per un tipo diCaptureRequest
specificato. L'HAL può utilizzare l'implementazione diICameraDeviceSession::constructDefaultRequestSettings
.isStreamCombinationWithSettingsSupported
: controlla il supporto del dispositivo per una combinazione di stream della videocamera specificata con parametri di sessione e chiaviCaptureRequest
aggiuntive. Deve restituiretrue
per le combinazioni supportate efalse
per le combinazioni di funzionalità non supportate. L'HAL può utilizzare l'implementazione diisStreamCombinationSupported
e aggiungere il supporto per controllare le impostazioniCaptureRequest
trasmesse insessionParams
.getSessionCharacteristics
: utilizza una combinazione di stream supportata con 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 mediante test di conformità.
Per le versioni precedenti alla 3 dell'interfaccia ICameraDevice
, l'HAL
deve implementare il metodo
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 su combinazioni di caratteristiche senza richiedere un'istanzaCameraDevice
.getCameraDeviceSetup
: acquisito un oggettoCameraDeviceSetup
per un determinato ID videocamera seisCameraDeviceSetupSupported
restituiscetrue
.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: supporta le query di combinazioni di funzionalità se questo valore èVANILLA_ICE_CREAM
o superiore.OutputConfiguration
: una classe che descrive l'output della videocamera, che può contenere una superficie differita per le 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 Camera ITS (CTS Verifier):
VTT
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
ITS della fotocamera
- cts/apps/CameraITS/tests/feature_combination/test_feature_combination.py
- cts/apps/CameraITS/tests/scene6/test_session_characteristics_zoom.py