ARCore 1.17.0 中新增
大多數應用程式都只需要緩衝處理單一相機畫面即可轉譯。不過,ARCore 也支援在固定大小的循環紋理佇列中緩衝多個相機影格。
採用多執行緒轉譯管道的應用程式可以使用緩衝功能,改善轉譯效能。緩衝區也有助於應用程式以更一致的畫面更新率轉譯影格,減少UI 轉譯速度緩慢造成的視覺幹擾。
Preconditions
符合下列任一條件時,相機影像緩衝功能就會啟用:
使用多個紋理 ID 呼叫
Session.setCameraTextureNames(ids)
,藉此由應用程式啟用。一或多個需要內部緩衝處理的 ARCore 功能。新功能目前包括:
- 擴增圖片
- 擴增臉孔
在某些 ARCore 支援的裝置上,需要內部緩衝處理才能正確運作。
判斷是否已啟用影格延遲功能
如要判斷特定裝置和 AR 工作階段是否已啟用影格緩衝功能 (也稱為影格延遲),請使用 adb
Logcat 輸出內容:
# 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.
記憶體容量
每增加一個相機緩衝區緩衝處理,就能提升記憶體使用率。舉例來說,1080p 紋理會耗用約 6 MB 的記憶體 (方法是將解析度乘以 1920 x 1080 乘以每個像素三個位元組的 RGB 資料取得)。
效能注意事項
使用多個鏡頭畫面並不保證會降低畫面更新率的變異性,而且不保證在各種情況下使用多執行緒轉譯管道都能提供更優異的效能。下列因素會影響實際效能:
應用程式轉譯管道
應用程式執行緒模型
裝置 CPU 架構
作業系統排程系統
如果應用程式無法利用額外的相機影格,使用多種紋理並不會有效能優勢。
啟用緩衝處理功能
如要指示 ARCore 要使用哪些紋理來緩衝處理傳入的相機畫面,請使用 Session.setCameraTextureNames(ids)
提供一或多個紋理 ID 的陣列。這個函式只會在工作階段建立後呼叫,而且通常只會呼叫一次。
每次呼叫 Session.update()
時,ARCore 都會以循環配置順序覆寫佇列中的下一個紋理。如果應用程式只設定單一紋理 ID,每次都會覆寫相同的紋理。
使用 Frame.getCameraTextureName()
來判斷與目前頁框相關聯的紋理 ID。