एचआईडीएल ऑडियो एचएएल

एंड्रॉइड 13 और उससे पहले के संस्करण में, ऑडियो एचएएल इंटरफ़ेस को एचआईडीएल एचएएल फाइलों (एक्सटेंशन .hal ) में एचआईडीएल और कॉन्फ़िगरेशन फ़ाइलों के लिए एक्सएसडी स्कीमा का उपयोग करके परिभाषित किया गया है, जो निम्नानुसार दिखाया गया है।

audio_hal

चित्र 1. ऑडियो एचएएल इंटरफ़ेस।

कॉन्फ़िगरेशन फ़ाइलें

ऑडियो नीति और ऑडियो प्रभाव XML कॉन्फ़िगरेशन फ़ाइलों को ऑडियो HIDL HAL इंटरफ़ेस का हिस्सा माना जाता है। इन फ़ाइलों को उनके स्कीमा के अनुरूप होना चाहिए, और अनुरूपता को वीटीएस परीक्षणों द्वारा सत्यापित किया जाता है।

ऑडियो HIDL HAL को लागू करने के भाग के रूप में, आपको एक ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल बनानी होगी जो ऑडियो टोपोलॉजी का वर्णन करती हो। फ़्रेमवर्क के उपयोग के लिए ऑडियो HAL क्षमताओं को audio_policy_configuration.xml फ़ाइल में घोषित किया जाना चाहिए।

ऑडियो एचआईडीएल एचएएल एपीआई

यह अनुभाग एचआईडीएल के लिए कोर, इफेक्ट्स और सामान्य एचएएल एपीआई का वर्णन करता है।

कोर एचएएल

एचआईडीएल का उपयोग करते हुए कोर एचएएल के कुछ प्रमुख इंटरफेस इस प्रकार हैं:

  • IDeviceFactory.hal एपीआई में प्रवेश बिंदु है।
  • IDevice.hal और IPrimaryDevice.hal में setMasterVolume या openInputStream जैसी विधियाँ शामिल हैं।
  • स्ट्रीम यूनिडायरेक्शनल हैं और ऑडियोफ्लिंगर द्वारा IStream.hal , IStreamOut.hal , और IStreamIn.hal के माध्यम से HAL को ऑडियो भेजने या प्राप्त करने के लिए उपयोग किया जाता है।

निम्न तालिका उपयोगी कोर एचएएल एचआईडीएल घटकों के स्थान को सूचीबद्ध करती है:

कोर एचएएल घटक जगह
एपीआई का नवीनतम संस्करण /hardware/interfaces/audio/6.0
नवीनतम कोर एचएएल एपीआई के लिए विशिष्ट प्रकार /hardware/interfaces/audio/6.0/types.hal
ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल XSD स्कीमा /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd

कोर एचएएल एपीआई ( /hardware/interfaces/audio/core/all-versions/default/ ) का डिफ़ॉल्ट कार्यान्वयन विरासत साझा पुस्तकालयों का उपयोग करके प्री-ट्रेबल एचएएल कार्यान्वयन के चारों ओर एक आवरण है। ऑडियो एचएएल के नए संस्करणों को लागू करते समय डिफ़ॉल्ट कार्यान्वयन को एक संदर्भ के रूप में भी माना जा सकता है जो सीधे कर्नेल ड्राइवरों के साथ इंटरैक्ट करता है।

प्रभाव एचएएल

निम्न तालिका HIDL का उपयोग करके उपयोगी प्रभाव HAL घटकों के स्थान को सूचीबद्ध करती है:

प्रभाव एचएएल घटक जगह
एपीआई का नवीनतम संस्करण /hardware/interfaces/audio/effect/6.0/
प्रभाव कॉन्फ़िगरेशन फ़ाइल XSD स्कीमा /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd

अधिक जानकारी के लिए, /hardware/interfaces/audio/effect/all-versions/default/ और ऑडियो प्रभाव अनुभाग पर प्रभाव एचएएल एपीआई का एक नमूना कार्यान्वयन देखें।

सामान्य एचएएल

HIDL का उपयोग करने वाले सामान्य HAL API में निम्नलिखित शामिल हैं:

  • कोर और इफेक्ट एपीआई द्वारा साझा की गई परिभाषाएँ ( /hardware/interfaces/audio/common/6.0/types.hal )।
  • यूटिलिटीज़ ( /hardware/interfaces/audio/common/all-versions ) का उपयोग कार्यान्वयन, क्लाइंट और परीक्षणों के लिए एचआईडीएल एपीआई के खिलाफ कोडिंग में मदद के लिए किया जाता है।

