التخزين المؤقت لإطارات الكاميرا

تمت الإضافة في ARCore 1.17.0

تحتاج معظم التطبيقات إلى التخزين المؤقت لإطار كاميرا واحد فقط للعرض. ومع ذلك، يدعم ARCore أيضًا التخزين المؤقت لعدة إطارات كاميرا في قائمة انتظار بنية دائرية ذات حجم ثابت.

يمكن للتطبيقات التي تتضمّن مسار عرض متعدد السلاسل استخدام ميزة التخزين المؤقت للمساعدة في تحسين أداء العرض. ويمكن أن يساعد التخزين المؤقت أيضًا التطبيقات على عرض الإطارات بعدد لقطات أكثر اتّساقًا، ما قد يحدّ من التعثر البصري الناتج عن بطء عرض واجهة المستخدم.

الشروط المسبَقة

يصبح التخزين المؤقت للصور مفعّلاً في الكاميرا بموجب أيٍّ من الحالات التالية:

  1. عند التفعيل من خلال التطبيق من خلال طلب الرمز Session.setCameraTextureNames(ids) باستخدام عدة معرّفات للزخرفة.

  2. عند تفعيل ميزة واحدة أو أكثر من ميزات ARCore التي تتطلب استخدام ميزة التخزين المؤقت الداخلي. ويشمل ذلك حاليًا الميزات التالية:

    • الصور المعزَّزة
    • الوجوه المعزَّزة
  3. على بعض الأجهزة المتوافقة مع ARCore والتي تتطلب تخزين مؤقت داخلي ليعمل بشكل صحيح.

تحديد ما إذا تم تفعيل ميزة "تأخير عرض الإطارات"

لتحديد ما إذا تم تفعيل ميزة "التخزين المؤقت للإطارات" في جهاز معيّن وجلسة الواقع المعزّز (المعروفة أيضًا باسم "تأخير عرض الإطارات")، استخدِم أداة إخراج الدالة 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.

Memory

ويزيد كل إطار إضافي يتم تخزينه مؤقتًا في الكاميرا من استخدام الذاكرة. على سبيل المثال، تستهلك بنية 1080p ما يقرب من 6 ميغابايت من الذاكرة (يتم الحصول عليها بضرب درجة الدقة 1920 × 1080 في ثلاثة بايت من بيانات نموذج أحمر أخضر أزرق لكل بكسل).

اعتبارات الأداء

لا يضمن استخدام إطارات كاميرات متعدّدة تقليل تنوّع معدّلات الإطارات، ولا يمكن ضمان توفير أداء أفضل في جميع الظروف عند استخدام مسار عرض متعدد السلاسل. تؤثر العوامل التالية في الأداء الحقيقي:

  • مسار عرض التطبيق

  • نموذج سلاسل محادثات التطبيقات

  • بنية وحدة المعالجة المركزية (CPU) للجهاز

  • نظام جدولة نظام التشغيل

إذا لم يتمكن تطبيقك من الاستفادة من إطارات الكاميرا الإضافية، لن يكون هناك أفضلية في الأداء عند استخدام أكثر من زخرفة واحدة.

تفعيل ميزة التخزين المؤقت

لتوجيه ARCore إلى تحديد الزخارف التي يجب استخدامها لتخزين إطارات الكاميرا الواردة مؤقتًا، استخدِم Session.setCameraTextureNames(ids) لتوفير مصفوفة من معرّف واحد أو أكثر للزخرفة. يتم استدعاء هذه الدالة فقط بعد إنشاء الجلسة، وعادةً ما يتم استدعائها مرة واحدة فقط.

خلال كل استدعاء إلى Session.update()، يستبدل ARCore الزخرفة التالية في قائمة الانتظار بتسلسل دائري. إذا قام تطبيقك بتعيين معرف زخرفة واحد فقط، فسيتم استبدال نفس الزخرفة في كل مرة.

يمكنك استخدام Frame.getCameraTextureName() لتحديد معرّف الزخرفة المرتبط بالإطار الحالي.