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