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