已加至 ARCore 1.17.0
大多數應用程式只需要緩衝單一相機影格進行轉譯。不過 ARCore 也支援以固定大小緩衝多個相機影格的速度 循環紋理佇列。
採用多執行緒轉譯管道的應用程式可以利用緩衝處理功能, 轉譯效能緩衝區也能讓應用程式在轉譯影格時 穩定影格速率,該模式可減少 UI 轉譯速度緩慢。
先決條件
符合下列「任何」條件時,即可啟用相機影像緩衝處理功能:
如果應用程式已啟用,請呼叫
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 x 3 位元組 RGB 資料。
效能注意事項
使用多個鏡頭影格,無法保證可降低 影格速率,也不保證採用多執行緒轉譯管道 但無論如何,您都能提供更佳的效能以下因素會影響 實際成效:
應用程式轉譯管道
應用程式執行緒模型
裝置 CPU 架構
作業系統排程系統
如果您的應用程式無法利用額外的相機畫面,則應用程式本身不會 提升效能。
啟用緩衝功能
如要指示 ARCore 要使用哪些紋理來緩衝區傳入的相機影格,請使用
Session.setCameraTextureNames(ids)
:提供一或多個紋理 ID 的陣列。
此函式只會在工作階段建立後呼叫,且通常只會呼叫
一次。
每次呼叫 Session.update()
時,ARCore 都會覆寫
循環處理佇列。如果應用程式只設定單一紋理 ID,
每次都會覆寫相同的紋理。
使用 Frame.getCameraTextureName()
判斷相關聯的紋理 ID
與目前的畫格一致