ऑडियो HAL V7 में अपडेट

जैसा कि इस अनुभाग में बताया गया है, एंड्रॉइड 12 में ऑडियो एचएएल के संस्करण 7 में महत्वपूर्ण बदलाव हैं। ऑडियो HAL V7 निम्नलिखित कार्य करता है:

  • फ्रेमवर्क और एचएएल द्वारा उपयोग किए गए डेटा मॉडल को एकीकृत करता है।
  • ऑडियो नीति कॉन्फ़िगरेशन के लिए उपयोग किए जाने वाले HIDL डेटा प्रकार (एनम) और XML स्कीमा के बीच दोहराव को कम करता है।

विशेष रूप से, ऑडियो HAL V7 में निम्नलिखित क्षेत्रों में परिवर्तन किए गए हैं:

इन परिवर्तनों पर उनके संबंधित अनुभागों में अधिक विस्तार से चर्चा की गई है।

गणना

ऑडियो HAL V7 से प्रारंभ करके, ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल में उपयोग किए गए प्रगणित प्रकार केवल XSD स्कीमा में परिभाषित किए गए हैं, HIDL में नहीं।

ऑडियो एचएएल वी6 में, types.hal में एनम प्रकार (जैसे AudioFormat ) के मूल्यों को ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल एक्सएसडी स्कीमा में भी परिभाषित किया गया है, जिससे डुप्लिकेशन बनता है। V7 में इससे बचने के लिए, एनम प्रकारों को string में बदल दिया जाता है और सभी संभावित गणना मानों को इसके बजाय XSD स्कीमा में सूचीबद्ध किया जाता है।

चित्र 2 V7 में AudioFormat एनम प्रकार के कुछ परिवर्तनों की तुलना करता है:

audioformat-change

चित्र 2. ऑडियोफ़ॉर्मेट एनम में कुछ परिवर्तनों की तुलना।

उन एनम प्रकारों के लिए निम्नलिखित सूची देखें जिन्हें string में परिवर्तित किया गया है:

  • AudioChannelMask
  • AudioContentType
  • AudioDevice : विक्रेता एक्स्टेंसिबल
  • AudioFormat : विक्रेता एक्स्टेंसिबल
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

स्ट्रिंग एनम मान पास करें

स्ट्रिंग मानों का उपयोग एचएएल इंटरफ़ेस सीमा के पार गणना मानों के रूप में जानकारी स्थानांतरित करने के लिए किया जाता है। फ्रेमवर्क और एचएएल रैपर दोनों व्यावसायिक तर्क को लागू करने के लिए पूर्णांक एनम मानों का उपयोग करते हैं और चित्र 3 में दर्शाए गए रूपांतरण दृष्टिकोण को नियोजित करते हैं:

audio-passing-values

चित्र 3. स्ट्रिंग एनम मान पास करना।

उदाहरण के तौर पर, फ़्रेमवर्क से विक्रेता तक ऑडियो प्रारूप प्रकार का मान पास करने के लिए:

  1. AudioFormat का एनम मान libaudiohal में एक स्ट्रिंग मान में परिवर्तित हो जाता है और HAL को भेज दिया जाता है।
  2. एचएएल की ओर, डिफ़ॉल्ट रैपर स्ट्रिंग को एक एनम मान में परिवर्तित करता है, जिसे लीगेसी एचएएल को भेज दिया जाता है।

XML स्कीमा बदलता है

XML स्कीमा परिभाषा (XSD) में एनम मानों की पूरी सूची होने से VTS द्वारा बेहतर ऑडियो नीति कॉन्फ़िगरेशन XML फ़ाइल सत्यापन की अनुमति मिलती है। हमने XSD का अनुपालन करने के लिए HAL V7 के साथ उपयोग की जाने वाली ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल में परिवर्तन किए हैं।

V7 में, (अल्पविराम) और | के बजाय विशेषताओं (जैसे नमूना दर, चैनल मास्क और झंडे) में मूल्य सूचियों को सीमित करने के लिए एक मानक (स्पेस) वर्ण का उपयोग किया जाता , । (ऊर्ध्वाधर पट्टी) प्रतीकों का उपयोग V6 और नीचे में किया गया है। जैसा कि निम्नलिखित उदाहरण में देखा गया है, channelMasks के लिए मानों की सूची को सीमित करने के लिए एक स्थान का उपयोग किया जाता है:

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

