HIDL ऑडियो एचएएल

Android 13 और उससे पहले के वर्शन में ऑडियो HAL इंटरफ़ेस HIDL HAL फ़ाइलों में HIDL का इस्तेमाल करके तय किया जाता है (जिसमें एक्सटेंशन .hal) और इसके लिए XSD स्कीमा कॉन्फ़िगरेशन फ़ाइलों को नीचे दिखाया गया है.

ऑडियो_हेल

पहला डायग्राम. ऑडियो HAL इंटरफ़ेस.

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

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

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

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

इस सेक्शन में, HIDL के लिए कोर, इफ़ेक्ट, और कॉमन एचएएल एपीआई के बारे में बताया गया है.

कोर एचएएल

HIDL का इस्तेमाल करने वाले कोर HAL के कुछ मुख्य इंटरफ़ेस यहां दिए गए हैं:

  • IDeviceFactory.hal, एपीआई का एंट्री पॉइंट है.
  • IDevice.hal और IPrimaryDevice.hal में ये तरीके हैं setMasterVolume या openInputStream.
  • स्ट्रीम एकतरफ़ा होती हैं. इसका इस्तेमाल AudioFlinger, लोगों को भेजने या पाने के लिए करता है HAL से IStream.hal, IStreamOut.hal, और तक का ऑडियो IStreamIn.hal.

नीचे दी गई टेबल में, कोर HAL HIDL के काम के कॉम्पोनेंट की जगह की जानकारी दी गई है:

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

Core HAL API (/hardware/interfaces/audio/core/all-versions/default/) को डिफ़ॉल्ट तौर पर लागू करना इसका इस्तेमाल करके, प्री-ट्रेबल एचएएल को लागू करने के लिए एक रैपर बनाया गया है शेयर की गई लेगसी लाइब्रेरी. डिफ़ॉल्ट रूप से लागू होने वाले तरीके को रेफ़रंस के तौर पर तब भी माना जा सकता है, जब कर्नेल ड्राइवर के साथ इंटरैक्ट करने वाले ऑडियो एचएएल के नए वर्शन लागू किए जा रहे हैं सकता है.

इफ़ेक्ट एचएएल

नीचे दी गई टेबल में, इफ़ेक्ट एचएएल कॉम्पोनेंट की जगह की जानकारी दी गई है. ये कॉम्पोनेंट काम के हैं एचआईडीएल:

इफ़ेक्ट 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/ पर इफ़ेक्ट HAL API और ऑडियो इफ़ेक्ट सेक्शन में जाएं.

कॉमन एचएएल

HIDL का इस्तेमाल करने वाले Common HAL API में ये चीज़ें शामिल होती हैं:

  • शेयर की गई परिभाषाएं (/hardware/interfaces/audio/common/6.0/types.hal) कोर और इफ़ेक्ट एपीआई का इस्तेमाल करना है.
  • मदद करने के लिए इस्तेमाल की जाने वाली सुविधाएं (/hardware/interfaces/audio/common/all-versions) लागू करने, क्लाइंट, और टेस्ट के लिए, HIDL API के साथ कोडिंग करना.

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

ऑडियो एचएएल के वर्शन 7 में अहम बदलाव किए गए हैं Android 12, जैसा कि इस सेक्शन में बताया गया है. ऑडियो HAL V7 ये काम करता है:

  • फ़्रेमवर्क और एचएएल में इस्तेमाल किए गए डेटा मॉडल को एक साथ करता है.
  • एचआईडीएल डेटा टाइप (ईनम) और एक्सएमएल स्कीमा के बीच डुप्लीकेट डेटा बनाए रखने में मदद मिलती है इसका इस्तेमाल ऑडियो नीति को कॉन्फ़िगर करने के लिए किया जाता है.

खास तौर पर, ऑडियो HAL V7 में इन चीज़ों में बदलाव किए गए हैं:

इन बदलावों के बारे में, उनसे जुड़े सेक्शन में ज़्यादा जानकारी दी गई है.

इन्यूमरेशन

