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, nell'ambito della 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 delle query di riconfigurazione della sessione, che offre un maggiore controllo sulla logica di riconfigurazione dei parametri delle sessioni interne. Per ulteriori informazioni, consulta la sezione 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 binderizzato che implementa l'API HIDL della videocamera deve utilizzare la rispettiva voce sessionParams HIDL per accedere a tutti i nuovi parametri della sessione in entrata durante la configurazione dello streaming.
I client di fotocamera possono eseguire query sulle chiavi di tutti i parametri di sessione supportati chiamando getAvailableSessionKeys()
e alla fine impostano i loro valori iniziali tramite setSessionParameters()
.
Implementazione
L'implementazione di CameraHal deve compilare il valore
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
nei rispettivi metadati della videocamera statica 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 un cambiamento 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, ad esempio l'intent di acquisizione, non sono adatti e li aggiungono all'elenco dei parametri di sessione potrebbe causare errori CTS a causa di un'eccessiva riconfigurazione interna.
Query di ricofigurazione della sessione
Android 10 introduce una funzionalità facoltativa
delle query di riconfigurazione della sessione per
migliorare le prestazioni, poiché le riconfigurazioni dei flussi interni derivanti dalle modifiche ai valori
dei parametri della sessione possono ridurre le prestazioni. 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 riconfigurazione del flusso
può avvenire esattamente quando necessario.
Gli argomenti per isReconfigurationRequired
forniscono le informazioni richieste su ogni modifica del parametro della sessione in attesa, consentendo vari tipi di personalizzazioni specifiche del dispositivo.
Questa funzionalità è implementata solo nel servizio della videocamera e nell'HAL della videocamera. Non esistono API rivolte al pubblico. Se la funzionalità viene implementata, i client delle videocamere dovrebbero vedere miglioramenti delle prestazioni quando lavorano con 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 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 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 di essere inviata. Pertanto, l'HAL non deve utilizzare questa chiamata al metodo per modificare il proprio comportamento in alcun modo.
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 accesso alla fotocamera 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 client.
I codici di stato di ritorno previsti sono:
OK
: query richiesta per la riconfigurazione riuscita.METHOD_NOT_SUPPORTED
: la 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 ricofigurazione 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
. Questo comporta 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
.