La funzionalità dei parametri di sessione riduce i ritardi consentendo ai client della videocamera di configurare attivamente il sottoinsieme di parametri di richiesta onerosi, ovvero i parametri di sessione, durante la fase di inizializzazione della sessione di acquisizione. Con questa funzionalità, le implementazioni HAL ricevono i parametri client durante la fase di configurazione dello stream anziché durante 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à facoltativa di query di ricofigurazione della sessione per un maggiore controllo sulla logica di ricofigurazione dei parametri della sessione interna. Per ulteriori informazioni, consulta Query di ricofigurazione della sessione.
Esempi e origine
Un'implementazione del parametro della sessione di riferimento fa già parte di CameraHal. Questo HAL utilizza l'API HAL precedente. Il CameraHal incapsulato che implementa l'API HIDL della fotocamera deve utilizzare la rispettiva voce HIDL 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 eventualmente i relativi valori iniziali tramite
setSessionParameters()
.
Implementazione
L'implementazione di CameraHal deve compilare il valore
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
nei 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
generare ritardi imprevisti se modificate durante la durata della sessione di acquisizione.
Alcuni esempi sono i parametri che richiedono una riconfigurazione hardware dispendiosa in termini di tempo o una modifica della pipeline interna della fotocamera. Il controllo dei parametri della sessione può essere ancora esercitato nelle richieste di acquisizione, ma i clienti devono essere consapevoli e prevedere ritardi nella loro app.
Il framework monitora tutte le richieste in arrivo e, se rileva una variazione nel valore di un parametro di sessione, riconfigura internamente la videocamera. La nuova configurazione dello stream passata a CameraHal include quindi i valori dei parametri della sessione aggiornati, 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 che viene 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 del tutto, tra le configurazioni degli stream. I parametri che cambiano spesso, come l'intent di acquisizione, non sono adatti e la loro aggiunta all'elenco dei parametri della sessione potrebbe causare errori CTS a causa di una eccessiva riconfigurazione interna.
Query di ricofigurazione della sessione
Android 10 introduce una funzionalità facoltativa di query di ricofigurazione della sessione per migliorare le prestazioni, in quanto le ricofigurazioni dello stream interno risultanti dalle modifiche del valore del parametro della sessione possono ridurle. Per risolvere il problema,
la versione 3.5 e successive di HIDL
ICameraDeviceSession
supporta il metodo
isReconfigurationRequired
che fornisce un controllo granulare sulla logica di ricofigurazione del parametro della sessione interna. Con questo metodo, la ricofigurazione dello stream può avvenire
precisemente quando è richiesta.
Gli argomenti per isReconfigurationRequired
forniscono le informazioni richieste su ogni modifica del parametro della sessione in attesa, consentendo vari tipi di personalizzazioni specifiche per il dispositivo.
Questa funzionalità è implementata solo nel servizio della fotocamera e nell'HAL della fotocamera. Non esistono API rivolte al pubblico. Se questa funzionalità è implementata, i client della videocamera dovrebbero registrare miglioramenti delle prestazioni quando si utilizzano i parametri di sessione.
Implementazione
Per supportare le query di ricofigurazione della sessione, devi implementare il metodo
isReconfigurationRequired
per verificare se è necessaria una ricofigurazione completa dello stream per i nuovi
valori dei parametri della sessione.
Se il client modifica il valore di un parametro di sessione pubblicizzato, il framework della camera 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 fotocamera salta la riconfigurazione interna. Se l'HAL restituisce true
, il framework riconfigura gli stream e passa i nuovi valori dei parametri della sessione di conseguenza.
Il metodo isReconfigurationRequired
può essere chiamato dal framework un po' di 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 in alcun modo il proprio comportamento.
L'implementazione di 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 fotocamere in attesa. In particolare, non devono verificarsi glitch o ritardi durante il normale streaming della videocamera.
L'implementazione del dispositivo e dell'HAL deve soddisfare i seguenti requisiti di prestazioni:
- Le impostazioni hardware e software della videocamera non devono essere modificate.
- Non deve esserci alcun impatto visibile sull'utente sul rendimento della fotocamera.
Il metodo isReconfigurationRequired
accetta i seguenti argomenti:
oldSessionParams
: parametri della sessione della sessione precedente. In genere, i parametri di sessione esistenti.newSessionParams
: nuovi parametri di sessione impostati dal cliente.
I codici di stato di ritorno previsti sono:
OK
: query richiesta per la riconfigurazione riuscita.METHOD_NOT_SUPPORTED
: il dispositivo della videocamera non supporta la query di ricofigurazione.INTERNAL_ERROR
: la query di ricofigurazione non può essere completata a causa di un errore interno.
I valori restituiti sono:
true
: è necessaria la ricofigurazione dello stream.false
: la ricofigurazione dello stream non è necessaria.
Per ignorare una query di riconfigurazione della sessione, l'HAL restituisce
METHOD_NOT_SUPPORTED
o false
. Il risultato è il comportamento predefinito del servizio della videocamera, in cui la ricofigurazione dello stream viene attivata a ogni modifica del parametro della sessione.
Convalida
La funzionalità di query di ricofigurazione della sessione può essere convalidata utilizzando il caso di test VTS in CameraHidlTest#configureStreamsWithSessionParameters
.