Mise en mémoire tampon des images de l'appareil photo

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:

  1. Lorsque cette fonctionnalité est activée par l'application en appelant ArSession_setCameraTextureNames(ids) avec plusieurs ID de texture.

  2. 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
  3. 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 ArSession_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 à ArSession_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 ArFrame_getCameraTextureName() pour déterminer l'ID de texture associé avec l'image actuelle.