बफ़र हो रहे कैमरा फ़्रेम

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.

मेमोरी

हर अतिरिक्त कैमरा फ़्रेम को बफ़र करके मेमोरी का इस्तेमाल बढ़ाया जाता है. उदाहरण के लिए, 1080p टेक्स्चर करीब 6 एमबी की मेमोरी का इस्तेमाल करता है (1920 x 1080 के रिज़ॉल्यूशन को तीन बाइट आरजीबी डेटा प्रति पिक्सल से गुणा करके).

प्रदर्शन संबंधी विचार

एक से ज़्यादा कैमरा फ़्रेम इस्तेमाल करने से, फ़्रेम रेट में होने वाले उतार-चढ़ाव की गारंटी कम नहीं होती. साथ ही, मल्टीथ्रेड रेंडरिंग पाइपलाइन का इस्तेमाल करने से, सभी परिस्थितियों में बेहतर परफ़ॉर्मेंस मिलने की गारंटी नहीं मिल सकती. असल दुनिया में परफ़ॉर्मेंस पर इन बातों का असर पड़ता है:

  • ऐप्लिकेशन रेंडरिंग पाइपलाइन

  • ऐप्लिकेशन में थ्रेड की सुविधा का मॉडल

  • डिवाइस का सीपीयू आर्किटेक्चर

  • ऑपरेटिंग सिस्टम शेड्यूलिंग सिस्टम

अगर आपका ऐप्लिकेशन अतिरिक्त कैमरा फ़्रेम का फ़ायदा नहीं उठा पा रहा है, तो एक से ज़्यादा टेक्सचर का इस्तेमाल करने से उसकी परफ़ॉर्मेंस पर कोई फ़ायदा नहीं होगा.

बफ़रिंग चालू करें

आने वाले कैमरा फ़्रेम को बफ़र करने के लिए ARCore का इस्तेमाल कैसे करें, यह बताने के लिए एक या एक से ज़्यादा टेक्सचर आईडी का कलेक्शन उपलब्ध कराने के लिए, Session.setCameraTextureNames(ids) का इस्तेमाल करें. इस फ़ंक्शन को सिर्फ़ सेशन बनाने के बाद कॉल किया जाता है और आम तौर पर इसे सिर्फ़ एक बार कॉल किया जाता है.

Session.update() को किए जाने वाले हर कॉल के दौरान, ARCore मौजूदा टेक्सचर को राउंड-रॉबिन क्रम में बदल देता है. अगर आपका ऐप्लिकेशन सिर्फ़ एक टेक्सचर आईडी सेट करता है, तो हर बार वही टेक्सचर आईडी को ओवरराइट किया जाएगा.

मौजूदा फ़्रेम से जुड़े टेक्सचर आईडी को तय करने के लिए, Frame.getCameraTextureName() का इस्तेमाल करें.