Android 13 से शुरू होकर, हार्डवेयर कम्पोज़र (HWC) HAL को AIDL में परिभाषित किया गया है और HIDL संस्करण android.hardware.graphics.composer@2.4
से लेकर android.hardware.graphics.composer@2.1
तक को बहिष्कृत कर दिया गया है।
यह पृष्ठ एचडब्ल्यूसी के लिए एआईडीएल और एचआईडीएल एचएएल और एआईडीएल एचएएल के कार्यान्वयन और परीक्षण के बीच अंतर का वर्णन करता है।
एआईडीएल द्वारा पेश किए गए लाभों के कारण, विक्रेताओं को एआईडीएल कंपोजर एचएएल को एचआईडीएल संस्करण के बजाय एंड्रॉइड 13 से शुरू करने के लिए प्रोत्साहित किया जाता है। अधिक जानकारी के लिए कार्यान्वयन अनुभाग देखें।
एआईडीएल और एचआईडीएल एचएएल के बीच अंतर
नया AIDL कंपोजर HAL, जिसका नाम android.hardware.graphics.composer3
है, को IComposer.aidl
में परिभाषित किया गया है। यह निम्नलिखित परिवर्तनों के साथ HIDL HAL android.hardware.graphics.composer@2.4
के समान एपीआई को उजागर करता है:
पार्सलेबल कमांड के पक्ष में फास्ट मैसेज क्यू (FMQ) को हटाना।
एआईडीएल एचएएल एचआईडीएल में एफएमक्यू पर क्रमबद्ध कमांड के विपरीत दृढ़ता से टाइप किए गए पार्सल योग्य प्रकारों के आधार पर कमांड इंटरफेस को परिभाषित करता है। यह कमांड के लिए एक स्थिर इंटरफ़ेस प्रदान करता है और कमांड पेलोड की व्याख्या कैसे की जाती है, इसकी अधिक पठनीय परिभाषा।
ExecuteCommands विधि को
executeCommands
में परिभाषित किया गया हैIComposerClient.aidl
CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
जहां प्रत्येक आदेश
DisplayCommand.aidl
में परिभाषित दृढ़ता से टाइप किया गया पार्सल योग्य प्रकार है। कमांड प्रतिक्रियाएँ CommandResultPayload.aidl में परिभाषितCommandResultPayload.aidl
दृढ़ता से टाइप किए गए हैं।IComposerClient.getClientTargetSupport
को हटाना क्योंकि इस पद्धति के लिए कोई सक्रिय क्लाइंट नहीं हैं।एंड्रॉइड में ऊपरी ग्राफिक्स स्टैक के साथ बेहतर संरेखित करने के लिए बाइट्स के बजाय फ्लोट्स के रूप में रंगों का प्रतिनिधित्व जैसा कि
ASurfaceTransaction_setColor
में परिभाषित किया गया है।एचडीआर सामग्री को नियंत्रित करने के लिए नए क्षेत्रों को जोड़ना।
एआईडीएल एचएएल में, मिश्रित एसडीआर/एचडीआर परत स्टैक एसडीआर परतों के निर्बाध डिमिंग का समर्थन करते हैं जब एक एचडीआर परत एक साथ स्क्रीन पर होती है।
LayerCommand में
brightness
फील्डLayerCommand
को एक प्रति-लेयर ब्राइटनेस निर्दिष्ट करने देता है, ताकि HWC गामा स्पेस के विपरीत, लीनियर लाइट स्पेस में लेयर की सामग्री को कम कर दे।ClientTargetPropertyWithBrightness में
brightness
फील्डClientTargetPropertyWithBrightness
को क्लाइंट कंपोजिशन के लिए ब्राइटनेस स्पेस निर्दिष्ट करने देता है औरRenderEngine
को निर्देश देता है कि क्लाइंट कंपोजिशन में SDR लेयर्स को मंद किया जाए या नहीं।dimmingStage
फ़ील्ड HWC को कॉन्फ़िगर करने देता है जबRenderEngine
को सामग्री मंद होनी चाहिए। यह विक्रेता-परिभाषितColorModes
को समायोजित करता है, जो कि उनके रंग पाइपलाइनों में विक्रेता-परिभाषित कंट्रास्ट एन्हांसमेंट की अनुमति देने के लिए गामा स्थान में मंद होना पसंद कर सकता है।स्क्रीन की सजावट के लिए
Composition.aidl
मेंDISPLAY_DECORATION
के नए कंपोज़िशन प्रकार को जोड़ना।कुछ उपकरणों में समर्पित हार्डवेयर होता है जो अल्फा मास्क को चित्रित करने के लिए अनुकूलित करता है जो गोल कोनों और डिस्प्ले पर कटआउट को सुचारू करता है। ऐसे हार्डवेयर वाले उपकरणों को
IComposerClient.getDisplayDecorationSupport
को नएDisplayDecorationSupport.aidl
में परिभाषितDisplayDecorationSupport
संरचना को वापस करने के लिए लागू करना चाहिए। यह संरचना डिवाइस द्वारा आवश्यकPixelFormat
औरAlphaInterpretation
enums का वर्णन करती है। इस कार्यान्वयन पर, सिस्टम UI अल्फा मास्क परत कोDISPLAY_DECORATION
के रूप में चिह्नित करता है, एक नया संयोजन प्रकार जो समर्पित हार्डवेयर का लाभ उठाता है।DisplayCommand.aidl में एक नया
expectedPresentTime
DisplayCommand.aidl
फ़ील्ड जोड़ना।expectedPresentTime
PresentTime फ़ील्ड SurfaceFlinger को अपेक्षित वर्तमान समय को उस समय पर सेट करने देता है जब वर्तमान सामग्री को स्क्रीन पर प्रदर्शित किया जाना चाहिए। इस सुविधा के साथ, सर्फेसफ्लिंगर समय से पहले कार्यान्वयन के लिए एक वर्तमान कमांड भेजता है, जिससे यह अधिक रचना कार्य को पाइपलाइन करने की अनुमति देता है।बूट प्रदर्शन विन्यास को नियंत्रित करने के लिए नए एपीआई को जोड़ना।
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
चलाएँ।