एंड्रॉइड 4.1 रिलीज़ ने कम विलंबता ऑडियो आउटपुट पथ के लिए आंतरिक ढांचे में बदलाव पेश किए। सार्वजनिक क्लाइंट एपीआई या एचएएल एपीआई में न्यूनतम परिवर्तन थे। यह दस्तावेज़ प्रारंभिक डिज़ाइन का वर्णन करता है, जो समय के साथ विकसित होता रहा है। इस डिज़ाइन की अच्छी समझ होने से डिवाइस OEM और SoC विक्रेताओं को अपने विशेष उपकरणों और चिपसेट पर डिज़ाइन को सही ढंग से लागू करने में मदद मिलेगी। यह आलेख एप्लिकेशन डेवलपर्स के लिए अभिप्रेत नहीं है।
ट्रैक निर्माण
क्लाइंट वैकल्पिक रूप से AudioTrack C++ कंस्ट्रक्टर या AudioTrack::set()
के audio_output_flags_t
पैरामीटर में बिट AUDIO_OUTPUT_FLAG_FAST
सेट कर सकता है। वर्तमान में ऐसा करने वाले एकमात्र ग्राहक हैं:
- Android देशी ऑडियो OpenSL ES या AAudio पर आधारित है
- android.media.SoundPool
- android.media.ToneGenerator
ऑडियोट्रैक C++ कार्यान्वयन AUDIO_OUTPUT_FLAG_FAST
अनुरोध की समीक्षा करता है और वैकल्पिक रूप से क्लाइंट स्तर पर अनुरोध को अस्वीकार कर सकता है। यदि यह अनुरोध को पारित करने का निर्णय लेता है, तो यह IAudioTrack
फ़ैक्टरी विधि IAudioFlinger::createTrack()
के track_flags_t
पैरामीटर के TRACK_FAST
बिट का उपयोग करके ऐसा करता है।
AudioFlinger ऑडियो सर्वर TRACK_FAST
अनुरोध की समीक्षा करता है और वैकल्पिक रूप से सर्वर स्तर पर अनुरोध को अस्वीकार कर सकता है। यह साझा मेमोरी नियंत्रण ब्लॉक के बिट CBLK_FAST
के माध्यम से क्लाइंट को सूचित करता है कि अनुरोध स्वीकार किया गया था या नहीं।
निर्णय को प्रभावित करने वाले कारकों में शामिल हैं:
- इस आउटपुट के लिए तेज़ मिक्सर धागे की उपस्थिति (नीचे देखें)
- नमूना दर ट्रैक करें
- इस ट्रैक के लिए कॉलबैक हैंडलर निष्पादित करने के लिए क्लाइंट थ्रेड की उपस्थिति
- बफ़र आकार ट्रैक करें
- उपलब्ध फास्ट ट्रैक स्लॉट (नीचे देखें)
यदि ग्राहक का अनुरोध स्वीकार कर लिया जाता है, तो इसे "फास्ट ट्रैक" कहा जाता है। अन्यथा इसे "सामान्य ट्रैक" कहा जाता है।
मिक्सर धागे
जिस समय ऑडियोफ्लिंगर एक सामान्य मिक्सर थ्रेड बनाता है, यह निर्णय लेता है कि एक तेज़ मिक्सर थ्रेड भी बनाया जाए या नहीं। सामान्य मिक्सर और तेज़ मिक्सर दोनों किसी विशेष ट्रैक से नहीं, बल्कि ट्रैक के एक सेट से जुड़े होते हैं। हमेशा एक सामान्य मिक्सर धागा होता है। तेज़ मिक्सर धागा, यदि मौजूद है, तो सामान्य मिक्सर धागे के अधीन है और उसके नियंत्रण में कार्य करता है।
तेज़ मिक्सर
विशेषताएँ
तेज़ मिक्सर धागा ये सुविधाएँ प्रदान करता है:
- सामान्य मिक्सर के उप-मिश्रण और 7 क्लाइंट फास्ट ट्रैक तक का मिश्रण
- प्रति ट्रैक क्षीणन
छोड़ी गई विशेषताएं:
- प्रति ट्रैक नमूना दर रूपांतरण
- प्रति ट्रैक प्रभाव
- प्रति मिश्रण प्रभाव
अवधि
तेज़ मिक्सर समय-समय पर दो से तीन मिलीसेकंड (एमएस) की अनुशंसित अवधि के साथ चलता है, या शेड्यूलिंग स्थिरता के लिए यदि आवश्यक हो तो पांच एमएस की थोड़ी अधिक अवधि के साथ चलता है। यह संख्या इसलिए चुनी गई ताकि, संपूर्ण बफ़र पाइपलाइन को ध्यान में रखते हुए, कुल विलंबता 10 एमएस के क्रम पर हो। छोटे मान संभव हैं लेकिन सीपीयू शेड्यूलिंग पूर्वानुमान के आधार पर बिजली की खपत में वृद्धि और गड़बड़ियों की संभावना हो सकती है। बड़े मान संभव हैं, 20 एमएस तक, लेकिन इसके परिणामस्वरूप कुल विलंबता में कमी आती है और इसलिए इससे बचा जाना चाहिए।
निर्धारण
तेज़ मिक्सर उन्नत SCHED_FIFO
प्राथमिकता पर चलता है। इसे बहुत कम सीपीयू समय की आवश्यकता होती है, लेकिन इसे अक्सर और कम शेड्यूलिंग घबराहट के साथ चलना चाहिए। जिटर चक्र समय में भिन्नता को व्यक्त करता है: यह वास्तविक चक्र समय बनाम अपेक्षित चक्र समय के बीच का अंतर है। बहुत देर तक दौड़ने से कम दौड़ने के कारण गड़बड़ियाँ होंगी। बहुत जल्दी दौड़ने से ट्रैक द्वारा डेटा प्रदान करने से पहले तेज़ ट्रैक से खींचने के कारण गड़बड़ियाँ होंगी।
ब्लॉक कर रहा है
आदर्श रूप से तेज़ मिक्सर थ्रेड एचएएल write()
के अलावा कभी भी ब्लॉक नहीं होता है। तेज़ मिक्सर के भीतर अवरोधन की अन्य घटनाओं को बग माना जाता है। विशेष रूप से, म्यूटेक्स से बचा जाता है। इसके बजाय, नॉन-ब्लॉकिंग एल्गोरिदम (जिन्हें लॉक-फ्री एल्गोरिदम भी कहा जाता है) का उपयोग किया जाता है। इस विषय पर अधिक जानकारी के लिए प्राथमिकता व्युत्क्रमण से बचना देखें।
अन्य घटकों से संबंध
तेज़ मिक्सर का ग्राहकों के साथ बहुत कम सीधा संपर्क होता है। विशेष रूप से, यह बाइंडर-स्तरीय संचालन नहीं देखता है, लेकिन यह क्लाइंट के साझा मेमोरी नियंत्रण ब्लॉक तक पहुंच प्राप्त करता है।
तेज़ मिक्सर सामान्य मिक्सर से राज्य कतार के माध्यम से कमांड प्राप्त करता है।
ट्रैक डेटा खींचने के अलावा, ग्राहकों के साथ बातचीत सामान्य मिक्सर के माध्यम से होती है।
तेज़ मिक्सर का प्राथमिक सिंक ऑडियो HAL है।
सामान्य मिक्सर
विशेषताएँ
सभी सुविधाएँ सक्षम हैं:
- 32 ट्रैक तक
- प्रति ट्रैक क्षीणन
- प्रति ट्रैक नमूना दर रूपांतरण
- प्रभाव प्रसंस्करण
अवधि
अवधि की गणना तेज़ मिक्सर अवधि के पहले अभिन्न गुणक के रूप में की जाती है जो कि >=20 एमएस है।
निर्धारण
सामान्य मिक्सर ऊंचे SCHED_OTHER
प्राथमिकता पर चलता है।
ब्लॉक कर रहा है
सामान्य मिक्सर को ब्लॉक करने की अनुमति होती है, और अक्सर यह विभिन्न म्यूटेक्स के साथ-साथ इसके उप-मिश्रण को लिखने के लिए ब्लॉकिंग पाइप पर भी करता है।
अन्य घटकों से संबंध
सामान्य मिक्सर बाहरी दुनिया के साथ बड़े पैमाने पर इंटरैक्ट करता है, जिसमें बाइंडर थ्रेड, ऑडियो पॉलिसी मैनेजर, फास्ट मिक्सर थ्रेड और क्लाइंट ट्रैक शामिल हैं।
सामान्य मिक्सर का सिंक तेज़ मिक्सर के ट्रैक 0 के लिए एक अवरुद्ध पाइप है।
झंडे
AUDIO_OUTPUT_FLAG_FAST
बिट एक संकेत है। इस बात की कोई गारंटी नहीं है कि अनुरोध पूरा हो जाएगा।
AUDIO_OUTPUT_FLAG_FAST
एक क्लाइंट-स्तरीय अवधारणा है। यह सर्वर में दिखाई नहीं देता.
TRACK_FAST
एक क्लाइंट -> सर्वर अवधारणा है।