vr_module स्ट्रक्चर का रेफ़रंस
#include <
vr.h
>
डेटा फ़ील्ड |
|
struct hw_module_t | सामान्य |
void(* | init )(struct vr_module *module) |
void(* | set_vr_mode )(struct vr_module *module, bool enabled) |
void * | reserved [8-2] |
पूरी जानकारी
वर्चुअल रिएलिटी (वीआर) ऐप्लिकेशन का इस्तेमाल किए जाने पर कॉलबैक पाने के लिए, इस एचएएल को लागू करें. आम तौर पर, वीआर ऐप्लिकेशन के लिए डिसप्ले और परफ़ॉर्मेंस से जुड़ी कई खास शर्तें होती हैं. इनमें ये शामिल हैं:
- सेंसर के रिस्पॉन्स में लगने वाला कम समय - IMU, ऐक्सीलेरोमीटर, और जायरो से लेकर ऐप्लिकेशन के लिए दिखने वाले कॉलबैक तक, एंड-टू-एंड रिस्पॉन्स में लगने वाला कुल समय बहुत कम होना चाहिए. आम तौर पर, यह समय 5 मिलीसेकंड से कम होना चाहिए. एचआईएफ़आई सेंसर के साथ काम करने के लिए, ऐसा करना ज़रूरी है.
- डिसप्ले में कम इंतज़ार - जीपीयू ड्रॉ कॉल से लेकर डिसप्ले के असल अपडेट तक, एंड-टू-एंड इंतज़ार का कुल समय कम से कम होना चाहिए. ऐसा करने के लिए, SurfaceFlinger को सिंगल-बफ़र मोड में इस्तेमाल किया जाता है. साथ ही, यह पक्का किया जाता है कि ड्रॉ कॉल, डिसप्ले स्कैनआउट के साथ सही तरीके से सिंक हो रहे हों. यह व्यवहार, EGL एक्सटेंशन की मदद से ऐप्लिकेशन को दिखाया जाता है. इसके लिए ज़रूरी EGL एक्सटेंशन नीचे देखें.
- कम समय तक दिखने वाला डिसप्ले - डिसप्ले की पर्सिस्टेंस सेटिंग को जितना हो सके उतना कम सेट किया जाना चाहिए. हालांकि, डिसप्ले की रोशनी को सामान्य रखना ज़रूरी है. 60Hz पर चलने वाले सामान्य डिसप्ले के लिए, पिक्सल को 3.5 मिलीसेकंड से कम समय के लिए रोशन किया जाना चाहिए, ताकि उन्हें कम अवधि के लिए रोशन करने वाला डिसप्ले माना जा सके. इससे, वीआर सेटिंग में मूवमेंट के दौरान गॉस्टिंग (विज़ुअल के पीछे धुंधला धब्बा दिखना) से बचा जा सकता है. साथ ही, BRIGHTNESS_MODE_LOW_PERSISTENCE सेट होने पर, इसे lights.h HAL से चालू किया जाना चाहिए.
- जीपीयू और सीपीयू की लगातार परफ़ॉर्मेंस - जब किसी वीआर ऐप्लिकेशन के लिए, जीपीयू/सीपीयू का अलग-अलग तरह का वर्कलोड दिया जाता है, जिसमें फ़्रेम के लिए कई बार नियमित अंतराल पर काम करने की ज़रूरत होती है, तो सीपीयू शेड्यूलिंग से यह पक्का होना चाहिए कि ऐप्लिकेशन रेंडर थ्रेड का काम, शेड्यूल किए जाने के 1 मि॰से॰ के अंदर लगातार चलता रहे और ड्रॉ विंडो खत्म होने से पहले पूरा हो जाए. इसके लिए, वीआर मोड में चल रहे वीआर ऐप्लिकेशन की रेंडर थ्रेड के लिए, एक सीपीयू कोर को खास तौर पर रिज़र्व किया जाना चाहिए. साथ ही, इसे "टॉप-ऐप्लिकेशन" सीपीयू सेट में उपलब्ध कराया जाना चाहिए. इसी तरह, सीपीयू, जीपीयू, और बस क्लॉकरेट को सही बनाए रखना ज़रूरी है, ताकि यह पक्का किया जा सके कि रेंडरिंग का वर्कलोड, हर फ़्रेम को रेंडर करने के लिए तय किए गए समय में पूरा हो जाए. ऐसा तब किया जाना चाहिए, जब डिवाइस को गर्मी से बचाने के लिए, वीआर मोड में power.h एचएएल में POWER_HINT_SUSTAINED_PERFORMANCE फ़्लैग सेट किया गया हो.
- ज़रूरी EGL एक्सटेंशन मौजूद होने चाहिए - ऊपर दी गई सुविधाओं को चालू करने के लिए, EGL एक्सटेंशन के साथ-साथ GPU की सभी ज़रूरी सेटिंग भी मौजूद होनी चाहिए: EGL_ANDROID_create_native_client_buffer, EGL_ANDROID_front_buffer_auto_refresh, EGL_EXT_protected_content, EGL_KHR_mutable_render_buffer, EGL_KHR_reusable_sync, और EGL_KHR_wait_sync.
- सटीक थर्मल रिपोर्टिंग - thermal.h HAL में, सटीक थर्मल तापमान और सीमाओं की जानकारी दी जानी चाहिए. खास तौर पर, DEVICE_TEMPERATURE_SKIN के लिए डिवाइस के मौजूदा स्किन तापमान की सटीक जानकारी दी जानी चाहिए. साथ ही, इस डिवाइस के लिए रिपोर्ट किए गए vr_throttling_threshold में, तापमान की उस सीमा की सटीक जानकारी दी जानी चाहिए जिससे ज़्यादा होने पर, डिवाइस का थर्मल गवर्नर सीपीयू, जीपीयू, और/या बस क्लॉक रेट को, लगातार अच्छी परफ़ॉर्मेंस के लिए ज़रूरी कम से कम सीमा से नीचे ले जाता है. इसके बारे में पिछले बुलेट पॉइंट में बताया गया है.
आम तौर पर, इस एचएएल को लागू करने वाले वेंडर, set_vr_mode का इस्तेमाल एक हिंट के तौर पर करते हैं. इससे, ऊपर बताई गई किसी भी ज़रूरत के लिए, वीआर परफ़ॉर्मेंस को बेहतर बनाने की सुविधा चालू की जा सकती है. साथ ही, वीआर डिसप्ले मोड के लिए डिवाइस की किसी भी सुविधा को चालू किया जा सकता है. अगर ऊपर बताई गई ज़रूरी शर्तों को पूरा करने के लिए कोई ऑप्टिमाइज़ेशन उपलब्ध नहीं है या ज़रूरी नहीं है, तो हो सकता है कि set_vr_mode कॉल कुछ न करे.
इस एचएएल में मौजूद किसी भी तरीके को Android फ़्रेमवर्क से एक साथ नहीं बुलाया जाएगा.
फ़ील्ड का दस्तावेज़
struct hw_module_t common |
मॉड्यूल के सामान्य तरीके. यह vr_module के पहले सदस्य के तौर पर होना चाहिए, क्योंकि इस स्ट्रक्चर के उपयोगकर्ता, hw_module_t को vr_module पॉइंटर पर कास्ट कर सकते हैं. ऐसा उन संदर्भों में किया जा सकता है जहां यह पता हो कि hw_module_t , vr_module का रेफ़रंस देता है .
void(* init)(struct vr_module *module) |
void(* set_vr_mode)(struct vr_module *module, bool enabled) |
वीआर मोड की स्थिति सेट करें. 'चालू है' पैरामीटर की संभावित स्थितियां ये हैं: गलत - वीआर मोड बंद है. वीआर से जुड़ी सभी सेटिंग बंद करें. सही - वीआर मोड चालू है. वीआर से जुड़ी सभी सेटिंग चालू करें.
जब भी Android सिस्टम वीआर मोड में जाता है या उससे बाहर निकलता है, तब इसे ट्रिगर किया जाता है. आम तौर पर, ऐसा तब होता है, जब उपयोगकर्ता किसी ऐसे वीआर ऐप्लिकेशन पर स्विच करता है या उससे स्विच करता है जो स्टीरियोस्कोपिक रेंडरिंग कर रहा है.
इस स्ट्रक्चर का दस्तावेज़, इस फ़ाइल से जनरेट किया गया था:
- hardware/libhardware/include/hardware/ vr.h