परतें और प्रदर्शित करता है

परतें और डिस्प्ले दो आदिम हैं जो डिस्प्ले हार्डवेयर के साथ संरचना कार्य और इंटरैक्शन का प्रतिनिधित्व करते हैं।

परतें

परत रचना की सबसे महत्वपूर्ण इकाई है। एक परत एक सतह और SurfaceControl के एक उदाहरण का संयोजन है। प्रत्येक परत में गुणों का एक सेट होता है जो परिभाषित करता है कि यह अन्य परतों के साथ कैसे इंटरैक्ट करता है। परत गुण नीचे दी गई तालिका में वर्णित हैं।

संपत्ति विवरण
अवस्था का परिभाषित करता है कि परत उसके डिस्प्ले पर कहां दिखाई देती है। इसमें एक परत के किनारों की स्थिति और अन्य परतों के सापेक्ष उसके Z क्रम (चाहे वह अन्य परतों के सामने या पीछे होना चाहिए) जैसी जानकारी शामिल है।
सामग्री परिभाषित करता है कि परत पर प्रदर्शित सामग्री को स्थितीय गुणों द्वारा परिभाषित सीमाओं के भीतर कैसे प्रस्तुत किया जाना चाहिए। इसमें क्रॉप (परत की सीमाओं को भरने के लिए सामग्री के एक हिस्से का विस्तार करने के लिए) और ट्रांसफ़ॉर्म (घूमने या फ़्लिप की गई सामग्री दिखाने के लिए) जैसी जानकारी शामिल है।
संघटन परिभाषित करता है कि परत को अन्य परतों के साथ कैसे संयोजित किया जाना चाहिए। इसमें सम्मिश्रण मोड और अल्फा कंपोजिटिंग के लिए एक परत-व्यापी अल्फा मान जैसी जानकारी शामिल है।
अनुकूलन वह जानकारी प्रदान करता है जो परत को सही ढंग से मिश्रित करने के लिए कड़ाई से आवश्यक नहीं है, लेकिन इसका उपयोग हार्डवेयर कंपोजर (एचडब्ल्यूसी) डिवाइस द्वारा यह अनुकूलित करने के लिए किया जा सकता है कि यह संरचना कैसे निष्पादित करता है। इसमें परत के दृश्यमान क्षेत्र और पिछले फ्रेम के बाद से परत के किस हिस्से को अद्यतन किया गया है जैसी जानकारी शामिल है।

प्रदर्शित करता है

प्रदर्शन रचना की एक अन्य महत्वपूर्ण इकाई है। एक सिस्टम में कई डिस्प्ले हो सकते हैं और सामान्य सिस्टम संचालन के दौरान डिस्प्ले को जोड़ा या हटाया जा सकता है। एचडब्ल्यूसी के अनुरोध पर या फ्रेमवर्क के अनुरोध पर डिस्प्ले जोड़े/हटाए जाते हैं। जब कोई बाहरी डिस्प्ले डिवाइस से कनेक्ट या डिस्कनेक्ट होता है तो HWC डिवाइस डिस्प्ले को जोड़ने या हटाने का अनुरोध करता है, जिसे हॉटप्लगिंग कहा जाता है। ग्राहक वर्चुअल डिस्प्ले का अनुरोध करते हैं, जिनकी सामग्री भौतिक डिस्प्ले के बजाय ऑफ-स्क्रीन बफर में प्रस्तुत की जाती है।

आभासी प्रदर्शन

सरफेसफ्लिंगर एक आंतरिक डिस्प्ले (फोन या टैबलेट में निर्मित), बाहरी डिस्प्ले (जैसे एचडीएमआई के माध्यम से जुड़ा टेलीविजन), और एक या अधिक वर्चुअल डिस्प्ले का समर्थन करता है जो सिस्टम के भीतर मिश्रित आउटपुट उपलब्ध कराता है। वर्चुअल डिस्प्ले का उपयोग स्क्रीन को रिकॉर्ड करने या स्क्रीन को नेटवर्क पर भेजने के लिए किया जा सकता है। वर्चुअल डिस्प्ले के लिए जेनरेट किए गए फ़्रेम को बफ़रक्यू पर लिखा जाता है।

