Android 13 और उससे पहले के वर्शन में, ऑडियो एचएएल इंटरफ़ेस को
एचआईडीएल का इस्तेमाल करके एचआईडीएल HAL फ़ाइलों (जिनका
एक्सटेंशन .hal होता है) में और
कॉन्फ़िगरेशन फ़ाइलों के लिए
XSD स्कीमा का इस्तेमाल करके तय किया जाता है. इसे यहां दिखाया गया है.
पहली इमेज. ऑडियो एचएएल इंटरफ़ेस.
एचआईडीएल के लिए, ऑडियो एचएएल डायरेक्ट्री के स्ट्रक्चर के बारे में जानने के लिए, ऑडियो एचएएल की README फ़ाइल देखें.कॉन्फ़िगरेशन फ़ाइलें
ऑडियो नीति और ऑडियो इफ़ेक्ट की एक्सएमएल कॉन्फ़िगरेशन फ़ाइलों को, ऑडियो एचआईडीएल एचएएल इंटरफ़ेस का हिस्सा माना जाता है. ये फ़ाइलें, अपने स्कीमा के मुताबिक होनी चाहिए. साथ ही, VTS टेस्ट से यह पुष्टि की जाती है कि ये स्कीमा के मुताबिक हैं या नहीं.
ऑडियो एचआईडीएल एचएएल को लागू करने के लिए, आपको ऑडियो नीति की एक
कॉन्फ़िगरेशन फ़ाइल
बनानी होगी. इसमें ऑडियो टोपोलॉजी के बारे में बताया गया हो. फ़्रेमवर्क के इस्तेमाल के लिए, audio_policy_configuration.xml फ़ाइल में, ऑडियो एचएएल की क्षमताओं के बारे में बताना ज़रूरी है.
ऑडियो एचआईडीएल एचएएल एपीआई
इस सेक्शन में, एचआईडीएल के लिए कोर, इफ़ेक्ट, और कॉमन एचएएल एपीआई के बारे में बताया गया है.
कोर एचएएल
एचआईडीएल का इस्तेमाल करने वाले कोर एचएएल के कुछ मुख्य इंटरफ़ेस यहां दिए गए हैं:
IDeviceFactory.halएपीआई में एंट्री पॉइंट है.IDevice.halऔरIPrimaryDevice.halमेंsetMasterVolumeयाopenInputStreamजैसे तरीके शामिल होते हैं.- स्ट्रीम एकतरफ़ा होती हैं. इनका इस्तेमाल, AudioFlinger,
IStream.hal,IStreamOut.hal, औरIStreamIn.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/)
का डिफ़ॉल्ट तौर पर लागू किया गया वर्शन, लेगसी शेयर की गई लाइब्रेरी का इस्तेमाल करके, प्री-ट्रबल एचएएल को लागू करने का रैपर है
.
ऑडियो एचएएल के नए वर्शन को लागू करते समय, डिफ़ॉल्ट तौर पर लागू किए गए वर्शन को रेफ़रंस के तौर पर भी इस्तेमाल किया जा सकता है. ये वर्शन, कर्नल ड्राइवर के साथ सीधे इंटरैक्ट करते हैं.
इफ़ेक्ट एचएएल
नीचे दी गई टेबल में, एचआईडीएल का इस्तेमाल करने वाले काम के इफ़ेक्ट एचएएल कॉम्पोनेंट की जगह की जानकारी दी गई है:
| इफ़ेक्ट एचएएल कॉम्पोनेंट | जगह |
|---|---|
| एपीआई का नया वर्शन | /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/ और ऑडियो इफ़ेक्ट सेक्शन देखें.
कॉमन एचएएल
एचआईडीएल का इस्तेमाल करने वाले कॉमन एचएएल एपीआई में ये शामिल हैं:
- कोर और इफ़ेक्ट एपीआई के बीच शेयर की गई परिभाषाएं (
/hardware/interfaces/audio/common/6.0/types.hal). - यूटिलिटी (
/hardware/interfaces/audio/common/all-versions), जिनका इस्तेमाल, एचआईडीएल एपीआई के लिए, लागू करने, क्लाइंट, और टेस्ट के लिए कोडिंग करने में मदद के लिए किया जाता है.
ऑडियो एचएएल V7 में किए गए अपडेट
Android 12 में, ऑडियो एचएएल के वर्शन 7 में अहम बदलाव किए गए हैं. इनके बारे में इस सेक्शन में बताया गया है. ऑडियो एचएएल V7 ये काम करता है:
- फ़्रेमवर्क और एचएएल के इस्तेमाल किए गए डेटा मॉडल को एक साथ लाता है.
- ऑडियो नीति की कॉन्फ़िगरेशन के लिए इस्तेमाल किए गए एचआईडीएल डेटा टाइप (enum) और एक्सएमएल स्कीमा के बीच डुप्लीकेट होने की समस्या को कम करता है.
खास तौर पर, ऑडियो एचएएल V7 में इन क्षेत्रों में बदलाव किए गए हैं:
इन बदलावों के बारे में, इनसे जुड़े सेक्शन में ज़्यादा जानकारी दी गई है.
इन्यूमरेटेड टाइप
ऑडियो एचएएल V7 से, ऑडियो नीति की कॉन्फ़िगरेशन फ़ाइल में इस्तेमाल किए गए इन्यूमरेटेड टाइप सिर्फ़ XSD स्कीमा में तय किए जाते हैं. इन्हें एचआईडीएल में तय नहीं किया जाता.
ऑडियो एचएएल V6 में, types.hal में enum टाइप (जैसे, AudioFormat) की वैल्यू, ऑडियो नीति की कॉन्फ़िगरेशन फ़ाइल के XSD स्कीमा में भी तय की जाती हैं. इससे डुप्लीकेट होने की समस्या होती है. V7 में इस समस्या से बचने के लिए, enum टाइप को string में बदल दिया जाता है. साथ ही, XSD स्कीमा में सभी संभावित इन्यूमरेटेड वैल्यू की सूची दी जाती है.
दूसरी इमेज में, V7 में AudioFormat enum टाइप में किए गए कुछ बदलावों की तुलना दिखाई गई है:
दूसरी इमेज. AudioFormat enum में किए गए कुछ बदलावों की तुलना.
जिन enum टाइप को string में बदला गया है उनके लिए, यह सूची देखें:
AudioChannelMaskAudioContentTypeAudioDevice: वेंडर एक्सटेंड किया जा सकता हैAudioFormat: वेंडर एक्सटेंड किया जा सकता हैAudioGainModeAudioSourceAudioStreamTypeAudioUsage
स्ट्रिंग enum वैल्यू पास करना
एचएएल इंटरफ़ेस की सीमा के पार, इन्यूमरेटेड वैल्यू के तौर पर जानकारी ट्रांसफ़र करने के लिए, स्ट्रिंग वैल्यू का इस्तेमाल किया जाता है. फ़्रेमवर्क और एचएएल रैपर, दोनों ही कारोबारी नियम को लागू करने के लिए, इंटिजर enum वैल्यू का इस्तेमाल करते हैं. साथ ही, तीसरी इमेज में दिखाए गए कन्वर्ज़न के तरीके का इस्तेमाल करते हैं:
तीसरी इमेज. स्ट्रिंग enum वैल्यू पास करना.
उदाहरण के लिए, फ़्रेमवर्क से वेंडर को ऑडियो फ़ॉर्मैट टाइप की वैल्यू पास करने के लिए:
libaudiohalमें,AudioFormatकी enum वैल्यू को स्ट्रिंग वैल्यू में बदला जाता है और एचएएल को पास किया जाता है.- एचएएल की ओर, डिफ़ॉल्ट रैपर स्ट्रिंग को enum वैल्यू में बदलता है. इसके बाद, इसे लेगसी एचएएल को पास किया जाता है.
एक्सएमएल स्कीमा में किए गए बदलाव
एक्सएमएल स्कीमा की परिभाषा (XSD) में enum वैल्यू की पूरी सूची होने से, VTS की मदद से ऑडियो नीति की कॉन्फ़िगरेशन वाली एक्सएमएल फ़ाइल को बेहतर तरीके से वैलिडेट किया जा सकता है. हमने XSD के मुताबिक, एचएएल 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 और उससे पहले के वर्शन में, <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 | sessionAudioPort/PortConfigमें, यूनियन की जगह इस्तेमाल किया जाता है
वेंडर टैग
डिवाइस टाइप और फ़ॉर्मैट के अलावा, वेंडर ऑडियो ट्रैक के मेटाडेटा के लिए, कस्टम टैग जोड़ सकते हैं.
प्लेबैक और रिकॉर्डिंग ट्रैक के मेटाडेटा के लिए, वेंडर अपने टैग पास कर सकते हैं. इनका इस्तेमाल, ऐप्लिकेशन से एचएएल तक, ऑडियो I/O स्ट्रीम में एट्रिब्यूट जोड़ने के लिए किया जाता है.
प्लेबैक ट्रैक के मेटाडेटा के लिए, वेंडर टैग इस तरह जोड़े जाते हैं, जैसा कि यहां दिए गए उदाहरण में दिखाया गया है:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
RecordTrackMetadata स्ट्रक्चर को भी इसी तरह लागू किया जाता है. इसके लिए, रिकॉर्डिंग ट्रैक के मेटाडेटा के लिए खास टैग जोड़े जाते हैं.
वेंडर एक्सटेंशन नेमस्पेसिंग
एचएएल V7 से, वेंडर एक्सटेंशन के लिए, {vendor} प्रीफ़िक्स की ज़रूरत होती है. V6 में इसकी ज़रूरत नहीं होती. वैलिड {vendor} प्रीफ़िक्स के लिए, इसमें अक्षरों और अंकों को मिलाकर तीन या इससे ज़्यादा वर्ण होने चाहिए.
V7 में, इस फ़ॉर्मैट का इस्तेमाल करें:
VX_{vendor}_{letters/numbers}
यहां, V7 के कुछ मान्य वेंडर एक्सटेंशन के उदाहरण दिए गए हैं:
VX_GOOGLE_VRVX_QCI_AMBIENT_MIC
वर्शन की जानकारी
नीचे दी गई टेबल में, Android के हर वर्शन के लिए, एचएएल के वर्शन नंबर की जानकारी दी गई है:
| Android वर्शन | एचआईडीएल एचएएल वर्शन |
|---|---|
| Android 13 | 7.1 |
| Android 12 | 7.0 |
| Android 11 | 6.0 |
| Android 10 | 5.0 |
| Android 9 | 4.0 |
| Android 8 | 2.0 |