HIDL Audio HAL

Android 13 এবং তার আগের ভার্সনে, অডিও HAL ইন্টারফেস HIDL HAL ফাইলে (.hal এক্সটেনশন সহ) HIDL এবং কনফিগারেশন ফাইলের জন্য XSD স্কিমা ব্যবহার করে সংজ্ঞায়িত করা হয়, যা নিচে দেখানো হয়েছে।

audio_hal

ছবি ১. অডিও HAL ইন্টারফেস।

কনফিগারেশন ফাইল

অডিও নীতি ও অডিও এফেক্ট XML কনফিগারেশন ফাইলকে Audio HIDL HAL ইন্টারফেসের অংশ হিসেবে বিবেচনা করা হয়। এইসব ফাইলকে অবশ্যই তাদের স্কিমা মেনে চলতে হবে এবং VTS টেস্টের মাধ্যমে তা যাচাই করা হয়।

অডিও HIDL HAL প্রয়োগ করার অংশ হিসেবে, আপনাকে অবশ্যই অডিও নীতি কনফিগারেশন ফাইল তৈরি করতে হবে যা অডিও টপোলজি বর্ণনা করে। ফ্রেমওয়ার্ক যাতে ব্যবহার করতে পারে তার জন্য অডিও HAL-এর ক্ষমতা audio_policy_configuration.xml ফাইলে ঘোষণা করতে হবে।

Audio HIDL HAL API

এই বিভাগে HIDL-এর জন্য Core, Effects ও Common HAL API-এর বর্ণনা দেওয়া হয়েছে।

কোর HAL

HIDL ব্যবহার করে, Core HAL-এর কিছু মূল ইন্টারফেস নিচে দেওয়া হল:

  • IDeviceFactory.hal হল API-তে প্রবেশের পয়েন্ট।
  • IDevice.hal ও IPrimaryDevice.hal-এ setMasterVolume বা openInputStream-এর মতো পদ্ধতি আছে।
  • স্ট্রিমগুলি একমুখী এবং AudioFlinger দ্বারা IStream.hal, IStreamOut.hal এবং IStreamIn.hal-এর মাধ্যমে HAL-এ এবং থেকে অডিও পাঠাতে বা গ্রহণ করতে ব্যবহৃত হয়।

নিচে দেওয়া সারণীতে দরকারী Core HAL HIDL কম্পোনেন্টের লোকেশন তালিকাভুক্ত করা আছে:

কোর HAL কম্পোনেন্ট লোকেশন
API-এর লেটেস্ট ভার্সন /hardware/interfaces/audio/6.0
লেটেস্ট Core HAL API-এর জন্য নির্দিষ্ট ধরন /hardware/interfaces/audio/6.0/types.hal
অডিও নীতি কনফিগারেশন ফাইল XSD স্কিমা /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd

Core HAL API-এর ডিফল্ট প্রয়োগ (/hardware/interfaces/audio/core/all-versions/default/) হল, লেগ্যাসি শেয়ার করা লাইব্রেরি ব্যবহার করে, প্রি-Treble HAL প্রয়োগের চারপাশের র‍্যাপার। এছাড়াও, সরাসরি কার্নেল ড্রাইভারের সাথে ইন্টার‍্যাক্ট করে এমন অডিও HAL-এর নতুন ভার্সন প্রয়োগ করার সময় ডিফল্ট প্রয়োগকে রেফারেন্স হিসেবে বিবেচনা করা যেতে পারে।

এফেক্ট HAL

নিচের সারণীতে HIDL ব্যবহার করে কার্যকরী Effects HAL কম্পোনেন্টগুলির লোকেশন তালিকাভুক্ত করা হয়েছে:

Effects HAL কম্পোনেন্ট লোকেশন
API-এর লেটেস্ট ভার্সন /hardware/interfaces/audio/effect/6.0/
ইফেক্ট কনফিগারেশন ফাইলের XSD স্কিমা /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd

আরও তথ্যের জন্য, /hardware/interfaces/audio/effect/all-versions/default/-এ Effects HAL API-এর নমুনা প্রয়োগ এবং অডিও এফেক্ট বিভাগ দেখুন।

সাধারণ HAL

HIDL ব্যবহার করে Common HAL API-তে নিম্নলিখিতগুলি থাকে:

  • Core ও Effect API-এর মাধ্যমে শেয়ার করা সংজ্ঞা (/hardware/interfaces/audio/common/6.0/types.hal)।
  • ইমপ্লিমেন্টেশন, ক্লায়েন্ট ও টেস্টের জন্য HIDL API-এর বিরুদ্ধে কোডিং করতে সাহায্য করার জন্য ইউটিলিটি (/hardware/interfaces/audio/common/all-versions) ব্যবহার করা হয়।

