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:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
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
.