बफ़रक्यू और ग्रैलोक

बफ़रक्यू वर्ग उन घटकों को जोड़ता है जो ग्राफ़िकल डेटा ( उत्पादकों ) के बफ़र्स को उन घटकों से जोड़ते हैं जो प्रदर्शन या आगे की प्रक्रिया ( उपभोक्ताओं ) के लिए डेटा स्वीकार करते हैं। सिस्टम के माध्यम से ग्राफ़िकल डेटा के बफ़र्स को स्थानांतरित करने वाली लगभग हर चीज़ बफ़रक्यू पर निर्भर करती है।

ग्रालॉक मेमोरी एलोकेटर बफर आवंटन करता है और इसे दो विक्रेता-विशिष्ट एचआईडीएल इंटरफेस ( hardware/interfaces/graphics/allocator/ और hardware/interfaces/graphics/mapper/ ) के माध्यम से कार्यान्वित किया जाता है। allocate() फ़ंक्शन अपेक्षित तर्कों (चौड़ाई, ऊंचाई, पिक्सेल प्रारूप) के साथ-साथ उपयोग के झंडे का एक सेट लेता है।

बफ़रक्यू निर्माता और उपभोक्ता

उपभोक्ता बफ़रक्यू डेटा संरचना बनाते हैं और उसके मालिक होते हैं और अपने उत्पादकों की तुलना में विभिन्न प्रक्रियाओं में मौजूद हो सकते हैं। जब एक निर्माता को बफर की आवश्यकता होती है, तो यह बफ़र की चौड़ाई, ऊंचाई, पिक्सेल प्रारूप और उपयोग के झंडे को निर्दिष्ट करते हुए, dequeueBuffer() कहकर dequeueBuffer() से मुफ्त बफर का अनुरोध करता है। निर्माता फिर बफर को पॉप्युलेट करता है और कतार को queueBuffer() कहकर बफर को वापस कर देता है। अगला, उपभोक्ता अधिग्रहण बफर acquireBuffer() साथ बफर का अधिग्रहण करता है और बफर सामग्री का उपयोग करता है। जब उपभोक्ता किया जाता है, तो यह releaseBuffer() को कॉल करके बफर को कतार में releaseBuffer() । एंड्रॉइड ग्राफिक्स पाइपलाइन के माध्यम से बफ़र कैसे चलते हैं, यह सिंक फ्रेमवर्क नियंत्रित करता है।

बफ़रक्यू की कुछ विशेषताएं, जैसे कि अधिकतम संख्या में बफ़र्स जो इसे पकड़ सकते हैं, निर्माता और उपभोक्ता द्वारा संयुक्त रूप से निर्धारित किए जाते हैं। हालाँकि, बफ़रक्यूवे बफ़र्स को आवंटित करता है क्योंकि यह उनकी आवश्यकता है। जब तक विशेषताओं में बदलाव नहीं होता बफ़र्स को बरकरार रखा जाता है; उदाहरण के लिए, यदि कोई निर्माता एक अलग आकार के साथ बफ़र्स का अनुरोध करता है, तो पुराने बफ़र्स को मुक्त कर दिया जाता है और नए बफ़र्स को मांग पर आवंटित किया जाता है।

बफ़र सामग्री को कभी भी बफ़रक्यू द्वारा कॉपी नहीं किया जाता है, क्योंकि यह चारों ओर इतना डेटा अक्षम है। इसके बजाय, बफ़र्स को हमेशा एक हैंडल से पास किया जाता है।

सिस्ट्रेस के साथ ट्रैकिंग बफ़रक्यू

यह समझने के लिए कि ग्राफिक्स बफ़र्स कैसे घूमते हैं, एक छोटी अवधि में डिवाइस गतिविधि को रिकॉर्ड करने वाले उपकरण सिस्ट्रेस का उपयोग करें। सिस्टम-स्तरीय ग्राफिक्स कोड अच्छी तरह से यंत्रीकृत है, जैसा कि प्रासंगिक ऐप फ्रेमवर्क कोड में से अधिकांश है।

सिस्ट्रेस का उपयोग करने के लिए, gfx , view और sched टैग सक्षम करें। बफ़रक्यू ऑब्जेक्ट्स ट्रेस में प्रदर्शित होते हैं। उदाहरण के रूप में, यदि आप ग्रैफिका के प्ले वीडियो (सरफेस व्यू) को ट्रेस करते हैं, तो सरफेस व्यू लेबल वाली पंक्ति आपको बताती है कि किसी भी समय कितने बफ़र्स कतारबद्ध थे।

