অ্যান্ড্রয়েড 4.1 রিলিজ একটি নিম্ন লেটেন্সি অডিও আউটপুট পাথের জন্য অভ্যন্তরীণ কাঠামোর পরিবর্তনগুলি চালু করেছে। সর্বনিম্ন পাবলিক ক্লায়েন্ট API বা HAL API পরিবর্তন ছিল। এই নথিটি প্রাথমিক নকশা বর্ণনা করে, যা সময়ের সাথে সাথে বিকশিত হতে থাকে। এই ডিজাইন সম্পর্কে ভালোভাবে বোঝার ফলে ডিভাইস OEM এবং SoC বিক্রেতাদের তাদের নির্দিষ্ট ডিভাইস এবং চিপসেটে সঠিকভাবে নকশা বাস্তবায়ন করতে সাহায্য করা উচিত। এই নিবন্ধটি অ্যাপ্লিকেশন বিকাশকারীদের উদ্দেশ্যে নয়।
ট্র্যাক সৃষ্টি
ক্লায়েন্ট ঐচ্ছিকভাবে AudioTrack C++ কনস্ট্রাক্টর বা AudioTrack::set()
এর audio_output_flags_t
প্যারামিটারে AUDIO_OUTPUT_FLAG_FAST
বিট সেট করতে পারে। বর্তমানে একমাত্র ক্লায়েন্ট যারা এটি করে:
- OpenSL ES বা AAudio ভিত্তিক Android নেটিভ অডিও
- android.media.SoundPool
- android.media.ToneGenerator
AudioTrack C++ বাস্তবায়ন AUDIO_OUTPUT_FLAG_FAST
অনুরোধ পর্যালোচনা করে এবং ক্লায়েন্ট স্তরে ঐচ্ছিকভাবে অনুরোধ অস্বীকার করতে পারে। যদি এটি অনুরোধটি পাস করার সিদ্ধান্ত নেয়, তাহলে এটি IAudioTrack
ফ্যাক্টরি পদ্ধতি IAudioFlinger::createTrack()
এর track_flags_t
প্যারামিটারের TRACK_FAST
বিট ব্যবহার করে।
AudioFlinger অডিও সার্ভার TRACK_FAST
অনুরোধ পর্যালোচনা করে এবং সার্ভার স্তরে ঐচ্ছিকভাবে অনুরোধ অস্বীকার করতে পারে৷ শেয়ার্ড মেমরি কন্ট্রোল ব্লকের বিট CBLK_FAST
এর মাধ্যমে অনুরোধটি গৃহীত হয়েছে কি না তা ক্লায়েন্টকে জানায়।
সিদ্ধান্তকে প্রভাবিত করে এমন কারণগুলির মধ্যে রয়েছে:
- এই আউটপুটের জন্য একটি দ্রুত মিক্সার থ্রেডের উপস্থিতি (নীচে দেখুন)
- ট্র্যাক নমুনা হার
- এই ট্র্যাকের জন্য কলব্যাক হ্যান্ডলার চালানোর জন্য একটি ক্লায়েন্ট থ্রেডের উপস্থিতি
- ট্র্যাক বাফার আকার
- উপলব্ধ ফাস্ট ট্র্যাক স্লট (নীচে দেখুন)
যদি ক্লায়েন্টের অনুরোধ গৃহীত হয়, এটিকে "দ্রুত ট্র্যাক" বলা হয়। অন্যথায় এটিকে "সাধারণ ট্র্যাক" বলা হয়।
মিক্সার থ্রেড
যখন AudioFlinger একটি সাধারণ মিক্সার থ্রেড তৈরি করে, তখন এটি একটি দ্রুত মিক্সার থ্রেড তৈরি করবে কি না তা সিদ্ধান্ত নেয়। সাধারণ মিক্সার এবং ফাস্ট মিক্সার উভয়ই একটি নির্দিষ্ট ট্র্যাকের সাথে সম্পর্কিত নয়, বরং ট্র্যাকের সেটের সাথে যুক্ত। সবসময় একটি সাধারণ মিশুক থ্রেড আছে. দ্রুত মিক্সার থ্রেড, যদি এটি বিদ্যমান থাকে, তবে সাধারণ মিক্সার থ্রেডের অধীনস্থ এবং এটির নিয়ন্ত্রণে কাজ করে।
দ্রুত মিশুক
বৈশিষ্ট্য
দ্রুত মিক্সার থ্রেড এই বৈশিষ্ট্যগুলি প্রদান করে:
- সাধারণ মিক্সারের সাব-মিক্স এবং 7টি পর্যন্ত ক্লায়েন্ট ফাস্ট ট্র্যাকের মিশ্রণ
- প্রতি ট্র্যাক ক্ষয়করণ
বাদ দেওয়া বৈশিষ্ট্য:
- প্রতি ট্র্যাক নমুনা হার রূপান্তর
- ট্র্যাক প্রভাব প্রতি
- প্রতি মিশ্রণ প্রভাব
সময়কাল
ফাস্ট মিক্সারটি পর্যায়ক্রমে চলে, দুই থেকে তিন মিলিসেকেন্ডের (ms) প্রস্তাবিত সময়ের সাথে বা সময় নির্ধারণের স্থায়িত্বের জন্য প্রয়োজন হলে পাঁচ ms এর সামান্য বেশি সময়কালের সাথে। এই নম্বরটি বেছে নেওয়া হয়েছিল যাতে, সম্পূর্ণ বাফার পাইপলাইনের জন্য হিসাব করে, মোট লেটেন্সি 10 ms হয়৷ ছোট মান সম্ভব কিন্তু CPU সময়সূচী পূর্বাভাসযোগ্যতার উপর নির্ভর করে বিদ্যুত খরচ বৃদ্ধি এবং সমস্যা হওয়ার সম্ভাবনা হতে পারে। বড় মান সম্ভব, 20 ms পর্যন্ত, কিন্তু এর ফলে মোট বিলম্বিত হয় এবং তাই এড়ানো উচিত।
সময়সূচী
দ্রুত মিক্সারটি উন্নত SCHED_FIFO
অগ্রাধিকারে চলে৷ এটির জন্য খুব কম সিপিইউ সময় প্রয়োজন, তবে এটি অবশ্যই প্রায়শই এবং কম শিডিউলিং জিটার সহ চালাতে হবে। জিটার চক্র সময়ের তারতম্য প্রকাশ করে: এটি প্রকৃত চক্র সময়ের বনাম প্রত্যাশিত চক্র সময়ের মধ্যে পার্থক্য। খুব দেরিতে দৌড়ানোর ফলে আন্ডাররানের কারণে সমস্যা দেখা দেবে। খুব তাড়াতাড়ি দৌড়ানোর ফলে ট্র্যাক ডেটা সরবরাহ করার আগে দ্রুত ট্র্যাক থেকে টানার কারণে সমস্যা দেখা দেবে।
ব্লকিং
আদর্শভাবে HAL write()
ব্যতীত ফাস্ট মিক্সার থ্রেড কখনই ব্লক করে না। ফাস্ট মিক্সারের মধ্যে ব্লক করার অন্যান্য ঘটনাগুলিকে বাগ হিসাবে বিবেচনা করা হয়। বিশেষ করে, মিউটেক্স এড়ানো হয়। পরিবর্তে, নন-ব্লকিং অ্যালগরিদম (লক-মুক্ত অ্যালগরিদম নামেও পরিচিত) ব্যবহার করা হয়। এই বিষয়ে আরও জানতে অগ্রাধিকার বিপরীতমুখী এড়ানো দেখুন।
অন্যান্য উপাদানের সাথে সম্পর্ক
ফাস্ট মিক্সারের ক্লায়েন্টদের সাথে সামান্য সরাসরি মিথস্ক্রিয়া আছে। বিশেষ করে, এটি বাইন্ডার-স্তরের ক্রিয়াকলাপগুলি দেখতে পায় না, তবে এটি ক্লায়েন্টের ভাগ করা মেমরি নিয়ন্ত্রণ ব্লক অ্যাক্সেস করে।
ফাস্ট মিক্সার একটি স্টেট কিউ এর মাধ্যমে সাধারণ মিক্সার থেকে কমান্ড গ্রহণ করে।
ট্র্যাক ডেটা টানা ছাড়া, ক্লায়েন্টদের সাথে মিথস্ক্রিয়া সাধারণ মিক্সারের মাধ্যমে হয়।
ফাস্ট মিক্সারের প্রাথমিক সিঙ্ক হল অডিও HAL।
সাধারণ মিশুক
বৈশিষ্ট্য
সমস্ত বৈশিষ্ট্য সক্রিয় করা হয়েছে:
- 32টি ট্র্যাক পর্যন্ত
- প্রতি ট্র্যাক ক্ষয়করণ
- প্রতি ট্র্যাক নমুনা হার রূপান্তর
- প্রভাব প্রক্রিয়াকরণ
সময়কাল
পিরিয়ডটিকে ফাস্ট মিক্সার পিরিয়ডের প্রথম অবিচ্ছেদ্য মাল্টিপল হিসেবে গণনা করা হয় যা হল >= 20 ms।
সময়সূচী
স্বাভাবিক মিক্সারটি উন্নত SCHED_OTHER
অগ্রাধিকারে চলে৷
ব্লকিং
সাধারণ মিক্সারটিকে ব্লক করার অনুমতি দেওয়া হয় এবং প্রায়শই এটি বিভিন্ন মিউটেক্সের পাশাপাশি একটি ব্লকিং পাইপে তার সাব-মিক্স লেখার জন্য করে।
অন্যান্য উপাদানের সাথে সম্পর্ক
সাধারণ মিক্সার বাইন্ডার থ্রেড, অডিও পলিসি ম্যানেজার, ফাস্ট মিক্সার থ্রেড এবং ক্লায়েন্ট ট্র্যাক সহ বাইরের বিশ্বের সাথে ব্যাপকভাবে যোগাযোগ করে।
সাধারণ মিক্সারের সিঙ্ক হল ফাস্ট মিক্সারের ট্র্যাক 0-এ একটি ব্লকিং পাইপ।
পতাকা
AUDIO_OUTPUT_FLAG_FAST
বিট একটি ইঙ্গিত। অনুরোধ পূরণ হবে কোন গ্যারান্টি নেই.
AUDIO_OUTPUT_FLAG_FAST
একটি ক্লায়েন্ট-স্তরের ধারণা। এটা সার্ভারে প্রদর্শিত হয় না.
TRACK_FAST
একটি ক্লায়েন্ট -> সার্ভার ধারণা।