वर्चुअल डिस्प्ले मुख्य डिस्प्ले (लेयर स्टैक) के समान परतों का सेट साझा कर सकते हैं या उनका अपना सेट हो सकता है। वर्चुअल डिस्प्ले के लिए कोई VSYNC नहीं है, इसलिए आंतरिक डिस्प्ले के लिए VSYNC सभी डिस्प्ले के लिए कंपोज़िशन को ट्रिगर करता है।

एचडब्ल्यूसी कार्यान्वयन पर जो उनका समर्थन करते हैं, वर्चुअल डिस्प्ले को ओपनजीएल ईएस (जीएलईएस), एचडब्ल्यूसी, या जीएलईएस और एचडब्ल्यूसी दोनों के साथ संयोजित किया जा सकता है। गैर-सहायक कार्यान्वयन पर, वर्चुअल डिस्प्ले हमेशा GLES का उपयोग करके संयोजित किए जाते हैं।

केस स्टडी: स्क्रीनरिकॉर्ड

screenrecord कमांड उपयोगकर्ता को स्क्रीन पर दिखाई देने वाली हर चीज़ को डिस्क पर .mp4 फ़ाइल के रूप में रिकॉर्ड करने की अनुमति देता है। इसे लागू करने के लिए, सिस्टम सरफेसफ्लिंगर से मिश्रित फ़्रेम प्राप्त करता है, उन्हें वीडियो एनकोडर पर लिखता है, और फिर एन्कोडेड वीडियो डेटा को एक फ़ाइल में लिखता है। वीडियो कोडेक्स को एक अलग प्रक्रिया ( mediaserver ) द्वारा प्रबंधित किया जाता है, इसलिए बड़े ग्राफ़िक्स बफ़र्स को सिस्टम के चारों ओर घूमना पड़ता है। इसे और अधिक चुनौतीपूर्ण बनाने के लिए, लक्ष्य पूर्ण रिज़ॉल्यूशन पर 60 एफपीएस वीडियो रिकॉर्ड करना है। इस कार्य को कुशलतापूर्वक करने की कुंजी बफ़रक्यू है।

MediaCodec क्लास किसी ऐप को बफ़र्स में या सतह के माध्यम से कच्चे बाइट्स के रूप में डेटा प्रदान करने की अनुमति देता है। जब screenrecord एक वीडियो एनकोडर तक पहुंच का अनुरोध करता है, तो mediaserver प्रक्रिया एक बफ़रक्यू बनाती है, खुद को उपभोक्ता पक्ष से जोड़ती है, फिर निर्माता पक्ष को एक सतह के रूप में screenrecord में वापस भेजती है।

screenrecord उपयोगिता फिर सरफेसफ्लिंगर को एक वर्चुअल डिस्प्ले बनाने के लिए कहती है जो मुख्य डिस्प्ले को प्रतिबिंबित करता है (अर्थात, इसमें सभी समान परतें हैं), और इसे mediaserver प्रक्रिया से आए आउटपुट को सतह पर भेजने के लिए निर्देशित करता है। इस मामले में, सरफेसफ्लिंगर उपभोक्ता के बजाय बफ़र्स का निर्माता है।

कॉन्फ़िगरेशन पूर्ण होने के बाद, एन्कोडेड डेटा दिखाई देने पर screenrecord ट्रिगर हो जाता है। जैसे ही ऐप्स आकर्षित होते हैं, उनके बफ़र्स SurfaceFlinger तक जाते हैं, जो उन्हें एक एकल बफ़र में संयोजित करता है जो mediaserver प्रक्रिया में सीधे वीडियो एनकोडर पर भेजा जाता है। screenrecord प्रक्रिया द्वारा पूर्ण फ़्रेम कभी नहीं देखे जाते हैं। आंतरिक रूप से, mediaserver प्रक्रिया में बफ़र्स को चारों ओर ले जाने का अपना तरीका होता है जो ओवरहेड को कम करते हुए, हैंडल द्वारा डेटा भी पास करता है।

केस स्टडी: सेकेंडरी डिस्प्ले का अनुकरण करें

विंडोमैनेजर SurfaceFlinger को एक दृश्य परत बनाने के लिए कह सकता है जिसके लिए SurfaceFlinger बफ़रक्यू उपभोक्ता के रूप में कार्य करता है। SurfaceFlinger को वर्चुअल डिस्प्ले बनाने के लिए कहना भी संभव है, जिसके लिए SurfaceFlinger बफ़रक्यू निर्माता के रूप में कार्य करता है।

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