Arabelleğe alınan kamera çerçeveleri

ARCore 1.17.0'da eklendi

Çoğu uygulamanın oluşturma işlemi için yalnızca tek bir kamera çerçevesini arabelleğe alması gerekir. Bununla birlikte ARCore, sabit boyutlu yuvarlak dokulu doku sırasında birden fazla kamera çerçevesinin arabelleğe alınmasını da destekler.

Çok iş parçacıklı oluşturma ardışık düzenine sahip uygulamalar, oluşturma performansını iyileştirmek için arabelleğe almayı kullanabilir. Arabelleğe alma ayrıca uygulamaların kareleri daha tutarlı bir kare hızında oluşturmasına yardımcı olabilir. Bu da yavaş kullanıcı arayüzü oluşturmasından kaynaklanan görsel takılmayı azaltabilir.

Preconditions

Kamera görüntüsünü arabelleğe alma, aşağıdaki koşullardan herhangi biri olduğunda etkinleştirilir:

  1. Birden fazla doku kimliğiyle Session.setCameraTextureNames(ids) yöntemini çağırarak uygulama tarafından etkinleştirildiğinde.

  2. Dahili arabelleğe alma gerektiren bir veya daha fazla ARCore özelliği etkinleştirildiğinde. Şu anda aşağıdaki özellikler bu kapsamdadır:

    • Genişletilmiş Resimler
    • Genişletilmiş Yüzler
  3. Doğru çalışması için dahili arabelleğe alma gerektiren ARCore destekli belirli cihazlarda.

Kare gecikmesinin etkinleştirilip etkinleştirilmediğini belirleme

Belirli bir cihazda ve AR oturumunda çerçeve arabelleğe almanın (kare gecikmesi olarak da bilinir) etkinleştirilip etkinleştirilmediğini belirlemek için adb logcat çıkışını kullanın:

# 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.

Bellek

Arabelleğe alınan her ek kamera çerçevesi, bellek kullanımını artırır. Örneğin, 1080p bir doku yaklaşık 6 MB bellek kullanır (1920 x 1080 çözünürlüğünün piksel başına üç baytlık RGB verisi ile çarpılmasıyla elde edilir).

Performansla ilgili konular

Birden fazla kamera çerçevesi kullanmanın, kare hızlarında çeşitliliği azaltacağı garanti edilmez. Ayrıca, çok iş parçacıklı bir oluşturma ardışık düzeni kullanmanın her durumda daha iyi performans sağlayacağı garanti edilmez. Aşağıdaki faktörler gerçek dünya performansını etkiler:

  • Uygulama oluşturma ardışık düzeni

  • Uygulama ileti dizisi modeli

  • Cihazın CPU mimarisi

  • İşletim sistemi planlama sistemi

Uygulamanız ek kamera çerçevelerinden yararlanamıyorsa birden fazla doku kullanmanın performans avantajı olmaz.

Arabelleğe almayı etkinleştir

ARCore'a gelen kamera çerçevelerini arabelleğe almak üzere hangi dokuların kullanılacağını bildirmek için Session.setCameraTextureNames(ids) kullanarak bir veya daha fazla doku kimliği dizisi sağlayın. Bu işlev yalnızca oturum oluşturulduktan sonra çağrılır ve genellikle yalnızca bir kez çağrılır.

Session.update()'e yapılan her çağrı sırasında ARCore, çevrimsel bir sırayla sıradaki bir sonraki dokunun üzerine yazar. Uygulamanız yalnızca tek bir doku kimliği ayarlıyorsa her seferinde aynı dokunun üzerine yazılır.

Geçerli çerçeveyle ilişkili doku kimliğini belirlemek için Frame.getCameraTextureName() aracını kullanın.