Ajouté dans ARCore 1.17.0
La plupart des applications n'ont besoin de mettre en mémoire tampon qu'un seul cadre d'appareil photo pour le rendu. Toutefois, ARCore accepte également la mise en mémoire tampon de plusieurs images de l'appareil photo dans une taille fixe. de texture à tour de rôle.
Les applications dotées d'un pipeline de rendu multithread peuvent utiliser la mise en mémoire tampon pour améliorer les performances de rendu. La mise en mémoire tampon peut également aider les applications à afficher les images à un une fréquence d'images cohérente, ce qui peut réduire le stuttering visuel causé par un affichage lent de l'interface utilisateur.
Conditions préalables
La mise en mémoire tampon des images de l'appareil photo est activée dans l'une des conditions suivantes:
Lorsque cette fonctionnalité est activée par l'application en appelant
Session.setCameraTextureNames(ids)
avec plusieurs ID de texture.Lorsqu'une ou plusieurs fonctionnalités ARCore nécessitant une mise en mémoire tampon interne sont activé. Actuellement, cela inclut les fonctionnalités suivantes:
- Images augmentées
- Augmented Faces
Sur certains appareils compatibles ARCore nécessitant une mise en mémoire tampon interne fonctionne correctement.
Déterminer si le délai d'affichage est activé
Pour déterminer si un appareil et une session de RA donnés disposent d'une mise en mémoire tampon des frames (également
(appelé "délai de trame") est activé, utilisez la sortie 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.
Mémoire
Chaque image de caméra supplémentaire mise en mémoire tampon augmente l'utilisation de la mémoire. Par exemple : Une texture 1080p consomme environ 6 Mo de mémoire (obtenue en multipliant un (1 920 x 1 080 par 3 octets de données RVB par pixel).
Considérations sur les performances
Il n'est pas garanti que l'utilisation de plusieurs images fréquences d'images, et l'utilisation d'un pipeline de rendu multithread n'est pas garantie offrent de meilleures performances en toutes circonstances. Les facteurs suivants affectent des performances réelles:
Pipeline de rendu d'application
Modèle de thread d'application
Architecture du processeur de l'appareil
Système de planification du système d'exploitation
Si votre application ne parvient pas à exploiter les images supplémentaires, en utilisant plusieurs textures.
Activer la mise en mémoire tampon
Pour indiquer à ARCore quelles textures utiliser pour mettre en mémoire tampon les images entrantes de l'appareil photo, utilisez
Session.setCameraTextureNames(ids)
pour fournir un tableau d'un ou plusieurs ID de texture.
Cette fonction n'est appelée qu'après la création de la session et, en général,
une seule fois.
Lors de chaque appel à Session.update()
, ARCore écrase la texture suivante dans
la file d'attente en
séquence à tour de rôle. Si votre application ne définit
qu'un seul ID de texture,
la même texture sera écrasée à chaque fois.
Utilisez Frame.getCameraTextureName()
pour déterminer l'ID de texture associé
avec l'image actuelle.