Audio HAL V7-এ আপডেট

এই বিভাগে বর্ণিত Android 12-এ অডিও HAL-এর ভার্সন ৭-এ উল্লেখযোগ্য পরিবর্তন করা হয়েছে। Audio HAL V7 নিম্নলিখিত কাজগুলি করে:

  • ফ্রেমওয়ার্ক ও HAL-এর ব্যবহার করা ডেটা মডেলকে একত্রিত করে।
  • HIDL ডেটার ধরন (enums) এবং অডিও নীতি কনফিগারেশনের জন্য ব্যবহৃত XML স্কিমার মধ্যে ডুপ্লিকেশন কম করে।

বিশেষত, Audio HAL V7-এ নিম্নলিখিত অংশে পরিবর্তন করা হয়েছে:

এইসব পরিবর্তন সংশ্লিষ্ট বিভাগে আরও বিস্তারিতভাবে আলোচনা করা হয়েছে।

তালিকা

Audio HAL V7 থেকে শুরু করে, Audio Policy Configuration ফাইলে ব্যবহৃত এনুমারেটেড ধরন শুধুমাত্র XSD স্কিমায়ই সংজ্ঞায়িত করা হয়, HIDL-এ নয়।

Audio HAL V6-এ, enum ধরনের ভ্যালু (যেমন AudioFormat) types.hal-এও সংজ্ঞায়িত করা আছে, এর ফলে অডিও নীতি কনফিগারেশন ফাইল XSD স্কিমায় ডুপ্লিকেট তৈরি হয়। V7-এ এটি এড়াতে, এনুমের ধরন পরিবর্তন করে string করা হয়েছে এবং এর পরিবর্তে XSD স্কিমায় সম্ভাব্য সব এনুমারেশন ভ্যালু তালিকাভুক্ত করা হয়েছে।

V7-এ AudioFormat enum টাইপে করা কিছু পরিবর্তন ছবি ২-এ তুলনা করা হয়েছে:

audioformat-change

ছবি ২. AudioFormat enum-এ করা কিছু পরিবর্তনের তুলনা।

string-এ কনভার্ট করা হয়েছে এমন enum টাইপের জন্য নিম্নলিখিত তালিকা দেখুন:

  • AudioChannelMask
  • AudioContentType
  • AudioDevice: ভেন্ডর এক্সটেনসিবল
  • AudioFormat: ভেন্ডর এক্সটেনসিবল
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

স্ট্রিং এনাম ভ্যালু পাস করুন

HAL ইন্টারফেস বাউন্ডারি জুড়ে গুনতির ভ্যালু হিসেবে তথ্য ট্রান্সফার করার জন্য স্ট্রিং ভ্যালু ব্যবহার করা হয়। ফ্রেমওয়ার্ক ও HAL র‍্যাপার, দুটিই বিজনেস লজিক প্রয়োগ করার জন্য পূর্ণসংখ্যা এনুম ভ্যালু ব্যবহার করে এবং ছবি ৩-এ দেখানো কনভার্সন পদ্ধতি ব্যবহার করে:

audio-passing-values

ছবি ৩. স্ট্রিং enum ভ্যালু পাস করা হচ্ছে।

যেমন, ফ্রেমওয়ার্ক থেকে ভেন্ডরকে অডিও ফর্ম্যাট ধরনের ভ্যালু পাস করতে:

  1. AudioFormat-এর এনাম ভ্যালু libaudiohal-এ স্ট্রিং ভ্যালুতে কনভার্ট করা হয় এবং HAL-এ পাস করা হয়।
  2. HAL-এর দিকে, ডিফল্ট র‍্যাপার স্ট্রিংটিকে enum ভ্যালুতে কনভার্ট করে, যা লেগ্যাসি HAL-এ পাস করা হয়।

XML স্কিমা পরিবর্তন

XML স্কিমা ডেফিনিশনে (XSD) এনাম ভ্যালুর সম্পূর্ণ তালিকা থাকলে, VTS-এর মাধ্যমে অডিও নীতি কনফিগারেশন XML ফাইল আরও ভালোভাবে যাচাই করা যায়। XSD-এর সাথে মানানসই করার জন্য HAL V7-এর সাথে ব্যবহৃত অডিও নীতি কনফিগারেশন ফাইলে আমরা পরিবর্তন করেছি।

V7-এ, , (কমা) এবং | (উল্লম্ব বার) প্রতীকের পরিবর্তে, অ্যাট্রিবিউটে (যেমন, স্যাম্পেলিং রেট, চ্যানেল মাস্ক এবং ফ্ল্যাগ) ভ্যালু তালিকা আলাদা করতে একটি স্ট্যান্ডার্ড ␣ (স্পেস) অক্ষর ব্যবহার করা হয়। V6 এবং এর আগের ভার্সনে এগুলি ব্যবহার করা হত। নিচের উদাহরণে যেমন দেখা যাচ্ছে, channelMasks-এর জন্য ভ্যালুর তালিকা আলাদা করতে স্পেস ব্যবহার করা হয়েছে:

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

