डिवाइस टाइप की सीमा

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 लाइब्रेरी. प्रतिनिधित्व करने के लिए एक से ज़्यादा ऑडियो डिवाइस टाइप के साथ-साथ, audio_devices_t की कलेक्शन या सूची का इस्तेमाल किया जा सकता है.

एक ही तरह का डिवाइस किसी कैटगरी में है या नहीं, यह जानने के लिए हेल्पर फ़ंक्शन का इस्तेमाल करें में audio_is_.*_device /system/media/audio/include/system/audio.h. कई तरह के ऑडियो डिवाइस के केस के लिए, libaudiofoundation में हेल्पर फ़ंक्शन का इस्तेमाल करें. इसके लिए उदाहरण के लिए, इसका इस्तेमाल areAllOfSameDeviceType (DeviceTypeSet, std::function) में AudioContainers.h यह देखने के लिए कि दिए गए सभी ऑडियो डिवाइस टाइप हैं या नहीं एक ही तरह के हैं.

लागू करना

OEM को ऑडियो एचएएल लागू करने के तरीके से ऑडियो डिवाइस टाइप बिट फ़ील्ड को हटाना होगा.

  1. बिट फ़ील्ड पर मौजूद डिवाइसों का सारा स्टोरेज हटाएं.

    एक से ज़्यादा ऑडियो डिवाइस को दिखाने के लिए, audio_devices_t का इस्तेमाल नहीं किया जाना चाहिए प्रकार. इसके बजाय, लिस्ट या वेक्टर का इस्तेमाल करें.

  2. अलग-अलग तरह के डिवाइसों की तुलना करने के लिए, बिट ऑपरेशन का इस्तेमाल बंद करें.

    Android 11 से पहले, अलग-अलग तरह के ऑडियो डिवाइस बिटफ़ील्ड है. ऐसे मामले में, आम तौर पर डिवाइस टाइप के लिए बिट ऑपरेशन का इस्तेमाल किया जाता है तुलनाएं. जिन ऑडियो डिवाइस टाइप को कैलकुलेट किया गया है उन्हें नए तरह के ऑडियो डिवाइस जोड़ने पर, बिट ऑपरेशन की वजह से अनचाहे नतीजे. इसके बजाय, विकल्प के तौर पर हेल्पर फ़ंक्शन का इस्तेमाल करें. अगर कोई एक ऑडियो डिवाइस का टाइप चुनें. इसके बाद, दोनों वैल्यू की तुलना करने के लिए सीधे तौर पर तुलना करें. यह देखने के लिए कि ऑडियो डिवाइस टाइप किसी खास कैटगरी का है, तो इसमें हेल्पर फ़ंक्शन का इस्तेमाल करें /system/media/audio/include/system/audio.h. उदाहरण के लिए, audio_is_output_device(audio_devices_t device).

  3. ऑडियो डिवाइस टाइप के ग्रुप के लिए, पहले से तय की गई वैल्यू का इस्तेमाल बंद करें.

    ऑडियो डिवाइस टाइप के ग्रुप के लिए, पहले से तय की गई कुछ वैल्यू होती हैं, AUDIO_DEVICE_OUT_ALL में system/media/audio/include/system/audio-base-utils.h. ये सभी वैल्यू रिज़र्व किया गया है, लेकिन इसे बंद किया जा सकता है. ऐसा इसलिए, क्योंकि नए वर्शन की गिनती करने पर ये सही नहीं होंगे टाइप किए गए ऑडियो डिवाइस भी जोड़े जाते हैं. यहां ऑडियो डिवाइस टाइप के नए ग्रुप जोड़े गए हैं audio-base-utils.h, जो अलग-अलग तरह के ऑडियो डिवाइस का कलेक्शन होते हैं, जैसे कि AUDIO_DEVICE_OUT_ALL_ARRAY.

  4. create_audio_patch() और release_audio_patch() लागू करना set_parameters के बजाय, रूटिंग का तरीका.

    set_parameters तरीका, बिटफ़ील्ड के तौर पर ऑडियो डिवाइस टाइप का इस्तेमाल करता है, इसलिए सूची में शामिल नए तरह के ऑडियो डिवाइस जोड़ने पर, अनचाहे नतीजे मिल सकते हैं.

    फ़िलहाल, दो तरह के ऑडियो पैच की ज़रूरत होती है:

    • प्लेबैक के लिए डिवाइस के पैच के साथ मिक्स करें
    • रिकॉर्डिंग के लिए, पैच मिक्स करने वाला डिवाइस

    आने वाले अपडेट में, डिवाइस पर पैच पब्लिश करने के लिए, अतिरिक्त पैच की ज़रूरत पड़ सकती है.

    ऑडियो पैच बनाते समय, अगर पैच हैंडल नहीं है बताया गया है, तो ऑडियो एचएएल की ज़रूरत एक ऐसा खास पैच हैंडल जनरेट करना होता है जो ऑडियो पैच की पहचान करता है. या फिर, ऑडियो एचएएल को ऑडियो पैच अपडेट करने के लिए दिए गए ऑडियो पैच हैंडल का इस्तेमाल करना चाहिए.

    अगर लेगसी ऑडियो एचएएल और एओएसपी एचआईएल रैपर का इस्तेमाल किया जा रहा है, तो लेगसी ऑडियो एचएएल को सेट करना चाहिए 3.0 तक का हेड एचएएल वर्शन.

    ऑडियो पैच सुविधा चालू करने के लिए, ऑडियो एचएएल को सेट करना चाहिए 3.0 तक मेजर एचएएल वर्शन या उच्च. Device::supportsAudioPatches() में देखें डिफ़ॉल्ट एचआईडीएल को लागू करना देखें. यह जानकारी कटलफ़िश के लिए ऑडियो एचएएल पर भी मिल सकती है.

पसंद के मुताबिक बनाएं

इस सुविधा को बंद नहीं किया जा सकता या इस प्रोसेस के दौरान, रीफ़ैक्टरिंग की सुविधा को पहले जैसा नहीं किया जा सकता इससे ऑडियो डिवाइस टाइप जोड़ने में मदद मिलती है.

जोड़े गए सभी ऑडियो डिवाइस, एक बिट सेट के साथ डिवाइस टाइप को दिखाने की अनुमति देते हैं, इसलिए, एचएएल को लागू करने की मौजूदा प्रोसेस अब भी काम करती हैं.

अगर नए तरह के ऑडियो डिवाइस जोड़े जाते हैं और OEM उन्हें इस्तेमाल करना चाहते हैं, तो ऑडियो HAL को अपग्रेड करके, HIDL वर्शन 6.0 या इसके बाद वाले वर्शन पर जाना होगा. यह समय है अहम HAL वर्शन को 3.0 में अपग्रेड करना और create_audio_patch और release_audio_patch वाले तरीके का इस्तेमाल करें, क्योंकि स्ट्रीम को रूट करने के लिए set_parameters का इस्तेमाल करने से अनचाहे नतीजे मिल सकते हैं जब ऑडियो डिवाइस के नए टाइप जोड़े गए हैं.

पुष्टि करें

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