Parametri di sessione

La funzionalità dei parametri di sessione riduce i ritardi consentendo ai client della telecamera di configurare attivamente il sottoinsieme di costosi parametri di richiesta, ovvero i parametri di sessione, come parte della fase di inizializzazione della sessione di acquisizione. Con questa funzionalità, le tue implementazioni HAL ricevono i parametri client durante la fase di configurazione del flusso invece della prima richiesta di acquisizione e possono, a seconda dei loro valori, preparare e costruire la pipeline interna in modo più efficiente.

In Android 10, puoi migliorare le prestazioni utilizzando la funzionalità di query di riconfigurazione della sessione facoltativa per un maggiore controllo sulla logica di riconfigurazione dei parametri di sessione interni. Per ulteriori informazioni, consulta Query di riconfigurazione della sessione .

Esempi e fonte

Un'implementazione del parametro di sessione di riferimento fa già parte di CameraHal . Questo HAL utilizza l'API Hal legacy. Il CameraHal binderizzato che implementa l'API HIDL della fotocamera deve utilizzare la rispettiva voce HIDL sessionParams per accedere a qualsiasi nuovo parametro della sessione in entrata durante la configurazione dello streaming.

I client della fotocamera possono interrogare le chiavi di tutti i parametri di sessione supportati chiamando getAvailableSessionKeys() ed eventualmente impostare i loro valori iniziali tramite setSessionParameters() .

Implementazione

L'implementazione CameraHal deve popolare ANDROID_REQUEST_AVAILABLE_SESSION_KEYS all'interno dei rispettivi metadati statici della fotocamera e fornire un sottoinsieme di ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS , che contiene un elenco di chiavi difficili da applicare per fotogramma e che possono causare ritardi imprevisti se modificate durante la durata della sessione di acquisizione.

Esempi tipici includono parametri che richiedono una riconfigurazione hardware dispendiosa in termini di tempo o una modifica della pipeline interna della fotocamera. È ancora possibile esercitare il controllo sui parametri di sessione nelle richieste di acquisizione, ma i client devono essere consapevoli e aspettarsi ritardi nella loro applicazione.

Il framework monitora tutte le richieste in arrivo e se rileva una modifica nel valore di un parametro di sessione, riconfigura internamente la telecamera. La nuova configurazione del flusso passata a CameraHal include quindi i valori dei parametri di sessione aggiornati, utilizzati per configurare la pipeline della fotocamera in modo più efficiente.

Personalizzazione

È possibile definire i tag nell'elenco dei parametri di sessione disponibili popolato sul lato CameraHal. Questa funzionalità non è attiva se CameraHal lascia vuoto l'elenco dei parametri di sessione disponibili.

Validazione

CTS include i seguenti nuovi casi per testare i parametri della sessione:

In generale, dopo che un determinato parametro fa parte dell'elenco delle chiavi di sessione, il suo valore corrente viene incluso come parte dei parametri di sessione passati durante la configurazione del flusso al livello HAL.

I parametri della sessione devono essere selezionati attentamente. I valori non dovrebbero cambiare frequentemente, se non del tutto, tra le configurazioni del flusso. I parametri che cambiano frequentemente, come l'intento di acquisizione, non sono adatti e aggiungerli all'elenco dei parametri di sessione potrebbe causare errori CTS a causa di un'eccessiva riconfigurazione interna.

Query di riconfigurazione della sessione

Android 10 introduce una funzionalità di query di riconfigurazione della sessione opzionale per migliorare le prestazioni poiché le riconfigurazioni del flusso interno risultanti dalle modifiche dei valori dei parametri di sessione possono ridurre le prestazioni. Per risolvere questo problema, HIDL ICameraDeviceSession versione 3.5 e successive supporta il metodo isReconfigurationRequired , che fornisce un controllo capillare sulla logica di riconfigurazione dei parametri di sessione interni. Utilizzando questo metodo, la riconfigurazione del flusso può avvenire esattamente quando richiesto.

Gli argomenti per isReconfigurationRequired forniscono le informazioni richieste su ogni modifica dei parametri di sessione in sospeso, consentendo vari tipi di personalizzazioni specifiche del dispositivo.

Questa funzionalità è implementata solo nel servizio fotocamera e nell'HAL della fotocamera. Non sono presenti API rivolte al pubblico. Se questa funzionalità viene implementata, i client della fotocamera dovrebbero notare miglioramenti delle prestazioni quando lavorano con i parametri della sessione.

Implementazione

Per supportare le query di riconfigurazione della sessione, è necessario implementare il metodo isReconfigurationRequired per verificare se è necessaria una riconfigurazione completa del flusso per i nuovi valori dei parametri di sessione.

Se il client modifica il valore di qualsiasi parametro di sessione annunciato, il framework della fotocamera chiama il metodo isReconfigurationRequired . A seconda dei valori specifici, l'HAL decide se è necessaria una riconfigurazione completa del flusso. Se l'HAL restituisce false , il framework della fotocamera salta la riconfigurazione interna. Se l'HAL restituisce true , il framework riconfigura i flussi e passa di conseguenza i nuovi valori dei parametri di sessione.

Il metodo isReconfigurationRequired può essere chiamato dal framework qualche tempo prima che una richiesta con nuovi parametri venga inviata all'HAL e la richiesta può essere annullata prima che venga inviata. Pertanto, l'HAL non deve utilizzare questa chiamata al metodo per modificare in alcun modo il proprio comportamento.

L'implementazione HAL deve soddisfare i seguenti requisiti:

  • Il framework deve essere in grado di chiamare il metodo isReconfigurationRequired in qualsiasi momento dopo la configurazione della sessione attiva.
  • Non deve esserci alcun impatto sulle prestazioni delle richieste della fotocamera in sospeso. In particolare non devono verificarsi anomalie o ritardi durante il normale streaming della telecamera.

Il dispositivo e l'implementazione dell'HAL devono soddisfare i seguenti requisiti di prestazioni:

  • Le impostazioni hardware e software della fotocamera non devono essere modificate.
  • Non deve esserci alcun impatto visibile all'utente sulle prestazioni della fotocamera.

Il metodo isReconfigurationRequired accetta i seguenti argomenti:

  • oldSessionParams : parametri di sessione della sessione precedente. Di solito i parametri di sessione esistenti.
  • newSessionParams : nuovi parametri di sessione impostati dal client.

I codici di stato del reso previsti sono:

  • OK : richiesta di riconfigurazione riuscita.
  • METHOD_NOT_SUPPORTED : il dispositivo fotocamera non supporta la query di riconfigurazione.
  • INTERNAL_ERROR : la query di riconfigurazione non può essere completata a causa di un errore interno.

I valori restituiti sono:

  • true : è necessaria la riconfigurazione del flusso.
  • false : la riconfigurazione del flusso non è richiesta.

Per ignorare una query di riconfigurazione della sessione, l'HAL restituisce METHOD_NOT_SUPPORTED o false . Ciò si traduce nel comportamento predefinito del servizio telecamera in cui la riconfigurazione del flusso viene attivata a ogni modifica dei parametri di sessione.

Validazione

La funzionalità di query di riconfigurazione della sessione può essere convalidata utilizzando il test case VTS in CameraHidlTest#configureStreamsWithSessionParameters .