Android ऑडियो में, audio_devices_t
का इस्तेमाल ऑडियो डिवाइस के टाइप को दिखाने के लिए किया जाता है. ऑडियो सोर्स कोड में इसका इस्तेमाल, बिट फ़ील्ड के तौर पर बड़े पैमाने पर किया जाता है. इससे, एक या एक से ज़्यादा डिवाइसों को फ़िल्टर किया जा सकता है या चुना जा सकता है. Android 11 से पहले, ऑडियो इनपुट/आउटपुट डिवाइसों के टाइप की संख्या 30 तक सीमित थी. साथ ही, नए ऑडियो डिवाइस टाइप जोड़ने के लिए कोई स्लॉट नहीं था. हमने
अनुमति देने के लिए, ऑडियो डिवाइस टाइप की संख्या की सीमा हटा दी गई है
ऑडियो डिवाइस के नए टाइप जोड़े जाएंगे.
ऑडियो डिवाइस टाइप की संख्या की सीमा हटाने के लिए, अब ऑडियो डिवाइस टाइप को बिट मास्क के बजाय एनुमेरेट की गई वैल्यू.
ऑडियो डिवाइस के सभी मौजूदा टाइप को पहले जैसा ही रखा गया है. इनपुट या आउटपुट डिवाइसों में अंतर करने के लिए, अब भी AUDIO_DEVICE_BIT_IN
का इस्तेमाल किया जाता है. ऑडियो डिवाइस के नए टाइप जोड़ते समय, वे
मौजूदा वैल्यू के बीच के अंतर में, कैलकुलेट की गई वैल्यू.
OEM को audio_devices_t
का इस्तेमाल बिट मास्क के तौर पर नहीं करना चाहिए. ऐसा करने पर, सूची में शामिल किए गए नए ऑडियो डिवाइस टाइप जोड़ने पर, अनचाहे नतीजे मिल सकते हैं.
उदाहरण और सोर्स
Android 11 से पहले, आम तौर पर ऑडियो डिवाइस का दो बार इस्तेमाल होता था बिट मास्क के रूप में टाइप करता है.
- एक से ज़्यादा ऑडियो डिवाइसों को दिखाने के लिए,
audio_devices_t
वैल्यू का इस्तेमाल करना. - जांच की जा रही है कि
audio_devices_t
वैल्यू में, अलग-अलग तरह के ऑडियो डिवाइस हैं या नहीं किसी खास कैटगरी से.
कई ऑडियो डिवाइस टाइप को दिखाने के लिए, DeviceTypeSet
नाम की क्लास को
/libaudiofoundation/include/media/AudioContainers.h
का इस्तेमाल किया गया है, जो audio_devices_t
का std::set
कंटेनर है. क्लास की जानकारी, वेंडर के पास उपलब्ध
libaudiofoundation
लाइब्रेरी में दी जाती है. C कोड में कई तरह के ऑडियो डिवाइस दिखाने के लिए, audio_devices_t
के कलेक्शन या सूची का इस्तेमाल किया जा सकता है.
यह देखने के लिए कि किसी डिवाइस टाइप की कैटगरी क्या है,
/system/media/audio/include/system/audio.h
में हेल्पर फ़ंक्शन
audio_is_.*_device
का इस्तेमाल करें.
कई तरह के ऑडियो डिवाइस के केस के लिए, libaudiofoundation
में हेल्पर फ़ंक्शन का इस्तेमाल करें. उदाहरण के लिए, AudioContainers.h
में areAllOfSameDeviceType (DeviceTypeSet, std::function
का इस्तेमाल करके देखें कि दिए गए सभी ऑडियो डिवाइस एक ही तरह के हैं या नहीं.
लागू करना
OEM को ऑडियो एचएएल लागू करने से, ऑडियो डिवाइस टाइप के बिट फ़ील्ड का रेप्रज़ेंटेशन हटाना होगा.
- बिट फ़ील्ड पर मौजूद डिवाइसों का सारा स्टोरेज हटाएं.
एक से ज़्यादा ऑडियो डिवाइस को दिखाने के लिए,
audio_devices_t
का इस्तेमाल नहीं किया जाना चाहिए प्रकार. इसके बजाय, लिस्ट या वेक्टर का इस्तेमाल करें. - डिवाइस टाइप की तुलना करने के लिए, बिट ऑपरेशन का इस्तेमाल बंद करें.
Android 11 से पहले, अलग-अलग तरह के ऑडियो डिवाइस बिटफ़ील्ड है. ऐसे मामले में, आम तौर पर डिवाइस टाइप के लिए बिट ऑपरेशन का इस्तेमाल किया जाता है तुलनाएं. जब नए और अलग-अलग तरह के ऑडियो डिवाइस जोड़े जाते हैं, तो बिट ऑपरेशन की वजह से अनचाहे नतीजे मिल सकते हैं. इसके बजाय, विकल्प के तौर पर हेल्पर फ़ंक्शन का इस्तेमाल करें. अगर कोई एक ऑडियो डिवाइस का टाइप चुनें. इसके बाद, दोनों वैल्यू की तुलना करने के लिए सीधे तौर पर तुलना करें. यह देखने के लिए कि ऑडियो डिवाइस का टाइप किसी खास कैटगरी में आता है या नहीं,
/system/media/audio/include/system/audio.h
में हेल्पर फ़ंक्शन का इस्तेमाल करें. उदाहरण के लिए,audio_is_output_device(audio_devices_t device)
. - ऑडियो डिवाइस के टाइप के ग्रुप के लिए, पहले से तय की गई वैल्यू का इस्तेमाल बंद करें.
ऑडियो डिवाइस टाइप के ग्रुप के लिए, पहले से तय की गई कुछ वैल्यू होती हैं,
AUDIO_DEVICE_OUT_ALL
मेंsystem/media/audio/include/system/audio-base-utils.h
. ये सभी वैल्यू रिज़र्व हैं, लेकिन हो सकता है कि इन्हें बंद कर दिया जाए. ऐसा इसलिए, क्योंकि सूची में शामिल किए गए नए ऑडियो डिवाइस टाइप जोड़े जाने पर, ये वैल्यू सही नहीं होंगी. यहां ऑडियो डिवाइस टाइप के नए ग्रुप जोड़े गए हैंaudio-base-utils.h
, जो अलग-अलग तरह के ऑडियो डिवाइस की कैटगरी होते हैं, जैसे किAUDIO_DEVICE_OUT_ALL_ARRAY
. set_parameters
के बजाय, रूटिंग के लिएcreate_audio_patch()
औरrelease_audio_patch()
के तरीकों को लागू करें.set_parameters
तरीका, बिटफ़ील्ड के तौर पर ऑडियो डिवाइस टाइप का इस्तेमाल करता है, इसलिए सूची में शामिल नए तरह के ऑडियो डिवाइस जोड़ने पर, अनचाहे नतीजे मिल सकते हैं.फ़िलहाल, दो तरह के ऑडियो पैच ज़रूरी हैं:
- प्लेबैक के लिए डिवाइस के पैच के साथ मिक्स करें
- रिकॉर्डिंग के लिए, पैच मिक्स करने वाला डिवाइस
आने वाले अपडेट में, डिवाइस से डिवाइस के बीच फ़ाइलें शेयर करने के लिए, अतिरिक्त पैच की ज़रूरत पड़ सकती है.
ऑडियो पैच बनाते समय, अगर पैच हैंडल नहीं दिया गया है, तो ऑडियो एचएएल को एक यूनीक पैच हैंडल जनरेट करना होगा. इससे ऑडियो पैच की पहचान की जा सकेगी. या फिर, ऑडियो एचएएल को ऑडियो पैच अपडेट करने के लिए दिए गए ऑडियो पैच हैंडल का इस्तेमाल करना चाहिए.
अगर लेगसी ऑडियो एचएएल और एओएसपी एचआईएल रैपर का इस्तेमाल किया जा रहा है, तो लेगसी ऑडियो एचएएल को सेट करना चाहिए 3.0 तक का हेड एचएएल वर्शन.
ऑडियो पैच सुविधा चालू करने के लिए, ऑडियो एचएएल को सेट करना चाहिए 3.0 तक मेजर एचएएल वर्शन या उच्च. ज़्यादा जानकारी के लिए, डिफ़ॉल्ट HIDL लागू करने में
Device::supportsAudioPatches()
देखें. यह जानकारी, Cuttlefish के लिए ऑडियो एचएएल पर भी मिल सकती है.
पसंद के मुताबिक बनाएं
इस सुविधा को बंद नहीं किया जा सकता या इस प्रोसेस के दौरान, रीफ़ैक्टरिंग की सुविधा को पहले जैसा नहीं किया जा सकता इससे ऑडियो डिवाइस टाइप जोड़ने में मदद मिलती है.
जोड़े गए सभी ऑडियो डिवाइस टाइप, किसी डिवाइस टाइप को एक बिट सेट करके दिखाने की अनुमति देते हैं, इसलिए मौजूदा एचएएल लागू करना अब भी काम करता है.
अगर नए ऑडियो डिवाइस टाइप जोड़े जाते हैं और OEM उनका इस्तेमाल करना चाहते हैं, तो उन्हें अपने ऑडियो एचएएल को अपग्रेड करना होगा और HIDL के 6.0 या इसके बाद के वर्शन पर जाना होगा. यह समय है
अहम HAL वर्शन को 3.0 में अपग्रेड करना और
create_audio_patch
और release_audio_patch
वाले तरीके का इस्तेमाल करें, क्योंकि
स्ट्रीम को रूट करने के लिए set_parameters
का इस्तेमाल करने से अनचाहे नतीजे मिल सकते हैं जब
ऑडियो डिवाइस के नए टाइप जोड़े गए हैं.
पुष्टि करें
OEM के लिए, एचएएल लागू करने के तरीके को अपडेट करना ज़रूरी है. ऑडियो एचएएल के लिए वीटीएस का इस्तेमाल करके, यह पुष्टि की जा सकती है कि लागू करने का तरीका सही है या नहीं. सभी नतीजों में मौजूद जांचों को वीटीएस फ़ाइलें.