HIDL অডিও HAL

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

audio_hal

চিত্র 1. অডিও HAL ইন্টারফেস।

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

অডিও নীতি এবং অডিও প্রভাব XML কনফিগারেশন ফাইলগুলিকে অডিও HIDL HAL ইন্টারফেসের অংশ হিসাবে বিবেচনা করা হয়। এই ফাইলগুলি অবশ্যই তাদের স্কিমাগুলির সাথে সঙ্গতিপূর্ণ হতে হবে এবং কনফার্মেন্স VTS পরীক্ষা দ্বারা যাচাই করা হয়৷

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

অডিও HIDL HAL API

এই বিভাগটি HIDL-এর জন্য মূল, প্রভাব এবং সাধারণ HAL API-গুলি বর্ণনা করে।

কোর HAL

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

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

নিম্নলিখিত সারণীতে দরকারী কোর HAL HIDL উপাদানগুলির অবস্থান তালিকাভুক্ত করা হয়েছে:

মূল HAL উপাদান অবস্থান
API এর সর্বশেষ সংস্করণ /hardware/interfaces/audio/6.0
সর্বশেষ কোর 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/ ) এর ডিফল্ট বাস্তবায়ন হল লিগ্যাসি শেয়ার্ড লাইব্রেরি ব্যবহার করে প্রি-ট্রেবল HAL বাস্তবায়নের চারপাশে একটি মোড়ক। কার্নেল ড্রাইভারের সাথে সরাসরি ইন্টারঅ্যাক্ট করে এমন অডিও HAL-এর নতুন সংস্করণ বাস্তবায়ন করার সময় ডিফল্ট বাস্তবায়নকে একটি রেফারেন্স হিসাবে বিবেচনা করা যেতে পারে।

প্রভাব HAL

নিম্নলিখিত সারণী HIDL ব্যবহার করে দরকারী প্রভাব HAL উপাদানগুলির অবস্থান তালিকাভুক্ত করে:

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/ এবং Audio Effects বিভাগে Effects HAL API-এর একটি নমুনা বাস্তবায়ন দেখুন।

সাধারণ HAL

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

  • সংজ্ঞা ( /hardware/interfaces/audio/common/6.0/types.hal ) কোর এবং ইফেক্ট এপিআই দ্বারা ভাগ করা হয়েছে।
  • ইউটিলিটিগুলি ( /hardware/interfaces/audio/common/all-versions ) বাস্তবায়ন, ক্লায়েন্ট এবং পরীক্ষার জন্য HIDL API-এর বিরুদ্ধে কোডিং করতে সাহায্য করে।

অডিও HAL V7-এর আপডেট

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

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

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

এই পরিবর্তনগুলি তাদের নিজ নিজ বিভাগে আরও বিশদে আলোচনা করা হয়েছে।

গণনা

অডিও HAL V7 থেকে শুরু করে, অডিও নীতি কনফিগারেশন ফাইলে ব্যবহৃত গণনাকৃত প্রকারগুলি শুধুমাত্র XSD স্কিমাতে সংজ্ঞায়িত করা হয় এবং HIDL-এ নয়।

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

চিত্র 2 V7 এ AudioFormat enum টাইপের কিছু পরিবর্তনের তুলনা করে:

audioformat-change

চিত্র 2. অডিও ফরম্যাট enum-এ কিছু পরিবর্তনের তুলনা।

string -এ রূপান্তরিত enum প্রকারের জন্য নিম্নলিখিত তালিকাটি পড়ুন:

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

স্ট্রিং enum মান পাস

স্ট্রিং মান HAL ইন্টারফেস সীমানা জুড়ে গণনা মান হিসাবে তথ্য স্থানান্তর করার জন্য ব্যবহৃত হয়। ফ্রেমওয়ার্ক এবং HAL র‌্যাপার উভয়ই ব্যবসায়িক যুক্তি বাস্তবায়নের জন্য পূর্ণসংখ্যা এনাম মান ব্যবহার করে এবং চিত্র 3- তে চিত্রিত রূপান্তর পদ্ধতি ব্যবহার করে:

audio-passing-values

চিত্র 3. স্ট্রিং enum মান পাস করা।

একটি উদাহরণ হিসাবে, ফ্রেমওয়ার্ক থেকে বিক্রেতার কাছে অডিও ফর্ম্যাট টাইপের একটি মান পাস করতে:

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

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

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

V7-এ , ( ) এবং | (উল্লম্ব বার) V6 এবং নীচে ব্যবহৃত চিহ্ন। নিম্নলিখিত উদাহরণে দেখা যায়, channelMasks মানগুলির তালিকা সীমাবদ্ধ করতে একটি স্থান ব্যবহার করা হয়:

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

প্রতীক পরিবর্তন করতে, update_audio_policy_config.sh নামে একটি স্বয়ংক্রিয় রূপান্তর স্ক্রিপ্ট ব্যবহার করুন। পিক্সেল 5 (রেডফিন) ডিভাইসের জন্য একটি 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

সংস্করণ তথ্য

নিম্নলিখিত টেবিলে প্রতিটি অ্যান্ড্রয়েড রিলিজের জন্য HAL সংস্করণ নম্বর তালিকাভুক্ত করা হয়েছে:

অ্যান্ড্রয়েড সংস্করণ HIDL HAL সংস্করণ
অ্যান্ড্রয়েড 13 7.1
অ্যান্ড্রয়েড 12 7.0
অ্যান্ড্রয়েড 11 6.0
অ্যান্ড্রয়েড 10 5.0
অ্যান্ড্রয়েড 9 4.0
অ্যান্ড্রয়েড 8 2.0