প্রতীক পরিবর্তন করতে, update_audio_policy_config.sh নামের একটি অটোমেটিক কনভার্সন স্ক্রিপ্ট ব্যবহার করুন। Pixel 5 (Redfin) ডিভাইসের জন্য V6 অডিও পলিসি কনফিগারেশন ফাইলকে V7 ভার্সনে কনভার্ট করতে নিম্নলিখিত কমান্ড দেখুন:

hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0

ডেটার প্রকার

ডুপ্লিকেট সংজ্ঞা কমানোর জন্য আমরা V7-এ কিছু ডেটা স্ট্রাকচার নতুন করে সংজ্ঞায়িত করেছি। ডেটা আইটেমের পুনরাবৃত্তিমূলক টিপলগুলিকে একসাথে গ্রুপ করে আবার ব্যবহারযোগ্য স্ট্রাকচারে রাখা হয়। এইসব ডেটা স্ট্রাকচার নিরাপদ ইউনিয়নের মতো লেটেস্ট HIDL ফিচার ব্যবহার করে।

যেমন, V6 ও তার আগের ভার্সনে, HIDL ইন্টারফেস ও টাইপে প্রায়ই <format, sampling rate, channel mask> তিনবার ব্যবহার করা হয়। এই বাহুল্য দূর করতে, V7-এ, AudioConfigBaseডেটার ধরন ও অন্যান্য ডেটার ধরনকে নিম্নলিখিতভাবে সংজ্ঞায়িত করা হয়েছে:

  • AudioConfigBase := <format, sampling rate, channel mask>

  • AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>

    AudioConfig, AudioOffloadInfo, AudioPortConfig-এর দ্বারা ব্যবহৃত

  • AudioProfile := <format, {sampling rates}, {channel masks}>

    AudioPort/PortConfig-এ আলগা সংগ্রহকে প্রতিস্থাপন করে

  • AudioPortExtendedInfo := device | mix | session

    AudioPort/PortConfig-এ ইউনিয়ন পরিবর্তন করে

ভেন্ডর ট্যাগ

ডিভাইসের ধরন ও ফর্ম্যাট ছাড়াও, ভেন্ডররা অডিও ট্র্যাক মেটাডেটার জন্য কাস্টম ট্যাগ যোগ করতে পারেন।

প্লেব্যাক ও রেকর্ডিং ট্র্যাক মেটাডেটার জন্য, ভেন্ডররা তাদের নিজস্ব ট্যাগ পাস করতে পারেন, যেগুলি অ্যাপ থেকে HAL-এ অডিও I/O স্ট্রিমে অ্যাট্রিবিউট যোগ করতে ব্যবহার করা হয়।

প্লেব্যাক ট্র্যাক মেটাডেটার জন্য ভেন্ডর ট্যাগ নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

struct PlaybackTrackMetadata {
…
    /** Tags from AudioTrack audio attributes */
    vec<AudioTag> tags;
};

রেকর্ডিং ট্র্যাক মেটাডেটার জন্য নির্দিষ্ট ট্যাগ যোগ করে RecordTrackMetadata স্ট্রাকচার একই পদ্ধতিতে প্রয়োগ করা হয়।

ভেন্ডর এক্সটেনশন নেমস্পেসিং

HAL V7 থেকে শুরু করে, ভেন্ডর এক্সটেনশনের জন্য অতিরিক্ত {vendor} প্রিফিক্স প্রয়োজন হয় যা V6-এ প্রয়োজন হয় না। {vendor} প্রিফিক্সটি বৈধ হতে হলে, এটি অবশ্যই তিন বা তার বেশি বর্ণসাংখ্যিক অক্ষর হতে হবে।

V7-এ নিম্নলিখিত ফর্ম্যাট ব্যবহার করুন:

VX_{vendor}_{letters/numbers}

সঠিক V7 ভেন্ডর এক্সটেনশনের কিছু উদাহরণ নিচে দেওয়া হল:

  • VX_GOOGLE_VR
  • VX_QCI_AMBIENT_MIC

ভার্সন সংক্রান্ত তথ্য

নিচের সারণীতে প্রতিটি Android রিলিজের জন্য HAL ভার্সন নম্বর তালিকাভুক্ত করা হয়েছে:

Android ভার্সন HIDL HAL ভার্সন
Android 13 ৭.১
Android 12 ৭.০
Android 11 ৬.০
Android 10 ৫.০
Android 9 ৪.০
Android 8 2.0