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

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

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

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

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

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

  • पार्सलेबल कमांड के पक्ष में फास्ट मैसेज क्यू (FMQ) को हटाना।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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