हार्डवेयर संगीतकार HAL . के लिए AIDL

एंड्रॉइड 13 से शुरू होकर, हार्डवेयर कंपोजर (HWC) HAL को AIDL में परिभाषित किया गया है और android.hardware.graphics.composer@2.1 से लेकर android.hardware.graphics.composer@2.4 तक के HIDL संस्करण अप्रचलित हैं।

यह पृष्ठ एचडब्ल्यूसी के लिए एआईडीएल और एचआईडीएल एचएएल के बीच अंतर और एआईडीएल एचएएल के कार्यान्वयन और परीक्षण का वर्णन करता है।

एआईडीएल द्वारा दिए गए फायदों के कारण, विक्रेताओं को एचआईडीएल संस्करण के बजाय एंड्रॉइड 13 शुरू करने वाले एआईडीएल कंपोजर एचएएल को लागू करने के लिए प्रोत्साहित किया जाता है। अधिक जानकारी के लिए कार्यान्वयन अनुभाग देखें.

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

नया AIDL कंपोजर HAL, जिसका नाम android.hardware.graphics.composer3 है, को IComposer.aidl में परिभाषित किया गया है। यह निम्नलिखित परिवर्तनों के साथ HIDL HAL android.hardware.graphics.composer@2.4 के समान एक एपीआई प्रदर्शित करता है:

  • पार्सल करने योग्य आदेशों के पक्ष में फास्ट मैसेज क्यू (एफएमक्यू) को हटाना।

    एआईडीएल एचएएल, एचआईडीएल में एफएमक्यू पर क्रमबद्ध कमांड के विपरीत दृढ़ता से टाइप किए गए पार्सल योग्य प्रकारों के आधार पर कमांड इंटरफ़ेस को परिभाषित करता है। यह कमांड के लिए एक स्थिर इंटरफ़ेस और कमांड पेलोड की व्याख्या कैसे की जाती है इसकी अधिक पठनीय परिभाषा प्रदान करता है।

    executeCommands विधि को IComposerClient.aidl में परिभाषित किया गया है

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

    जहां प्रत्येक कमांड एक दृढ़ता से टाइप किया गया पार्सल योग्य प्रकार है जिसे DisplayCommand.aidl में परिभाषित किया गया है। कमांड प्रतिक्रियाएँ CommandResultPayload.aidl में परिभाषित दृढ़ता से टाइप किए गए पार्सलेबल्स हैं।

  • IComposerClient.getClientTargetSupport को हटाना क्योंकि इस पद्धति के लिए कोई सक्रिय क्लाइंट नहीं है।

  • जैसा कि ASurfaceTransaction_setColor में परिभाषित किया गया है, एंड्रॉइड में ऊपरी ग्राफ़िक्स स्टैक के साथ बेहतर संरेखित करने के लिए बाइट्स के बजाय रंगों का फ़्लोट के रूप में प्रतिनिधित्व।

  • एचडीआर सामग्री को नियंत्रित करने के लिए नए फ़ील्ड जोड़ना।

    एआईडीएल एचएएल में, मिश्रित एसडीआर/एचडीआर परत स्टैक एसडीआर परतों की निर्बाध डिमिंग का समर्थन करते हैं जब एचडीआर परत एक साथ स्क्रीन पर होती है।

    LayerCommand में brightness क्षेत्र सरफेसफ्लिंगर को प्रति-परत चमक निर्दिष्ट करने देता है, ताकि एचडब्ल्यूसी गामा स्पेस के विपरीत, रैखिक प्रकाश स्थान में परत की सामग्री को कम कर दे।

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

    जब RenderEngine सामग्री को मंद करना चाहिए तो dimmingStage फ़ील्ड HWC को कॉन्फ़िगर करने देती है। यह विक्रेता-परिभाषित ColorModes समायोजित करता है, जो अपने रंग पाइपलाइनों में विक्रेता-परिभाषित कंट्रास्ट संवर्द्धन की अनुमति देने के लिए गामा स्थान को मंद करना पसंद कर सकते हैं।

  • स्क्रीन सजावट के लिए Composition.aidl में एक नई रचना प्रकार DISPLAY_DECORATION को जोड़ना।

    कुछ उपकरणों में अल्फा मास्क की ड्राइंग को अनुकूलित करने के लिए समर्पित हार्डवेयर होते हैं जो डिस्प्ले पर गोल कोनों और कटआउट को चिकना करते हैं। ऐसे हार्डवेयर वाले उपकरणों को नए DisplayDecorationSupport.aidl में परिभाषित DisplayDecorationSupport संरचना को वापस करने के लिए IComposerClient.getDisplayDecorationSupport को लागू करना होगा। यह संरचना डिवाइस के लिए आवश्यक PixelFormat और AlphaInterpretation एनम का वर्णन करती है। इस कार्यान्वयन पर, सिस्टम यूआई अल्फा मास्क परत को DISPLAY_DECORATION के रूप में चिह्नित करता है, एक नया कंपोजिशन प्रकार जो समर्पित हार्डवेयर का लाभ उठाता है।

  • DisplayCommand.aidl में एक नया expectedPresentTime फ़ील्ड जोड़ना।

    expectedPresentTime फ़ील्ड सरफेसफ्लिंगर को अपेक्षित वर्तमान समय निर्धारित करने देती है जब वर्तमान सामग्री को स्क्रीन पर प्रदर्शित किया जाना चाहिए। इस सुविधा के साथ, सरफेसफ्लिंगर समय से पहले कार्यान्वयन के लिए एक वर्तमान कमांड भेजता है, जिससे यह अधिक कंपोजिशन कार्य को पाइपलाइन करने की अनुमति देता है।

  • बूट डिस्प्ले कॉन्फ़िगरेशन को नियंत्रित करने के लिए नए एपीआई को जोड़ना।

    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 चलाएँ।