Configurazioni di flusso

Android 10 introduce funzionalità che consentono ai client della fotocamera di scegliere flussi di videocamera ottimali per casi d'uso specifici e di garantire che determinate combinazioni di flussi siano supportate dal dispositivo della videocamera. Una configurazione di flusso si riferisce a un singolo flusso della telecamera configurato nel dispositivo della videocamera e una combinazione di flusso si riferisce a uno o più insiemi di flussi configurati nel dispositivo della videocamera. Per ulteriori informazioni su queste funzionalità, consulta le configurazioni di flusso consigliate e l'API per eseguire query sulle combinazioni di flussi .

Implementazione di riferimento

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

I fornitori di telecamere possono pubblicizzare ai client delle telecamere le configurazioni di streaming consigliate per casi d'uso specifici. Queste configurazioni di streaming consigliate, che sono sottoinsiemi di StreamConfigurationMap , possono aiutare i client della telecamera a scegliere le configurazioni ottimali.

Sebbene StreamConfigurationMap fornisca informazioni complete sulla configurazione del flusso ai client della telecamera, non fornisce alcuna informazione sull'efficienza, la potenza o l'impatto sulle prestazioni della scelta di un flusso rispetto a un altro. I client della telecamera possono scegliere liberamente tra tutte le possibili configurazioni di streaming, ma in molti casi ciò porta i client a utilizzare configurazioni e applicazioni non ottimali della telecamera che effettuano ricerche esaustive che richiedono tempo.

Ad esempio, sebbene alcuni formati YUV elaborati siano richiesti e debbano essere supportati, il dispositivo della fotocamera potrebbe non avere il supporto nativo per i formati. Ciò si traduce in un passaggio di elaborazione aggiuntivo per la conversione del formato e riduce l'efficienza. Anche le dimensioni e le relative proporzioni possono avere un impatto simile rendendo preferibili dimensioni particolari in termini di potenza e prestazioni.

Le mappe di configurazione del flusso consigliate non devono essere esaustive rispetto a StreamConfigurationMap . Le mappe di configurazione suggerite devono seguire i requisiti nella sezione di implementazione e possono includere qualsiasi formato, dimensione o altri valori disponibili trovati in StreamConfigurationMap . I formati nascosti, le dimensioni o altri valori non trovati in StreamConfigurationMap non possono essere inclusi nelle mappe di configurazione del flusso consigliate.

Tutti i test rimangono invariati e non vengono allentati a seconda delle configurazioni di streaming consigliate.

Le configurazioni di streaming consigliate fornite dall'implementazione della telecamera sono opzionali e il client della telecamera può ignorarle.

Implementazione

Segui questi passaggi per implementare questa funzione.

Voci di metadati

Per abilitare questa funzione, Camera HAL deve popolare le seguenti voci di metadati statici:

  • android.scaler.availableRecommendedStreamConfigurations : il sottoinsieme consigliato di configurazioni di flusso per casi d'uso specifici. La dichiarazione utilizza semplici 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 qualsiasi altro bit impostato nell'intervallo [PUBLIC_END, VENDOR_START] .

    Queste informazioni sono archiviate nel tag di metadati availableRecommendedStreamConfigurations .

    L'esempio seguente mostra un array per una configurazione di streaming consigliata per un dispositivo videocamera che supporta solo 4K e 1080p, dove entrambe le risoluzioni sono preferite per la registrazione video ma solo 1080p è consigliato 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 supportata dal dispositivo): le configurazioni del flusso dello spazio dati di profondità consigliate suggerite per questo dispositivo fotocamera. Simile alla voce di metadati sopra, una bitmap di casi d'uso aggiuntiva indica i casi d'uso suggeriti.

    Queste informazioni sono archiviate nel tag di metadati availableRecommendedInputOutputFormatsMap .

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

    Queste informazioni sono archiviate nel tag di metadati availableRecommendedDepthStreamConfigurations .

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

Casi d'uso richiesti

Le configurazioni di streaming consigliate devono essere fornite per i seguenti casi d'uso e soddisfare i requisiti corrispondenti:

