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 stream si riferisce a un singolo stream della videocamera configurato nel dispositivo e una combinazione stream si riferisce a uno o più insiemi di stream configurati nel dispositivo. 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.
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 rendimento 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 degli stream consigliate non devono essere esaustive rispetto a 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 vengono allentati in base alle configurazioni consigliate per gli stream.
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 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 la tuple (format, width, height, input) normale 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 è suggerito 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 sopra riportata, un'altra bitmap dei casi 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 di immagine consigliati che vengono suggeriti per questo dispositivo con videocamera per gli stream di input ai relativi formati di output.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
Le configurazioni di stream consigliate devono essere fornite 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 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). 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 Android fornisce un'API per eseguire query sulle 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à 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 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 sulle combinazioni di funzionalità, implementa le seguenti API di query sulle 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 i parametri della sessione e le 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
: 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 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 sulle combinazioni di funzionalità senza richiedere un'istanzaCameraDevice
.getCameraDeviceSetup
: acquisito un oggettoCameraDeviceSetup
per un determinato ID videocamera 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 della fotocamera (CTS Verifier):
VTS
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