एप्लिकेशन सक्रिय होने के दौरान मूल्य वृद्धि, जो MediaCodec डिकोडर द्वारा फ़्रेम के प्रतिपादन को ट्रिगर करता है। सर्फेसफ्लिंगर काम करते समय और बफर का उपभोग करते समय मूल्य घटता है। 30 एफपीएस पर वीडियो दिखाते समय, कतार का मान 0 से 1 तक भिन्न होता है क्योंकि ~ 60 एफपीएस डिस्प्ले स्रोत के साथ रख सकते हैं। सर्फेसफ्लिंगर केवल तभी जागता है जब काम किया जाना है, प्रति सेकंड 60 बार नहीं। सिस्टम काम से बचने की कोशिश करता है और अगर स्क्रीन को कुछ भी अपडेट नहीं कर रहा है तो वीएसवाईएनसी को निष्क्रिय कर देता है।

यदि आप ग्राफिका के प्ले वीडियो (TextureView) पर स्विच करते हैं और एक नया ट्रेस पकड़ते हैं , तो आपको एक पंक्ति दिखाई देती है जिसमें com.android.grafika / com.android.grafika.PlayMovieActivity लेबल है। यह मुख्य UI लेयर है, जो एक और बफ़रक्यू है। क्योंकि TextureView एक अलग परत के बजाय UI परत में प्रदान करता है, वीडियो-चालित सभी अपडेट यहां प्रदर्शित होते हैं।

ग्रैलोक

ग्रालॉक एलोकेटर एचएएल hardware/libhardware/include/hardware/gralloc.h उपयोग झंडे के माध्यम से बफर आवंटन करता है। उपयोग के झंडे में इस तरह के गुण शामिल हैं:

  • सॉफ़्टवेयर (CPU) से मेमोरी को कितनी बार एक्सेस किया जाएगा
  • मेमोरी को कितनी बार हार्डवेयर (GPU) से एक्सेस किया जाएगा
  • क्या मेमोरी का उपयोग ओएनजीसीएल ES (GLES) बनावट के रूप में किया जाएगा
  • मेमोरी का उपयोग वीडियो एनकोडर द्वारा किया जाएगा या नहीं

उदाहरण के लिए, यदि कोई निर्माता का बफर प्रारूप RGBA_8888 पिक्सेल निर्दिष्ट RGBA_8888 , और निर्माता इंगित करता है कि बफर को सॉफ़्टवेयर से एक्सेस किया जाएगा (जिसका अर्थ है कि कोई एप्लिकेशन सीपीयू पर पिक्सेल को छूएगा), ग्रालोक RGB ऑर्डर में 4 पिक्सेल प्रति पिक्सेल के साथ एक बफर बनाता है। यदि इसके बजाय, एक निर्माता निर्दिष्ट करता है कि उसका बफर केवल हार्डवेयर से एक्सेस किया जाएगा और GLES बनावट के रूप में, Gralloc GLES ड्राइवर को कुछ भी कर सकता है, जैसे BGRA ऑर्डरिंग, नॉनलाइनर स्विज़ल्ड लेआउट और वैकल्पिक रंग प्रारूप। हार्डवेयर को अपने पसंदीदा प्रारूप का उपयोग करने की अनुमति देने से प्रदर्शन में सुधार हो सकता है।

कुछ मूल्यों को कुछ प्लेटफार्मों पर जोड़ा नहीं जा सकता है। उदाहरण के लिए, वीडियो एनकोडर ध्वज को YUV पिक्सेल की आवश्यकता हो सकती है, इसलिए सॉफ़्टवेयर पहुंच को जोड़ना और RGBA_8888 विफल RGBA_8888 विफल रहता है।

ग्रालोक द्वारा लौटाए गए हैंडल को बाइंडर के माध्यम से प्रक्रियाओं के बीच पारित किया जा सकता है।

संरक्षित बफ़र्स

Gralloc उपयोग ध्वज GRALLOC_USAGE_PROTECTED ग्राफ़िक्स बफर को केवल हार्डवेयर-संरक्षित पथ के माध्यम से प्रदर्शित करने की अनुमति देता है। ये ओवरले प्लेन डीआरएम कंटेंट को प्रदर्शित करने का एकमात्र तरीका है (डीआरएम-संरक्षित बफ़र्स को सर्फेसफ्लिंगर या ओपनजीएल ड्राइवर द्वारा एक्सेस नहीं किया जा सकता है)।

DRM-रक्षित वीडियो केवल एक ओवरले विमान पर प्रस्तुत किया जा सकता है। संरक्षित सामग्री का समर्थन करने वाले वीडियो खिलाड़ियों को सर्फेस व्यू के साथ लागू किया जाना चाहिए। असुरक्षित हार्डवेयर पर चलने वाले सॉफ़्टवेयर बफर को पढ़ या लिख ​​नहीं सकते हैं; हार्डवेयर कम्पोजर ओवरले को हार्डवेयर कम्पोज़र ओवरले पर दिखाई देना चाहिए (अर्थात, हार्डवेयर कंपोज़र ओपनगैस ES कंपोज़िशन में हार्डवेयर कम्पोज़र स्विच करते हैं तो डिस्प्ले से गायब हो जाते हैं)।

संरक्षित सामग्री के विवरण के लिए, DRM देखें।