प्रतीक परिवर्तन करने के लिए, update_audio_policy_config.sh नामक स्वचालित रूपांतरण स्क्रिप्ट का उपयोग करें। Pixel 5 (Redfin) डिवाइस के लिए V6 ऑडियो नीति कॉन्फ़िगरेशन फ़ाइल को V7 संस्करण में कनवर्ट करने के लिए निम्न आदेश देखें:

hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0

डेटा के प्रकार

हमने डुप्लिकेट परिभाषाओं को कम करने के लिए V7 में कुछ डेटा संरचनाओं को फिर से परिभाषित किया है। डेटा आइटमों के बार-बार टुपल्स को पुन: प्रयोज्य संरचनाओं में एक साथ समूहीकृत किया जाता है। ये डेटा संरचनाएं सुरक्षित यूनियनों जैसी नवीनतम एचआईडीएल सुविधाओं का उपयोग करती हैं।

उदाहरण के लिए, V6 और नीचे में, HIDL इंटरफेस और प्रकारों में अक्सर <format, sampling rate, channel mask> का ट्रिपल उपयोग किया जाता है। इस अतिरेक को हटाने के लिए, V7 में, AudioConfigBase डेटा प्रकार और अन्य डेटा प्रकारों को निम्नानुसार परिभाषित किया गया है:

  • AudioConfigBase := <format, sampling rate, channel mask>

  • AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>

    AudioConfig , AudioOffloadInfo , AudioPortConfig द्वारा उपयोग किया जाता है

  • AudioProfile := <format, {sampling rates}, {channel masks}>

    AudioPort/PortConfig में ढीले संग्रहों को प्रतिस्थापित करता है

  • AudioPortExtendedInfo := device | mix | session

    AudioPort/PortConfig में यूनियनों को प्रतिस्थापित करता है

विक्रेता टैग

डिवाइस प्रकार और प्रारूपों के अलावा, विक्रेता ऑडियो ट्रैक मेटाडेटा के लिए कस्टम टैग जोड़ सकते हैं।

ट्रैक मेटाडेटा को प्लेबैक और रिकॉर्ड करने के लिए, विक्रेता अपने स्वयं के टैग पास कर सकते हैं, जिनका उपयोग ऐप्स से एचएएल तक ऑडियो I/O स्ट्रीम में विशेषताओं को जोड़ने के लिए किया जाता है।

प्लेबैक ट्रैक मेटाडेटा के लिए विक्रेता टैग जोड़े गए हैं जैसा कि निम्नलिखित उदाहरण में देखा गया है:

struct PlaybackTrackMetadata {
…
    /** Tags from AudioTrack audio attributes */
    vec<AudioTag> tags;
};

रिकॉर्डिंग RecordTrackMetadata संरचना को समान तरीके से कार्यान्वित किया जाता है।

विक्रेता एक्सटेंशन नेमस्पेसिंग

एचएएल वी7 से शुरू होकर, विक्रेता एक्सटेंशन के लिए एक अतिरिक्त {vendor} उपसर्ग की आवश्यकता होती है जो वी6 में आवश्यक नहीं है। {vendor} उपसर्ग के वैध होने के लिए, इसमें तीन या अधिक अल्फ़ान्यूमेरिक वर्ण होने चाहिए।

V7 में निम्नलिखित प्रारूप का उपयोग करें:

VX_{ vendor }_{ letters/numbers }

वैध V7 विक्रेता एक्सटेंशन के कुछ उदाहरण निम्नलिखित हैं:

  • VX_ GOOGLE _VR
  • VX_ QCI _AMBIENT_MIC

संस्करण जानकारी

निम्न तालिका प्रत्येक Android रिलीज़ के लिए HAL संस्करण संख्या सूचीबद्ध करती है:

एंड्रॉइड संस्करण एचआईडीएल एचएएल संस्करण
एंड्रॉइड 13 7.1
एंड्रॉइड 12 7.0
एंड्रॉइड 11 6.0
एंड्रॉइड 10 5.0
एंड्रॉइड 9 4.0
एंड्रॉइड 8 2.0