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