Đang lưu khung máy ảnh vào bộ đệm

Đã thêm vào ARCore 1.17.0

Hầu hết các ứng dụng chỉ cần lưu một khung máy ảnh vào vùng đệm để kết xuất. Tuy nhiên, ARCore cũng hỗ trợ lưu vào bộ đệm nhiều khung máy ảnh có kích thước cố định hàng đợi hoạ tiết theo vòng tròn.

Các ứng dụng có quy trình kết xuất đa luồng có thể sử dụng quy trình lưu vào bộ đệm để giúp cải thiện hiệu suất kết xuất. Việc lưu vào bộ đệm cũng có thể giúp ứng dụng kết xuất khung hình ở mức tốc độ khung hình nhất quán, giúp giảm tình trạng gián đoạn hình ảnh do hiển thị giao diện người dùng chậm.

Điều kiện tiên quyết

Việc lưu vào bộ đệm hình ảnh của máy ảnh sẽ được bật trong bất kỳ điều kiện nào sau đây:

  1. Khi được ứng dụng bật bằng cách gọi Session.setCameraTextureNames(ids) với nhiều mã hoạ tiết.

  2. Khi một hoặc nhiều tính năng của ARCore cần lưu vào bộ đệm nội bộ bật. Hiện tại, tính năng này bao gồm các tính năng sau:

    • Hình ảnh tăng cường
    • Khuôn mặt được tăng cường
  3. Trên một số thiết bị hỗ trợ ARCore yêu cầu lưu vào bộ đệm nội bộ để hoạt động chính xác.

Xác định xem bạn đã bật độ trễ khung hình hay chưa

Để xác định xem một thiết bị và phiên thực tế tăng cường có xảy ra tình trạng lưu vào bộ đệm khung hình hay không (cũng như còn gọi là độ trễ khung hình), hãy sử dụng đầu ra 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.

Bộ nhớ

Mỗi khung máy ảnh bổ sung được lưu vào vùng đệm sẽ giúp tăng mức sử dụng bộ nhớ. Ví dụ: kết cấu 1080p tiêu tốn khoảng 6 MB bộ nhớ (có được bằng cách nhân độ phân giải 1920 x 1080 x 3 byte dữ liệu RGB trên mỗi pixel).

Xem xét hiệu suất

Việc sử dụng nhiều khung máy ảnh không được đảm bảo làm giảm sự biến đổi của tốc độ khung hình, cũng như việc sử dụng quy trình kết xuất đa luồng không đảm bảo sẽ mang lại hiệu suất tốt hơn trong mọi trường hợp. Các yếu tố sau ảnh hưởng đến hiệu suất thực tế:

  • Quy trình kết xuất ứng dụng

  • Mô hình phân luồng ứng dụng

  • Cấu trúc CPU của thiết bị

  • Hệ điều hành lên lịch

Nếu ứng dụng của bạn không thể tận dụng các khung máy ảnh bổ sung, thì không có tận dụng hiệu suất khi sử dụng nhiều hơn một hoạ tiết.

Bật tính năng lưu vào bộ đệm

Để hướng dẫn ARCore sử dụng kết cấu nào để lưu các khung máy ảnh đến, hãy sử dụng Session.setCameraTextureNames(ids) để cung cấp một mảng gồm một hoặc nhiều mã kết cấu. Hàm này chỉ được gọi sau khi tạo phiên và thường chỉ được gọi một lần.

Trong mỗi lệnh gọi Session.update(), ARCore sẽ ghi đè kết cấu tiếp theo trong hàng đợi theo trình tự vòng tròn. Nếu ứng dụng của bạn chỉ đặt một mã nhận dạng kết cấu duy nhất, cùng một kết cấu sẽ bị ghi đè mỗi lần.

Dùng Frame.getCameraTextureName() để xác định mã hoạ tiết được liên kết với khung hiện tại.