हार्डवेयर कंपोज़र एचएएल के लिए एआईडीएल

Android 13 की शुरुआत में, हार्डवेयर कंपोज़र (एचडब्ल्यूसी) एचएएल की जानकारी AIDL और HIDL वर्शन यहां दिए गए हैं: android.hardware.graphics.composer@2.1 से android.hardware.graphics.composer@2.4 के इस्तेमाल पर रोक लगा दी गई है.

इस पेज पर एआईडीएल और HIDL HAL के बीच के अंतर के बारे में बताया गया है एचडब्ल्यूसी और एआईडीएल एचएएल को लागू करना और उसकी जांच करना.

इसकी वजह से एआईडीएल से मिलने वाले फ़ायदे, वेंडर को इन चीज़ों का इस्तेमाल करने के लिए एआईडीएल कंपोज़र एचएएल शुरू हो रहा है HIDL वर्शन के बजाय Android 13. ज़्यादा जानकारी के लिए, लागू करने का तरीका सेक्शन देखें.

एआईडीएल और एचआईडीएल एचएएल में अंतर

नए एआईडीएल कंपोज़र एचएएल का नाम android.hardware.graphics.composer3 है IComposer.aidl में बताया गया है. यह HIDL HAL से मिलते-जुलते एपीआई को दिखाता है android.hardware.graphics.composer@2.4 में ये बदलाव किए गए हैं:

  • तेज़ी से मैसेज की सूची (एफ़एमक्यू) को हटाया गया के पक्ष में हो सकता है.

    AIDL HAL, कमांड इंटरफ़ेस को 'बहुत ज़्यादा टाइप किए गए' के आधार पर तय करता है HIDL में एफ़एमक्यू पर क्रम से लगाए गए निर्देशों के उलट, पार्स किए जा सकने वाले टाइप. यह इससे कमांड के लिए एक स्थायी इंटरफ़ेस मिलता है. साथ ही, कमांड पेलोड के बारे में बताया गया है.

    executeCommands तरीका की जानकारी IComposerClient.aidl में दी गई है जैसे

    CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
    

    जहां प्रत्येक कमांड सशक्त रूप से टाइप किया गया पार्स किया जा सकने वाला प्रकार है DisplayCommand.aidl. आदेश के जवाब ज़बरदस्ती टाइप किए गए पार्सल किए जा सकते हैं CommandResultPayload.aidl.

  • IComposerClient.getClientTargetSupport को हटाएं, क्योंकि इस तरीके का इस्तेमाल करने वाला कोई क्लाइंट नहीं है.

  • कलर को बाइट के बजाय फ़्लोट के तौर पर पेश करना, ताकि जैसा कि ASurfaceTransaction_setColor में बताया गया है, Android में ऊपरी ग्राफ़िक्स स्टैक की जानकारी दी गई है.

  • एचडीआर कॉन्टेंट को कंट्रोल करने के लिए, नए फ़ील्ड जोड़े गए हैं.

    AIDL HAL में, मिक्स SDR/HDR लेयर स्टैक, स्क्रीन पर एचडीआर लेयर होने पर एसडीआर लेयर.

    LayerCommand में brightness फ़ील्ड SurfaceFlinger को हर लेयर की चमक तय करने की सुविधा देता है, ताकि HW गामा स्पेस के उलट, लीनियर लाइट स्पेस में लेयर की सामग्री.

    ClientTargetPropertyWithBrightness में brightness फ़ील्ड इससे एचडब्ल्यूसी को क्लाइंट कंपोज़िशन के लिए ब्राइटनेस स्पेस तय करने और RenderEngine को निर्देश दें क्लाइंट कंपोज़िशन में एसडीआर लेयर की रोशनी को कम करना है या नहीं.

    dimmingStage फ़ील्ड की मदद से एचडब्ल्यूसी को कॉन्फ़िगर किया जा सकता है कि RenderEngine कॉन्टेंट को कब डिम कर सकता है. यह वेंडर के तय किए गए ColorModes को शामिल करता है, जो गामा में रोशनी को कम कर सकता है ताकि वेंडर की कलर पाइपलाइन में कंट्रास्ट को बेहतर बनाने की अनुमति मिल सके.

  • एक नई कंपोज़िशन टाइप DISPLAY_DECORATION को जोड़ा गया Composition.aidl स्क्रीन की सजावट के लिए.

    कुछ डिवाइसों में ऐसा हार्डवेयर होता है जो ऐल्फ़ा मास्क को ऑप्टिमाइज़ करने के लिए काम करता है. इससे स्क्रीन के गोल किनारे और कटआउट बन जाते हैं. ऐसे हार्डवेयर वाले डिवाइसों को यह ज़रूर बताना चाहिए कि IComposerClient.getDisplayDecorationSupport लागू करें DisplayDecorationSupport संरचना वापस लौटाने के लिए DisplayDecorationSupport.aidl. इस स्ट्रक्चर में, PixelFormat के बारे में बताया गया है और AlphaInterpretation डिवाइस के लिए ज़रूरी enum. इसे लागू करने पर, सिस्टम यूज़र इंटरफ़ेस (यूआई), DISPLAY_DECORATION के तौर पर ऐल्फ़ा मास्क लेयर, एक नया कंपोज़िशन टाइप, जो खास हार्डवेयर का इस्तेमाल करता है.

  • एक नया expectedPresentTime जोड़ा गया DisplayCommand.aidl के लिए फ़ील्ड.

    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 के लिए AIDL HAL लागू करने की ज़रूरत नहीं है. हालांकि, उन्हें एआईडीएल लागू करने के लिए प्रोत्साहित किया जाता है नए फ़ंक्शन और एपीआई का इस्तेमाल करने के लिए, HIDL वर्शन के बजाय कंपोज़र HAL.

पहचान फ़ाइल लागू करना लागू किया गया है.

टेस्ट करना

आपने जो लागू किया है उसकी जांच करने के लिए, VtsHalGraphicsComposer3_TargetTest चलाएं.