Caso d'uso Requisiti
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 che corrispondono ai profili multimediali supportati pubblicizzati con il formato IMPLEMENTATION_DEFINED .
VIDEO_SNAPSHOT Un'istantanea video deve includere configurazioni di streaming grandi almeno quanto le risoluzioni RECORD massime e solo con la combinazione formato/spazio dati (JPEG) BLOB + DATASPACE_JFIF. Le configurazioni non dovrebbero causare problemi di anteprima e dovrebbero essere in grado di funzionare 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 formato/spazio dati (JPEG) BLOB + DATASPACE_JFIF. Tenendo conto delle restrizioni su proporzioni, allineamento e altre restrizioni specifiche del fornitore, l'area della dimensione massima suggerita non deve essere inferiore al 97% dell'area della dimensione dell'array di sensori.
ZSL (se supportato) Se supportate dal dispositivo della fotocamera, le configurazioni del flusso di input consigliate devono essere pubblicizzate solo insieme ad altri formati di output elaborati o in stallo.
RAW (se supportato) Se supportate dal dispositivo della fotocamera, le configurazioni del flusso RAW consigliate devono includere solo formati di output basati su RAW.

Altri casi d'uso

Puoi fornire flussi di configurazione consigliati aggiuntivi per casi d'uso specifici per la tua implementazione.

Convalida

Per testare l'implementazione dei flussi di configurazione consigliati, eseguire i seguenti test CTS e VTS:

API per interrogare le combinazioni di flussi

La piattaforma Android supporta un'API per eseguire query sulle combinazioni di flussi. L'implementazione di questa API consente ai client della telecamera di eseguire query in modo sicuro sulle combinazioni di flussi in qualsiasi momento dopo aver ricevuto un'istanza CameraDevice valida, eliminando il sovraccarico dell'inizializzazione di una sessione di acquisizione della telecamera e il potenziale di successive eccezioni della telecamera, inclusa la rottura della telecamera, e consentendo query più veloci.

Questa funzione consente inoltre ai client della telecamera di ricevere un elenco di combinazioni di flussi compilato secondo le linee guida per CameraDevice e il livello HW supportato. Sono disponibili test CTS per rafforzare il più possibile la correttezza dei risultati delle query coprendo un sottoinsieme minore delle combinazioni di flussi più comuni.

Puoi scegliere di supportare questa funzione implementando una chiamata API HIDL aggiuntiva in Camera HAL.

Implementazione

Per supportare un'API per eseguire query sulle combinazioni di flussi, l'HAL della fotocamera deve fornire un'implementazione per l'interfaccia API isStreamCombinationSupported isStreamCombinationSupported. Questa interfaccia verifica se il dispositivo della fotocamera supporta una specifica combinazione di flusso della fotocamera.

Quando viene chiamata, l'API deve restituire uno dei seguenti codici di stato:

  • OK : la query sulla combinazione di flussi è riuscita.
  • METHOD_NOT_SUPPORTED : il dispositivo videocamera non supporta la query di combinazione di flussi.
  • INTERNAL_ERROR : Impossibile completare la query della combinazione di flussi a causa di un errore interno.

L'API restituisce true se la combinazione di flussi è supportata. In caso contrario, restituisce false.

Il framework utilizza l'API pubblica isSessionConfigurationSupported per verificare se la particolare configurazione della sessione è supportata dal dispositivo della fotocamera.

Le chiamate all'API non devono avere effetti collaterali sul normale funzionamento della fotocamera. Le chiamate API non devono alterare gli stati interni o rallentare le prestazioni della fotocamera. Assicurarsi che dopo che l'HAL della telecamera ha convalidato correttamente una combinazione di flussi, i client della telecamera possano configurare correttamente la combinazione di flussi. Per evitare problemi, assicurati che l'implementazione non memorizzi alcuna informazione durante le query di combinazione di flussi, ne modifichi lo stato interno o effettui operazioni che richiedono tempo.

Convalida

Per convalidare questa funzione, eseguire i seguenti casi di test CTS e VTS della telecamera:

Moduli telecamera CTS:

Telecamera VTS:

VtsHalCameraProviderV2_4TargetTest.cpp