Aggiunto in ARCore 1.17.0
La maggior parte delle app deve eseguire il buffering di un solo fotogramma della fotocamera per il rendering. Tuttavia, ARCore supporta anche il buffering di più fotogrammi della fotocamera di dimensioni fisse la coda della texture round-robin.
Le app con una pipeline di rendering multithread possono utilizzare il buffering per migliorare delle prestazioni di rendering. Il buffering può anche aiutare le app a eseguire il rendering dei frame a un una frequenza fotogrammi più elevata, che può ridurre lo stuttering della vista causato da rendering lento dell'interfaccia utente.
Preconditions
Il buffering delle immagini della videocamera viene attivato in una delle seguenti condizioni:
Se attivata dall'app chiamando il numero
ArSession_setCameraTextureNames(ids)
con più ID texture.Quando una o più funzionalità ARCore che richiedono il buffering interno vengono attivata. Al momento sono incluse le seguenti funzionalità:
- Immagini aumentate
- Volti aumentati
Su alcuni dispositivi supportati da ARCore che richiedono il buffering interno per funzionino correttamente.
Determina se il ritardo frame è abilitato
Per determinare se un determinato dispositivo e una determinata sessione AR hanno il buffering dei frame (anche
noto come ritardo frame) abilitato, utilizza l'output logcat adb
:
# Camera frame buffering is turned off when frame delay is zero.
adb logcat | grep 'Update Frame Delay'
… I native : session.cc:3141 Update Frame Delay to 0 frames.
# Camera frame buffering is turned on when frame count is non-zero.
# Note: The size of the buffer can vary over time.
adb logcat | grep 'Update Frame Delay'
… I native : session.cc:3141 Update Frame Delay to 6 frames.
…
… I native : session.cc:3141 Update Frame Delay to 4 frames.
…
… I native : session.cc:3141 Update Frame Delay to 2 frames.
Memoria
Ogni frame della fotocamera aggiuntivo presente nel buffer aumenta l'utilizzo della memoria. Ad esempio: una texture da 1080p consuma circa 6 MB di memoria (ottenuta moltiplicando risoluzione di 1920 x 1080 con 3 byte di dati RGB per pixel).
Considerazioni sulle prestazioni
Non è garantito che l'utilizzo di più cornici della fotocamera riduca la variabilità delle le frequenze fotogrammi e l'utilizzo di una pipeline di rendering multithread offrire prestazioni migliori in tutte le circostanze. Sono interessati i seguenti fattori prestazioni realistiche:
La pipeline di rendering dell'app
Il modello di thread delle app
L'architettura della CPU del dispositivo
Il sistema di pianificazione del sistema operativo
Se la tua app non è in grado di sfruttare inquadrature aggiuntive, non: in termini di prestazioni grazie all'uso di più texture.
Attiva buffer
Per indicare ad ARCore quali texture utilizzare per il buffering dei fotogrammi della fotocamera in arrivo, usa
ArSession_setCameraTextureNames(ids)
per fornire un array di uno o più ID texture.
Questa funzione viene chiamata solo dopo la creazione della sessione e in genere viene chiamata solo
una volta sola.
Durante ogni chiamata a ArSession_update()
, ARCore sovrascrive la texture successiva in
la coda in una sequenza di tipo round robin. Se l'app imposta un solo ID texture,
la stessa texture verrà sovrascritta ogni volta.
Utilizza ArFrame_getCameraTextureName()
per determinare l'ID texture associato
con il frame corrente.