ऑडियो HAL V7 से शुरू होते हुए, ऑडियो नीति कॉन्फ़िगरेशन में इस्तेमाल किए जाने वाले अलग-अलग टाइप फ़ाइल सिर्फ़ Xएसडी स्कीमा में तय की जाती है, HIDL में नहीं.

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

दूसरी इमेज में, V7 के AudioFormat ईनम टाइप में हुए कुछ बदलावों की तुलना की गई है:

ऑडियो फ़ॉर्मैट में बदलाव

दूसरा डायग्राम. AudioFormat enum में किए गए कुछ बदलावों की तुलना.

नए ईनम टाइप के बारे में जानने के लिए, यह सूची देखें string:

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

स्ट्रिंग enum की वैल्यू पास करें

स्ट्रिंग वैल्यू का इस्तेमाल, जानकारी को इन्यूमरेशन वैल्यू के तौर पर ट्रांसफ़र करने के लिए किया जाता है HAL इंटरफ़ेस की सीमा से बाहर हैं. फ़्रेमवर्क और एचएएल रैपर, कारोबारी लॉजिक को लागू करने के लिए पूर्णांक ईनम वैल्यू का इस्तेमाल करता है और तीसरी इमेज में दिखाया गया कन्वर्ज़न का तरीका:

ऑडियो पास-पास-वैल्यू

तीसरी इमेज. पासिंग स्ट्रिंग enum मान.

उदाहरण के लिए, ऑडियो फ़ॉर्मैट टाइप की वैल्यू को फ़्रेमवर्क से वेंडर:

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

एक्सएमएल स्कीमा में हुए बदलाव

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

V7 में, एक स्टैंडर्ड (स्पेस) वर्ण का इस्तेमाल करके , के बजाय, एट्रिब्यूट (जैसे कि सैंपलिंग रेट, चैनल मास्क, और फ़्लैग) वर्शन 6 और इससे पहले के वर्शन में, (कॉमा) और | (वर्टिकल बार) सिंबल इस्तेमाल किए गए हैं. जैसा कि नीचे दिए गए उदाहरण में, स्पेस का इस्तेमाल channelMasks:

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

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

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

डेटा टाइप

डुप्लीकेट कॉपी को कम करने के लिए, हमने V7 में कुछ डेटा स्ट्रक्चर को फिर से तय किया परिभाषाएं. बार-बार एक से ज़्यादा डेटा आइटम को, फिर से इस्तेमाल किए जा सकने वाले एक ग्रुप में रखा जाता है स्ट्रक्चर. ये डेटा स्ट्रक्चर, सेफ़ यूनियन जैसी नई एचआईडीएल सुविधाओं का इस्तेमाल करते हैं.

उदाहरण के लिए, वर्शन 6 और इससे पहले के वर्शन में, <format, sampling rate, channel mask> का इस्तेमाल अक्सर HIDL इंटरफ़ेस और टाइप में किया जाता है. इस रिडंडंसी को हटाने के लिए, वर्शन 7, 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 स्ट्रक्चर को इसी तरह लागू किया जाता है: रिकॉर्डिंग ट्रैक मेटाडेटा के लिए खास टैग जोड़ना.

वेंडर एक्सटेंशन की नेमस्पेस

HAL V7 से शुरू होने वाले वेंडर एक्सटेंशन के लिए, {vendor} प्रीफ़िक्स जोड़ना ज़रूरी है की ज़रूरत नहीं है. {vendor} प्रीफ़िक्स मान्य हो, इसके लिए यह ज़रूरी है अक्षर और अंक मिलाकर तीन या उससे ज़्यादा वर्ण होते हैं.

V7 में इस फ़ॉर्मैट का इस्तेमाल करें:

VX_{vendor}_{letters/numbers}

मान्य V7 वेंडर एक्सटेंशन के कुछ उदाहरण यहां दिए गए हैं:

  • VX_GOOGLE_VR
  • VX_QCI_AMBIENT_MIC

वर्शन की जानकारी

नीचे दी गई टेबल में, Android की हर रिलीज़ के लिए एचएएल वर्शन नंबर दिया गया है:

Android वर्शन HIDL HAL वर्शन
Android 13 7.1
Android 12 7.0
Android 11 6.0
Android 10 5.0
Android 9 4.0
Android 8 2.0