Configurazioni degli stream

Android include funzionalità che consentono ai client della videocamera di scegliere stream della videocamera ottimali per casi d'uso specifici e di garantire che determinate combinazioni di stream siano supportate dal dispositivo videocamera. Una configurazione dello stream si riferisce a un singolo stream della videocamera configurato nel dispositivo videocamera, mentre una combinazione di stream si riferisce a uno o più set di stream configurati nel dispositivo videocamera. Per saperne di più su queste funzionalità, consulta Configurazioni di stream consigliate e API per eseguire query sulle combinazioni di funzionalità.

Implementazione di riferimento

Esiste un'implementazione di riferimento lato fornitore dei flussi di configurazione consigliati e dell'API per eseguire query sulle funzionalità di combinazione dei flussi. Puoi trovare questa implementazione in QCamera3HWI.cpp

I fornitori di videocamere possono pubblicizzare le configurazioni di streaming consigliate per casi d'uso specifici ai client delle videocamere. Queste configurazioni di streaming consigliate, 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 della videocamera, non fornisce informazioni sull'efficienza, sul consumo energetico o sull'impatto sulle prestazioni della scelta di uno stream rispetto a un altro. I client della videocamera possono scegliere liberamente tra tutte le configurazioni di stream possibili, ma in molti casi ciò porta i client a utilizzare configurazioni e app della videocamera non ottimali, con conseguenti ricerche esaustive che richiedono molto tempo.

Ad esempio, anche se alcuni formati YUV elaborati sono obbligatori e devono essere supportati, il dispositivo videocamera potrebbe non supportare nativamente 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 dei flussi consigliate non devono essere esaustive rispetto alla StreamConfigurationMap. Le mappature di configurazione suggerite devono rispettare i requisiti della sezione Implementazione e possono includere uno qualsiasi dei formati, delle dimensioni o degli altri valori disponibili in StreamConfigurationMap. I formati, le dimensioni o altri valori nascosti non trovati in StreamConfigurationMap non possono essere inclusi nelle mappe di configurazione dello stream consigliate.

Tutti i test rimangono invariati e non vengono allentati in base alle 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 attivare questa funzionalità, l'HAL della fotocamera deve compilare le seguenti voci di metadati statici:

  • android.scaler.availableRecommendedStreamConfigurations: il sottoinsieme consigliato di configurazioni dello 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 regolare (formato, larghezza, altezza, input) con una voce aggiuntiva. Sono vietati casi d'uso pubblici inesistenti o altri bit impostati nell'intervallo [PUBLIC_END, VENDOR_START].

    Queste informazioni vengono memorizzate nel tag di metadati availableRecommendedStreamConfigurations.

    L'esempio seguente mostra un array per una configurazione di stream consigliata per un dispositivo 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): le configurazioni consigliate per lo stream dello spazio colore di profondità suggerite per questo dispositivo videocamera. Analogamente alla voce di metadati precedente, una bitmap di casi d'uso aggiuntivi indica i casi d'uso suggeriti.

    Queste informazioni vengono memorizzate nel tag di metadati availableRecommendedInputOutputFormatsMap.

  • android.scaler.availableRecommendedInputOutputFormatsMap (disponibile solo se supportato dal dispositivo): la mappatura dei formati immagine consigliati suggeriti per questo dispositivo di videocamera per i flussi di input, ai corrispondenti formati di output.

    Queste informazioni vengono memorizzate nel tag di metadati availableRecommendedDepthStreamConfigurations.

Queste informazioni sono disponibili per i client della videocamera tramite l'API RecommendedStreamConfigurationMap.

Casi d'uso obbligatori

Le configurazioni dello 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 elaborate non bloccanti con formati di output come YUV_420_888 e IMPLEMENTATION_DEFINED.
RECORD Un record video deve includere configurazioni di streaming che corrispondano ai profili multimediali supportati con il formato IMPLEMENTATION_DEFINED.
VIDEO_SNAPSHOT Uno snapshot video deve includere configurazioni dello stream almeno grandi quanto le risoluzioni RECORD massime e solo con la combinazione di formato/spazio dei dati BLOB + DATASPACE_JFIF (JPEG). Le configurazioni non devono causare problemi di anteprima e devono essere in grado di essere eseguite a 30 fps.
SNAPSHOT Le configurazioni del flusso di snapshot devono includere almeno una con una dimensione vicina a android.sensor.info.activeArraySize con la combinazione di formato/spazio dei dati BLOB + DATASPACE_JFIF (JPEG). Tenendo conto delle limitazioni relative a proporzioni, allineamento e altre limitazioni specifiche del fornitore, l'area delle dimensioni massime suggerite non deve essere inferiore al 97% dell'area dell'array di sensori.
ZSL (se supportato) Se supportate dal dispositivo videocamera, le configurazioni consigliate del flusso di input devono essere pubblicizzate solo insieme ad altri formati di output elaborati o in stallo.
RAW (se supportato) Se supportate dal dispositivo videocamera, le configurazioni di streaming raw consigliate devono includere solo formati di output basati su RAW.

Altri casi d'uso

Puoi fornire ulteriori stream di configurazione consigliati per i casi d'uso specifici della tua implementazione.

Convalida

Per testare l'implementazione dei flussi 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 videocamera di verificare se una combinazione specificata 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 ultra grandangolare e stabilizzazione come controlli ortogonali.

Requisiti

Per supportare l'API per eseguire query sulle combinazioni di funzionalità, la 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 ad altre funzionalità. Ciò significa che per un dispositivo videocamera che supporta la stabilizzazione dell'anteprima, il valore restituito di isStreamCombinationWithSettingsSupported per una determinata combinazione deve essere lo stesso valore quando la stabilizzazione dell'anteprima è attiva o disattivata. In questo modo si riduce lo spazio di ricerca per le query di combinazione di funzionalità.

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 anteprima a 1080p e 720p e JPEG di dimensioni massime. Per ulteriori dettagli su questi requisiti, consulta la sezione 2.2.7.2. Videocamera 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:

Per le versioni precedenti alla 3 dell'interfaccia ICameraDevice, l'HAL deve implementare il metodo isStreamCombinationSupported.

Per saperne di più sulle combinazioni di funzionalità interrogate dall'API, consulta la documentazione relativa a 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 di CameraDevice che può essere utilizzata per eseguire query sulle combinazioni di funzionalità senza richiedere un'istanza CameraDevice.

  • getCameraDeviceSetup: Acquisisce un oggetto CameraDeviceSetup per un determinato ID fotocamera se isCameraDeviceSetupSupported restituisce true.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: Supporta le query di combinazione 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 lo scopo di query di combinazione di funzionalità a bassa latenza.

  • SessionConfiguration: Una classe di utilità che descrive la configurazione della sessione, incluse le combinazioni di stream e i parametri della sessione, che può essere utilizzata per le query di combinazione delle funzionalità.

Convalida

Per convalidare l'implementazione di questa funzionalità, utilizza i seguenti test VTS, CTS e Camera ITS (CTS Verifier):

VTS

CTS

Camera ITS