Android 13 से, हार्डवेयर कंपोज़र (एचडब्ल्यूसी) एचएएल को एआईडीएल में तय किया गया है. साथ ही, 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
के जैसा ही एपीआई उपलब्ध कराता है. हालांकि, इसमें ये बदलाव किए गए हैं:
पार्सल किए जा सकने वाले निर्देशों के लिए, फ़ास्ट मैसेज क्यू (एफ़एमक्यू) को हटा दिया गया है.
AIDL एचएएल, कमांड इंटरफ़ेस को पार्सल किए जा सकने वाले टाइप के आधार पर तय करता है. वहीं, एचआईडीएल में एफएमक्यू पर सीरियल किए गए कमांड के आधार पर तय किया जाता है. इससे कमांड के लिए एक स्थिर इंटरफ़ेस मिलता है. साथ ही, यह भी पता चलता है कि कमांड के पेलोड को कैसे समझा जाता है.
executeCommands
तरीके कोIComposerClient.aidl
में इस तरह से तय किया गया हैCommandResultPayload[] executeCommands(in DisplayCommand[] commands);
यहां हर कमांड,
DisplayCommand.aidl
में तय किया गया एक पार्सल करने लायक टाइप है. कमांड के जवाब,CommandResultPayload.aidl
में तय किए गए पार्सल किए जा सकने वाले टाइप होते हैं.IComposerClient.getClientTargetSupport
को हटाया गया, क्योंकि इस तरीके के लिए कोई चालू क्लाइंट नहीं है.Android में,
ASurfaceTransaction_setColor
में बताए गए ग्राफ़िक स्टैक के साथ बेहतर तरीके से अलाइन करने के लिए, कलर को बाइट के बजाय फ़्लोट के तौर पर दिखाया जाता है.एचडीआर कॉन्टेंट को कंट्रोल करने के लिए, नए फ़ील्ड जोड़े गए हैं.
AIDL HAL में, एसडीआर/एचडीआर लेयर स्टैक को मिलाकर बनाया गया कॉन्टेंट, स्क्रीन पर एचडीआर लेयर के साथ-साथ एसडीआर लेयर को भी आसानी से डिम करने की सुविधा देता है.
LayerCommand
में मौजूदbrightness
फ़ील्ड की मदद से, SurfaceFlinger हर लेयर के लिए चमक तय कर सकता है. इससे HWC, लेयर के कॉन्टेंट की चमक को गामा स्पेस के बजाय लीनियर लाइट स्पेस में कम कर देता है.ClientTargetPropertyWithBrightness
में मौजूदbrightness
फ़ील्ड की मदद से, एचडब्ल्यूसी यह तय कर सकता है कि क्लाइंट कंपोज़िशन के लिए ब्राइटनेस स्पेस क्या होगा. साथ ही,RenderEngine
को यह निर्देश दे सकता है कि क्लाइंट कंपोज़िशन में एसडीआर लेयर को कम किया जाए या नहीं.dimmingStage
फ़ील्ड की मदद से, एचडब्ल्यूसी यह कॉन्फ़िगर कर सकता है किRenderEngine
को कॉन्टेंट कब धुंधला करना चाहिए. इससे वेंडर के तय किए गएColorModes
को अडजस्ट किया जा सकता है. वेंडर के तय किए गए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 कंपोज़र HAL को लागू करने का सुझाव दिया जाता है.
Android Emulator में, एआईडीएल एचडब्ल्यूसी एचएएल के लिए रेफ़रंस के तौर पर लागू करने की सुविधा लागू की गई है.
टेस्ट करना
लागू किए गए बदलावों की जांच करने के लिए, VtsHalGraphicsComposer3_TargetTest
चलाएं.