Ramki do buforowania

Dodano w ARCore 1.17.0

Większość aplikacji musi buforować tylko jedną klatkę z aparatu na potrzeby renderowania. Pamiętaj jednak: ARCore obsługuje również buforowanie wielu klatek kamery o stałym rozmiarze w trybie rotacyjnym kolejki tekstur.

Aplikacje z wielowątkowym potokiem renderowania mogą korzystać z buforowania, aby ulepszyć działanie witryny wydajność renderowania. Buforowanie może też ułatwić aplikacjom renderowanie klatek stałą liczbę klatek, co może ograniczyć zacinanie się obrazu spowodowane powolnego renderowania interfejsu.

Warunki wstępne

Buforowanie zdjęć z aparatu włącza się w dowolnej z tych sytuacji:

  1. Gdy funkcja zostanie włączona przez aplikację, dzwoniąc pod numer Session.setCameraTextureNames(ids) z wieloma identyfikatorami tekstur.

  2. Gdy co najmniej jedna funkcja ARCore wymagająca wewnętrznego buforowania jest włączono. Obecnie obejmuje to następujące funkcje:

    • Obrazy rozszerzone
    • Powiększone twarze
  3. Na niektórych urządzeniach obsługujących ARCore, które wymagają wewnętrznego buforowania, aby które działają poprawnie.

Sprawdzanie, czy opóźnienie klatek jest włączone

Aby określić, czy dane urządzenie i sesja AR mają buforowanie klatek (również znanej jako opóźnienie klatek), użyj danych wyjściowych 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.

Pamięć

Buforowanie każdej dodatkowej klatki kamery zwiększa wykorzystanie pamięci. Przykład: tekstura 1080p zużywa około 6 MB pamięci (po pomnożeniu (rozdzielczość 1920 x 1080 na 3 bajty danych RGB na piksel).

Możliwe spowolnienie działania witryny

Użycie wielu klatek kamery nie gwarantuje zmniejszenia zmienności liczby klatek na sekundę, a zastosowanie wielowątkowego potoku renderowania które zapewniają większą skuteczność w każdej sytuacji. Na te czynniki mają wpływ rzeczywistą wydajność:

  • Potok renderowania aplikacji

  • Model podziału aplikacji na wątki

  • Architektura procesora urządzenia

  • system planowania systemu operacyjnego,

Jeśli aplikacja nie może wykorzystać dodatkowych ramek aparatu, większa wydajność przy użyciu więcej niż jednej tekstury.

Włącz buforowanie

Aby wskazać ARCore tekstury, które mają być używane do buforowania przychodzących klatek aparatu, użyj Session.setCameraTextureNames(ids), aby podać tablicę z co najmniej 1 identyfikatorem tekstury. Ta funkcja jest wywoływana dopiero po utworzeniu sesji i zwykle jest wywoływana tylko raz.

Podczas każdego wywołania Session.update() ARCore zastępuje następną teksturę w w kolejności systematycznej. Jeśli aplikacja ustawia tylko jeden identyfikator tekstury, ta sama tekstura zostanie za każdym razem zastąpiona.

Użyj Frame.getCameraTextureName(), aby określić powiązany identyfikator tekstury z bieżącą klatką.