Configurazioni di flusso

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

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 su QCamera3HWI.cpp

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

Sebbene StreamConfigurationMap fornisca informazioni esaustive sulla configurazione del flusso ai client della telecamera, non fornisce alcuna informazione sull'efficienza, sulla potenza o sull'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 flusso, ma in molti casi ciò porta i client a utilizzare configurazioni della telecamera non ottimali e ad applicazioni che effettuano ricerche esaustive che richiedono molto tempo.

Ad esempio, sebbene alcuni formati YUV elaborati siano necessari e debbano essere supportati, il dispositivo della fotocamera potrebbe non disporre del supporto nativo per i formati. Ciò si traduce in 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 dimensioni particolari in termini di potenza e prestazioni.

Non è necessario che le mappe di configurazione del flusso consigliate siano esaustive rispetto a StreamConfigurationMap . Le mappe di configurazione suggerite devono seguire i requisiti nella sezione di implementazione e possono includere qualsiasi formato, dimensione o altro valore disponibile trovato in StreamConfigurationMap . Formati, dimensioni o altri valori nascosti 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 flusso consigliate.

Le configurazioni del flusso consigliate fornite dall'implementazione della telecamera sono facoltative e il client della telecamera può ignorarle.

Implementazione

Segui questi passaggi per implementare questa funzionalità.

Voci di metadati

Per abilitare questa funzione, l'HAL della fotocamera 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 vengono archiviate nel tag di metadati availableRecommendedStreamConfigurations .

    L'esempio seguente mostra una matrice per una configurazione di streaming consigliata per un dispositivo fotocamera che supporta solo 4K e 1080p, dove entrambe le risoluzioni sono preferite per la registrazione video ma per l'anteprima è consigliata solo 1080p.

    [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 del flusso dello spazio dati di profondità consigliate suggerite per questo dispositivo fotocamera. Analogamente alla voce di metadati precedente, un'ulteriore bitmap del caso d'uso indica i casi d'uso suggeriti.

    Queste informazioni vengono 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 vengono archiviate nel tag di metadati availableRecommendedDepthStreamConfigurations .

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

Casi d'uso richiesti

Le configurazioni di flusso 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 flusso elaborate non in stallo con formati di output come YUV_420_888 e IMPLEMENTATION_DEFINED .
RECORD Una registrazione video deve includere configurazioni di streaming che corrispondano 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 massime RECORD e solo con la combinazione formato/spazio dati BLOB + DATASPACE_JFIF (JPEG). 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 includerne almeno una con una dimensione vicina a android.sensor.info.activeArraySize con la combinazione formato/spazio dati BLOB + DATASPACE_JFIF (JPEG). 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 fotocamera, le configurazioni del flusso di input consigliate devono essere pubblicizzate solo insieme ad altri formati di output elaborati o in fase di stallo.
RAW (se supportato) Se supportate dal dispositivo fotocamera, le configurazioni del flusso raw consigliate devono includere solo formati di output basati su RAW.

Altri casi d'uso

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

Validazione

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

API per interrogare 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 fotocamera di interrogare in modo sicuro combinazioni di flussi in qualsiasi momento dopo aver ricevuto un'istanza CameraDevice valida, eliminando il sovraccarico derivante dall'inizializzazione di una sessione di acquisizione della fotocamera e il rischio di avere successive eccezioni della fotocamera, inclusa la rottura della fotocamera, e consentendo query più veloci.

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

Puoi scegliere di supportare questa funzionalità implementando una chiamata API HIDL aggiuntiva nell'HAL della fotocamera.

Implementazione

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

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

  • OK : la query di combinazione del flusso ha avuto esito positivo.
  • METHOD_NOT_SUPPORTED : il dispositivo fotocamera non supporta la query di combinazione del flusso.
  • INTERNAL_ERROR : la query sulla combinazione del flusso non può essere completata a causa di un errore interno.

L'API restituisce true se la combinazione di flussi è supportata. Altrimenti restituisce false.

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

Le chiamate all'API non devono avere effetti collaterali sul normale funzionamento della fotocamera. Le chiamate API non devono alterare nessuno stato interno o rallentare le prestazioni della fotocamera. Assicurarsi che dopo che l'HAL della telecamera abbia 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 del flusso, non modifichi il suo stato interno o non intraprenda operazioni che richiedono molto tempo.

Validazione

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

Moduli CTS della telecamera:

VTS della telecamera:

VtsHalCameraProviderV2_4TargetTest.cpp