Parametri della sessione

La funzionalità dei parametri di sessione riduce i ritardi consentendo ai client della videocamera di configurare attivamente il sottoinsieme di parametri di richiesta costosi, ovvero i parametri di sessione, come parte della fase di inizializzazione della sessione di acquisizione. Con questa funzionalità, le implementazioni HAL ricevono i parametri del client durante la fase di configurazione dello stream anziché la prima richiesta di acquisizione e possono, a seconda dei valori, preparare e creare 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 saperne di più, vedi Query di riconfigurazione della sessione.

Esempi e origine

Un'implementazione del parametro di sessione di riferimento fa già parte di CameraHal. Questo HAL utilizza l'API HAL precedente. CameraHal binderizzato che implementa l'API HIDL della fotocamera deve utilizzare la rispettiva voce sessionParams per accedere a eventuali nuovi parametri di sessione in entrata durante la configurazione dello stream.

I client della videocamera possono eseguire query sulle chiavi di tutti i parametri di sessione supportati chiamando getAvailableSessionKeys() e impostare i relativi valori iniziali tramite setSessionParameters().

Implementazione

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

Tra gli esempi tipici rientrano i parametri che richiedono una riconfigurazione hardware che richiede molto tempo o una modifica della pipeline della videocamera interna. Il controllo sui parametri della sessione può comunque essere esercitato nelle richieste di acquisizione, ma i client devono essere consapevoli dei ritardi e aspettarseli nella loro app.

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

Personalizzazione

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

Convalida

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

In generale, dopo che un determinato parametro fa parte dell'elenco delle chiavi di sessione, il suo valore corrente viene incluso nei parametri di sessione passati durante la configurazione dello stream a livello HAL.

I parametri di sessione devono essere selezionati con attenzione. I valori non devono cambiare frequentemente, se non mai, tra le configurazioni dello stream. I parametri che cambiano di frequente, come l'intento di acquisizione, non sono adatti e la loro aggiunta all'elenco dei parametri di sessione potrebbe causare errori CTS dovuti a una riconfigurazione interna eccessiva.

Query di riconfigurazione della sessione

Android 10 introduce una funzionalità di query di riconfigurazione della sessione facoltativa per migliorare le prestazioni, poiché le riconfigurazioni interne dello stream derivanti dalle modifiche del valore del parametro 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 granulare sulla logica di riconfigurazione del parametro di sessione interno. Con questo metodo, la riconfigurazione dello stream può avvenire esattamente quando necessario.

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

Questa funzionalità è implementata solo nel servizio fotocamera e nell'HAL fotocamera. Non esistono API pubbliche. Se questa funzionalità viene implementata, i client della videocamera dovrebbero notare miglioramenti delle prestazioni quando lavorano con i parametri di sessione.

Implementazione

Per supportare le query di riconfigurazione della sessione, devi implementare il metodo isReconfigurationRequired per verificare se è necessaria la riconfigurazione completa dello stream per i nuovi valori dei parametri di sessione.

Se il client modifica il valore di un parametro di sessione pubblicizzato, il framework della videocamera chiama il metodo isReconfigurationRequired. A seconda dei valori specifici, l'HAL decide se è necessaria una riconfigurazione completa dello stream. Se l'HAL restituisce false, il framework della videocamera salta la riconfigurazione interna. Se l'HAL restituisce true, il framework riconfigura gli stream e passa i nuovi valori dei parametri di sessione di conseguenza.

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

L'implementazione dell'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 sul rendimento delle richieste di telecamere in attesa. In particolare, non devono verificarsi problemi o ritardi durante lo streaming normale della videocamera.

L'implementazione del dispositivo e dell'HAL deve soddisfare i seguenti requisiti di rendimento:

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

Il metodo isReconfigurationRequired accetta i seguenti argomenti:

  • oldSessionParams: parametri 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: Query richiesta per la riconfigurazione riuscita.
  • METHOD_NOT_SUPPORTED: il dispositivo videocamera 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 dello stream.
  • false: La riconfigurazione dello stream non è necessaria.

Per ignorare una query di riconfigurazione della sessione, l'HAL restituisce METHOD_NOT_SUPPORTED o false. Ciò comporta il comportamento predefinito del servizio videocamera in cui la riconfigurazione dello stream viene attivata a ogni modifica del parametro di sessione.

Convalida

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