緩衝鏡頭的畫面

已加至 ARCore 1.17.0

大多數應用程式只需要緩衝單一相機影格進行轉譯。不過 ARCore 也支援以固定大小緩衝多個相機影格的速度 循環紋理佇列。

採用多執行緒轉譯管道的應用程式可以利用緩衝處理功能, 轉譯效能緩衝區也能讓應用程式在轉譯影格時 穩定影格速率,該模式可減少 UI 轉譯速度緩慢

先決條件

符合下列「任何」條件時,即可啟用相機影像緩衝處理功能:

  1. 如果應用程式已啟用,請呼叫 Session.setCameraTextureNames(ids)

  2. 當一或多個需要內部緩衝處理的 ARCore 功能出現時 啟用。目前包括以下功能:

    • 擴增圖片
    • 擴增臉孔
  3. 針對需要內部緩衝區的特定 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 與目前的畫格一致