एंड्रॉइड 13 से शुरू होकर, हार्डवेयर कंपोजर (HWC) HAL को AIDL में परिभाषित किया गया है और android.hardware.graphics.composer@2.1
से लेकर android.hardware.graphics.composer@2.4
तक के HIDL संस्करण अप्रचलित हैं।
यह पृष्ठ एचडब्ल्यूसी के लिए एआईडीएल और एचआईडीएल एचएएल के बीच अंतर और एआईडीएल एचएएल के कार्यान्वयन और परीक्षण का वर्णन करता है।
एआईडीएल द्वारा दिए गए फायदों के कारण, विक्रेताओं को एचआईडीएल संस्करण के बजाय एंड्रॉइड 13 शुरू करने वाले एआईडीएल कंपोजर एचएएल को लागू करने के लिए प्रोत्साहित किया जाता है। अधिक जानकारी के लिए कार्यान्वयन अनुभाग देखें.
एआईडीएल और एचआईडीएल एचएएल के बीच अंतर
नया AIDL कंपोजर HAL, जिसका नाम android.hardware.graphics.composer3
है, को IComposer.aidl
में परिभाषित किया गया है। यह निम्नलिखित परिवर्तनों के साथ HIDL HAL android.hardware.graphics.composer@2.4
के समान एक एपीआई प्रदर्शित करता है:
पार्सल करने योग्य आदेशों के पक्ष में फास्ट मैसेज क्यू (एफएमक्यू) को हटाना।
एआईडीएल एचएएल, एचआईडीएल में एफएमक्यू पर क्रमबद्ध कमांड के विपरीत दृढ़ता से टाइप किए गए पार्सल योग्य प्रकारों के आधार पर कमांड इंटरफ़ेस को परिभाषित करता है। यह कमांड के लिए एक स्थिर इंटरफ़ेस और कमांड पेलोड की व्याख्या कैसे की जाती है इसकी अधिक पठनीय परिभाषा प्रदान करता है।
executeCommands
विधि कोIComposerClient.aidl
में परिभाषित किया गया हैCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
जहां प्रत्येक कमांड एक दृढ़ता से टाइप किया गया पार्सल योग्य प्रकार है जिसे
DisplayCommand.aidl
में परिभाषित किया गया है। कमांड प्रतिक्रियाएँCommandResultPayload.aidl
में परिभाषित दृढ़ता से टाइप किए गए पार्सलेबल्स हैं।IComposerClient.getClientTargetSupport
को हटाना क्योंकि इस पद्धति के लिए कोई सक्रिय क्लाइंट नहीं है।जैसा कि
ASurfaceTransaction_setColor
में परिभाषित किया गया है, एंड्रॉइड में ऊपरी ग्राफ़िक्स स्टैक के साथ बेहतर संरेखित करने के लिए बाइट्स के बजाय रंगों का फ़्लोट के रूप में प्रतिनिधित्व।एचडीआर सामग्री को नियंत्रित करने के लिए नए फ़ील्ड जोड़ना।
एआईडीएल एचएएल में, मिश्रित एसडीआर/एचडीआर परत स्टैक एसडीआर परतों की निर्बाध डिमिंग का समर्थन करते हैं जब एचडीआर परत एक साथ स्क्रीन पर होती है।
LayerCommand
मेंbrightness
क्षेत्र सरफेसफ्लिंगर को प्रति-परत चमक निर्दिष्ट करने देता है, ताकि एचडब्ल्यूसी गामा स्पेस के विपरीत, रैखिक प्रकाश स्थान में परत की सामग्री को कम कर दे।ClientTargetPropertyWithBrightness
मेंbrightness
फील्ड एचडब्ल्यूसी को क्लाइंट कंपोजिशन के लिए ब्राइटनेस स्पेस निर्दिष्ट करने औरRenderEngine
निर्देश देने की सुविधा देता है कि क्लाइंट कंपोजिशन में एसडीआर परतों को मंद करना है या नहीं।जब
RenderEngine
सामग्री को मंद करना चाहिए तोdimmingStage
फ़ील्ड HWC को कॉन्फ़िगर करने देती है। यह विक्रेता-परिभाषितColorModes
समायोजित करता है, जो अपने रंग पाइपलाइनों में विक्रेता-परिभाषित कंट्रास्ट संवर्द्धन की अनुमति देने के लिए गामा स्थान को मंद करना पसंद कर सकते हैं।स्क्रीन सजावट के लिए
Composition.aidl
में एक नई रचना प्रकारDISPLAY_DECORATION
को जोड़ना।कुछ उपकरणों में अल्फा मास्क की ड्राइंग को अनुकूलित करने के लिए समर्पित हार्डवेयर होते हैं जो डिस्प्ले पर गोल कोनों और कटआउट को चिकना करते हैं। ऐसे हार्डवेयर वाले उपकरणों को नए
DisplayDecorationSupport.aidl
में परिभाषितDisplayDecorationSupport
संरचना को वापस करने के लिएIComposerClient.getDisplayDecorationSupport
को लागू करना होगा। यह संरचना डिवाइस के लिए आवश्यकPixelFormat
औरAlphaInterpretation
एनम का वर्णन करती है। इस कार्यान्वयन पर, सिस्टम यूआई अल्फा मास्क परत कोDISPLAY_DECORATION
के रूप में चिह्नित करता है, एक नया कंपोजिशन प्रकार जो समर्पित हार्डवेयर का लाभ उठाता है।DisplayCommand.aidl
में एक नयाexpectedPresentTime
फ़ील्ड जोड़ना।expectedPresentTime
फ़ील्ड सरफेसफ्लिंगर को अपेक्षित वर्तमान समय निर्धारित करने देती है जब वर्तमान सामग्री को स्क्रीन पर प्रदर्शित किया जाना चाहिए। इस सुविधा के साथ, सरफेसफ्लिंगर समय से पहले कार्यान्वयन के लिए एक वर्तमान कमांड भेजता है, जिससे यह अधिक कंपोजिशन कार्य को पाइपलाइन करने की अनुमति देता है।बूट डिस्प्ले कॉन्फ़िगरेशन को नियंत्रित करने के लिए नए एपीआई को जोड़ना।
BOOT_DISPLAY_CONFIG
का उपयोग करके, विक्रेता निर्दिष्ट कर सकते हैं कि बूट डिस्प्ले कॉन्फ़िगरेशन समर्थित है।setBootDisplayConfig
,clearBootDisplayConfig
, औरgetPreferredBootDisplayConfig
विधियाँBOOT_DISPLAY_CONFIG
उपयोग इस प्रकार करती हैं:setBootDisplayConfig
का उपयोग करके, फ्रेमवर्क विक्रेताओं को बूट टाइम डिस्प्ले कॉन्फ़िगरेशन के बारे में सूचित करता है। विक्रेताओं को बूट डिस्प्ले कॉन्फ़िगरेशन को कैश करना होगा, और अगले रीबूट पर इस कॉन्फ़िगरेशन को बूट करना होगा। यदि डिवाइस इस कॉन्फ़िगरेशन में बूट करने में असमर्थ है, तो विक्रेता को एक ऐसा कॉन्फ़िगरेशन ढूंढना होगा जो इस कॉन्फ़िगरेशन के रिज़ॉल्यूशन और ताज़ा दर से मेल खाता हो। यदि ऐसी कोई कॉन्फ़िगरेशन मौजूद नहीं है, तो विक्रेता को अपने पसंदीदा डिस्प्ले कॉन्फ़िगरेशन का उपयोग करना चाहिए।clearBootDisplayConfig
का उपयोग करते हुए, फ्रेमवर्क विक्रेताओं को बूट डिस्प्ले कॉन्फ़िगरेशन को साफ़ करने और अगले रीबूट के दौरान उनके पसंदीदा डिस्प्ले कॉन्फ़िगरेशन में बूट करने के लिए सूचित करता है।getPreferredBootDisplayConfig
का उपयोग करते हुए, फ्रेमवर्क विक्रेता के पसंदीदा बूट मोड पर सवाल उठाता है।
जब बूट डिस्प्ले कॉन्फ़िगरेशन समर्थित नहीं होता है, तो ये विधियाँ
UNSUPPORTED
का मान लौटाती हैं।डिस्प्ले निष्क्रिय टाइमर को नियंत्रित करने के लिए नए एपीआई को जोड़ना।
DISPLAY_IDLE_TIMER
का उपयोग करके, विक्रेता निर्दिष्ट कर सकते हैं कि इस डिस्प्ले के लिए विक्रेता द्वारा एक निष्क्रियता टाइमर लागू किया गया है। निष्क्रिय होने पर, यह क्षमता पावर को संरक्षित करने के लिए ताज़ा दर को कम सेटिंग में बदल देती है। प्लेटफ़ॉर्म टाइमर के टाइमआउट को नियंत्रित करने के लिएsetIdleTimerEnabled
उपयोग करता है, और कुछ मामलों में, निष्क्रिय होने पर अवांछित ताज़ा दर स्विच को रोकने के लिए इसे अक्षम करता है।IComposerCallback.onVsyncIdle
कॉलबैक का उपयोग करने से प्लेटफ़ॉर्म को संकेत मिलता है कि डिस्प्ले निष्क्रिय है औरvsync
ताल बदल गया है। प्लेटफ़ॉर्म अपनेvsync
मॉडल को रीसेट करके इस कॉलबैक का जवाब देता है। यह अगले फ्रेम पर एकvsync
पुनः सिंक को बाध्य करता है, और नयाvsync
ताल सीखता है।
कार्यान्वयन
विक्रेताओं को एंड्रॉइड 13 के लिए एआईडीएल एचएएल को लागू करने की आवश्यकता नहीं है। हालांकि, उन्हें नई कार्यक्षमता और एपीआई का उपयोग करने के लिए एचआईडीएल संस्करण के बजाय एआईडीएल कंपोजर एचएएल को लागू करने के लिए प्रोत्साहित किया जाता है।
एआईडीएल एचडब्ल्यूसी एचएएल के लिए एक संदर्भ कार्यान्वयन एंड्रॉइड एमुलेटर में लागू किया गया है।
परिक्षण
अपने कार्यान्वयन का परीक्षण करने के लिए, VtsHalGraphicsComposer3_TargetTest
चलाएँ।