La funzione dei parametri di sessione riduce i ritardi consentendo ai client della telecamera 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 tue implementazioni HAL ricevono i parametri del 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 usando la funzionalità di query di riconfigurazione della sessione facoltativa per un maggiore controllo sulla logica di riconfigurazione dei parametri della sessione interna. Per ulteriori informazioni, vedere Query di riconfigurazione della sessione .
Esempi e fonte
L'implementazione di un parametro di sessione di riferimento fa già parte di CameraHal . Questo HAL utilizza l'API Hal legacy. Il CameraHal vincolato che implementa l'API HIDL della telecamera deve utilizzare la rispettiva voce HIDL sessionParams per accedere a tutti i nuovi parametri di sessione in ingresso durante la configurazione del flusso.
I client della fotocamera possono interrogare le chiavi di tutti i parametri di sessione supportati chiamando getAvailableSessionKeys()
ed eventualmente impostarne i valori iniziali tramite setSessionParameters()
.
Implementazione
L'implementazione di 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 interna della pipeline della telecamera. Il controllo sui parametri di sessione può ancora essere esercitato nelle richieste di acquisizione, ma i client dovrebbero essere a conoscenza e aspettarsi ritardi nella loro applicazione.
Il framework monitora tutte le richieste in entrata 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, che vengono utilizzati per configurare la pipeline della telecamera in modo più efficiente.
Personalizzazione
È possibile definire i tag nell'elenco dei parametri di sessione disponibili che viene popolato sul lato CameraHal. Questa funzione non è attiva se CameraHal lascia vuoto l'elenco dei parametri di sessione disponibili.
Convalida
CTS include i seguenti nuovi casi per i parametri della sessione di test:
-
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 come parte dei parametri di sessione passati durante la configurazione del flusso al livello HAL.
I parametri di sessione devono essere selezionati con cura. 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 l'aggiunta 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 facoltativa per migliorare le prestazioni poiché le riconfigurazioni del flusso interno risultanti dalle modifiche al valore dei parametri della sessione possono ridurre le prestazioni. Per risolvere questo problema, HIDL ICameraDeviceSession
versione 3.5 e successive supporta il metodo isReconfigurationRequired
, che fornisce un controllo dettagliato sulla logica di riconfigurazione dei parametri della sessione interna. 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 funzione è implementata solo nel servizio fotocamera e nella fotocamera HAL. Non ci sono API rivolte al pubblico. Se questa funzione è implementata, i client della telecamera dovrebbero vedere miglioramenti delle prestazioni quando lavorano con i parametri di 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 pubblicizzato, il framework della telecamera chiama il metodo isReconfigurationRequired
. A seconda dei valori specifici, l'HAL decide se è necessaria una riconfigurazione completa del flusso. Se 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 di essere inviata. Pertanto, l'HAL non deve utilizzare questa chiamata al metodo per modificarne il comportamento in alcun modo.
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 di telecamere in sospeso. In particolare, non devono esserci problemi o ritardi durante il normale streaming della telecamera.
Il dispositivo e l'implementazione HAL devono soddisfare i seguenti requisiti di prestazione:
- Le impostazioni hardware e software della fotocamera non devono essere modificate.
- Non deve esserci alcun impatto visibile dall'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 della fotocamera non supporta la query di riconfigurazione. -
INTERNAL_ERROR
: Impossibile completare la query di riconfigurazione a causa di un errore interno.
I valori di ritorno sono:
-
true
: è necessaria la riconfigurazione del flusso. -
false
: la riconfigurazione del flusso non è richiesta.
Per ignorare una query di riconfigurazione della sessione, HAL restituisce METHOD_NOT_SUPPORTED
o false
. Ciò determina il comportamento predefinito del servizio della telecamera in cui la riconfigurazione del flusso viene attivata a ogni modifica del parametro della sessione.
Convalida
La funzionalità della query di riconfigurazione della sessione può essere convalidata usando il test case VTS in CameraHidlTest#configureStreamsWithSessionParameters
.