Android 14 থেকে শুরু করে, পার্টনার ও SoC ভেন্ডরদের বর্তমান HIDL HAL ইমপ্লিমেন্টেশনের পরিবর্তে AIDL HAL ইমপ্লিমেন্টেশন ব্যবহার করার জন্য উৎসাহিত করা হচ্ছে।
HIDL Audio HAL থেকে AIDL Audio HAL-এ সহজে ট্রানজিশন করার জন্য, এই পৃষ্ঠায় কিছু মূল পার্থক্য হাইলাইট করা হয়েছে। এছাড়াও, এই পৃষ্ঠায় অডিও HAL-এর জন্য AIDL এবং HIDL ইন্টারফেসের মধ্যে ম্যাপিং দেখানো হয়।
AIDL ও HIDL অডিও HAL ইমপ্লিমেন্টেশনের মধ্যে পার্থক্য
HIDL স্ট্রাকচার ও AIDL স্ট্রাকচারের মধ্যে প্রধান পার্থক্যগুলি হল নিম্নলিখিত:
AIDL অডিও কোর HAL-এ, HIDL HAL-এ XML ফাইলের সিস্টেম-ওয়াইড প্যারামিটারের পরিবর্তে
IConfigইন্টারফেস চালু করা হয়েছে। ফ্রেমওয়ার্ক, ভেন্ডর কনফিগারেশন ফাইলের পরিবর্তে Core HAL থেকে এইসব প্যারামিটার পড়ে। উদাহরণস্বরূপ, ব্যবহারকারীর কন্ট্রোলের জন্য সারফেস করা সারাউন্ড ফর্ম্যাটের তালিকা Core HAL-এরIConfig.getSurroundSoundConfigমেথড প্রদান করে।AIDL অডিও এফেক্ট HAL-এ, HIDL এফেক্ট HAL-এ XML ফাইলে সংজ্ঞায়িত
effectProxyলজিক অডিও ফ্রেমওয়ার্কে সরানো হয়েছে।IFactory.queryEffectsব্যবহার করে অডিও ফ্রেমওয়ার্ক সিস্টেমের সব এফেক্ট ইনস্ট্যান্স এবংIFactory.queryProcessingব্যবহার করে সব এফেক্ট প্রসেসিং কোয়েরি করে।অডিও ডিভাইসের ধরন বোঝাতে ডিভাইস শব্দটি ব্যবহার করার ফলে যাতে কোনও বিভ্রান্তি না হয়,
IDeviceতাই HIDL Audio HAL-এ এটির নাম পরিবর্তন করে AIDL Audio HAL-এIModuleরাখা হয়েছে।AIDL Audio HAL,
IPrimaryDevice-এর পরিবর্তে কাজ করে। ফ্রেমওয়ার্ক প্রতিটিIModuleইনস্ট্যান্সকে বর্তমান অডিও মোড ও স্ক্রিন রোটেশন সম্পর্কে আপডেট পাঠায়। ডেডিকেটেডIBluetoothইন্টারফেস ব্লুটুথ সিনক্রোনাস কানেকশন ওরিয়েন্টেড (BT SCO) এবং হ্যান্ডস-ফ্রি প্রোফাইল (HFP) সংক্রান্ত প্যারামিটার ম্যানেজ করে। টেলিফোনি-নির্দিষ্ট কন্ট্রোল প্রদানকারী একটি ডেডিকেটেডITelephonyইন্টারফেস। আপনিIModuleইন্টারফেসের প্রাইমারি ইনস্ট্যান্স থেকে এই দুটি ইন্টারফেসের ইনস্ট্যান্স পুনরুদ্ধার করতে পারবেন। আরও তথ্যের জন্য Core HAL এবং ফিচার-সম্পর্কিত কার্যকারিতা-এর তুলনা করার টেবিল দেখুন।রিডান্ডেন্সি এড়াতে AIDL অডিও HAL-এ
IDevicesFactoryসরিয়ে দেওয়া হয়েছে। HAL মডিউল (অর্থাৎ,IModuleইন্টারফেস ইনস্ট্যান্স) এখন সরাসরি সার্ভিস ম্যানেজারের সাথে মডিউল ইনস্ট্যান্সের নাম ব্যবহার করে রেজিস্টার করা হয়, যেমনbluetoothবাr_submix। এর একমাত্র ব্যতিক্রম হলprimaryমডিউল যাdefaultইনস্ট্যান্স নামের অধীনে রেজিস্টার করে।
AIDL এবং HIDL অডিও HAL ম্যাপিং
নিম্নলিখিত বিভাগে দেওয়া সারণী থেকে HIDL এবং AIDL অডিও HAL ইন্টারফেসের মধ্যে ম্যাপিং সম্পর্কে জানা যায়। ডিরেক্টরি স্ট্রাকচার সম্পর্কে আরও তথ্যের জন্য অডিও HAL দেখুন।
কোর HAL
সব HIDL ইন্টারফেস android.hardware.audio@N.M প্যাকেজের মধ্যে থাকে, যেখানে
N.M Major.Minor ভার্সন বোঝায়। সব AIDL ইন্টারফেস android.hardware.audio.core প্যাকেজের মধ্যে
থাকে।
| HIDL API ইন্টারফেস ও কনফিগারেশন ফাইল | AIDL API ইন্টারফেস |
|---|---|
IDevicesFactory |
ServiceManager-এর সাথে IModule-এর রেজিস্ট্রেশন। |
IDevice |
IModule |
IPrimaryDevice |
ITelephony IBluetooth |
IStream IStreamIn
IStreamOut |
StreamDescriptor IStreamIn
IStreamCommon
IStreamOut |
audio_policy_configuration.xml
audio_policy_engine_configuration.xml |
IConfig IModule |
| কনফিগার করা যায় এমন অডিও নীতি ফাইল | Android 14-এর জন্য HIDL প্রয়োগ ব্যবহার করুন। |
অডিও পোর্ট, ডায়নামিক প্রোফাইল, রুট ও প্যাচ
এই টেবিলে, XML ফাইলের এলিমেন্টগুলি অ্যাঙ্গেল ব্র্যাকেট ব্যবহার করে চিহ্নিত করা হয়েছে।
| HIDL API ইন্টারফেস পদ্ধতি এবং কনফিগারেশন ফাইল এলিমেন্ট | AIDL API ইন্টারফেস পদ্ধতি |
|---|---|
<attachedDevices>
<defaultOutputDevice>
<mixPorts>
<devicePorts> |
IModule.getAudioPorts |
IDevice.getAudioPort
IDevice.setConnectedState |
IModule.connectExternalDevice
IModule.disconnectExternalDevice |
IStream.getSupportedProfiles |
IModule.connectExternalDevice |
<routes> |
IModule.getAudioRoutes |
IDevice.createAudioPatch
IDevice.updateAudioPatch
IDevice.releaseAudioPatch
IStream.getDevices
IStream.setDevices
IDevice.openInputStream-এ ডিভাইসের স্পেসিফিকেশন
IDevice.openOutputStream |
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch |
অডিও পোর্ট কনফিগারেশন ও স্ট্রিম
| HIDL API ইন্টারফেস পদ্ধতি | AIDL API ইন্টারফেস পদ্ধতি |
|---|---|
IStream.getAudioProperties
IStream.setAudioProperties
IStreamIn.getAudioSource |
IModule.getAudioPortConfigs
IModule.setAudioPortConfig |
IDevice.openInputStream
IDevice.openOutputStream
IStreamIn.prepareForReading
IStreamOut.prepareForWriting
IStream.createMmapBuffer |
IModule.openInputStream
IModule.openOutputStream |
IStream.close |
IStreamCommon.close |
IStreamIn.updateSinkMetadata
IStreamOut.updateSourceMetadata |
IStreamIn.updateMetadata
IStreamOut.updateMetadata |
IStream.standby |
StreamDescriptor.Command.standby |
IStream.pause IStream.resume |
StreamDescriptor.Command.pause .start |
IStream.start IStream.stop (MMAP স্ট্রিম) |
StreamDescriptor.Command.start বা .burst
.pause (ইনপুট) এবং/অথবা .flush (আউটপুট) |
IStreamOut.drain IStreamOut.flush |
StreamDescriptor.Command.drain .flush |
IStreamOut.setCallback
IStreamOut.clearCallback |
IModule.openOutputStream
IStreamCommon.close |
IStreamOut.getPresentationPosition এবং IStreamIn.getCapturePosition
IStreamOut.getLatency
IStream.getMmapPosition
IStreamIn.getInputFramesLost |
StreamDescriptor.Reply.observable
StreamDescriptor.Reply.latencyMs
StreamDescriptor.Reply.hardware
StreamDescriptor.Reply.xrunFrames |
IDevice.getInputBufferSize
IStreamOut.getLatency
IStream.getBufferSize
IStream.getFrameSize
IStream.getFrameCount |
IModule.setAudioPatch, নামমাত্র লেটেন্সি ও ন্যূনতম বাফার
সাইজ হল HAL-এর রিটার্ন করা AudioPatch স্ট্রাকচারের অংশ।
ফ্রেমের প্রকৃত বাফার সাইজ হল StreamDescriptor
স্ট্রাকচারের অংশ, সাথে বাইটে ফ্রেমের সাইজ। এই দুটি সংখ্যাকে গুণ করে বাইটে বাফার সাইজ
গণনা করা যেতে পারে। |
অডিও এফেক্ট কানেকশন
| HIDL API ইন্টারফেস পদ্ধতি | AIDL API ইন্টারফেস পদ্ধতি |
|---|---|
IDevice.addDeviceEffect
IDevice.removeDeviceEffect |
IModule.addDeviceEffect
IModule.removeDeviceEffect |
IStream.addEffect
IStream.removeEffect |
IStreamCommon.addEffect
IStreamCommon.removeEffect |
সিস্টেম-ওয়াইড কনফিগারেশন
সিস্টেম-ব্যাপী কনফিগারেশন যা আগে অডিও নীতি XML
কনফিগারেশন ফাইলে (যেমন, audio_policy_configuration.xml এবং
audio_policy_engine_configuration.xml) সংজ্ঞায়িত করা হয়েছে তা অবশ্যই IConfig-এর মাধ্যমে প্রদান করতে হবে।
তবে, AIDL-এ ট্রানজিশন সহজ করতে, ভেন্ডরদের কাছে এখনও
একই XML ফাইল ব্যবহার করার বিকল্প আছে যা তারা আগে সিস্টেম-ব্যাপী কনফিগারেশন সেট করতে ব্যবহার করত। IConfig-এর রেফারেন্স ইমপ্লিমেন্টেশনে AIDL ডেটা
টাইপ ব্যবহার করে XML ফাইল থেকে তথ্য দেখানোর জন্য প্রয়োজনীয় কোড থাকে, যা
XML থেকে AIDL-এ কনভার্সন সহজ করে তোলে।
| HIDL কনফিগারেশন ফাইলের এলিমেন্ট | AIDL API ইন্টারফেস পদ্ধতি |
|---|---|
<globalConfiguration>
<speaker_drc_enabled><call_screen_mode_supported>
<engine_library> |
দুটি আলাদা আলাদা পদ্ধতিতে ভাগ করা হয়েছে:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig |
<volumes>, অথবা
<volumeGroups>, <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
কনফিগারেশন ফাইল থেকে
speaker_drc_enabledসরিয়ে দেওয়া হয়েছে কারণ এই কনফিগারেশন আইটেমটি সিস্টেমের মধ্যে ব্যবহার করা হয় না। সব ডিভাইসে DRC চালু থাকতে হবে। <ahref="#fnref1" rev="footnote"> </ahref="#fnref1">
ফিচার-সম্পর্কিত কার্যকারিতা
| HIDL API ইন্টারফেস পদ্ধতি | AIDL API ইন্টারফেস |
|---|---|
IDevice.setMasterVolume
IDevice.getMasterVolume
IDevice.setMicMute
IDevice.getMicMute
IDevice.setMasterMute
IDevice.getMasterMute |
IModule.\* |
IPrimaryDevice.getTtyMode
IPrimaryDevice.setTtyMode
IPrimaryDevice.getHacEnabled
IPrimaryDevice.setHacEnabled
IPrimaryDevice.setVoiceVolume |
ITelephony.TelecomConfig.\* |
IPrimaryDevice.setBtScoHeadsetDebugName
IPrimaryDevice.getBtScoNrecEnabled
IPrimaryDevice.setBtScoNrecEnabled
IPrimaryDevice.getBtScoWidebandEnabled
IPrimaryDevice.setBtScoWidebandEnabled,
IPrimaryDevice.getBtHfpEnabled
IPrimaryDevice.setBtHfpEnabled
IPrimaryDevice.setBtHfpSampleRate
IPrimaryDevice.setBtHfpVolume |
IBluetooth.ScoConfig.\*
IBluetooth.HfpConfig.\* |
IPrimaryDevice.setMode
IPrimaryDevice.updateRotation |
ITelephony.switchAudioMode
IModule.updateAudioMode
IModule.updateScreenRotation |
IDevice.setScreenState
IDevice.getMicrophones |
IModule.updateScreenState
IModule.getMicrophones |
IDevice.getHwAvSync
IStream.setHwAvSync |
IModule.generateHwAvSyncId
IStreamCommon.updateHwAvSyncId |
IStreamIn.setGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension |
IStreamIn.setHwGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension |
IStreamOut.getDualMonoMode
IStreamOut.setDualMonoMode
IStreamOut.getPlaybackRateParameters
IStreamOut.setPlaybackRateParameters
IStreamOut.selectPresentation
IStreamOut.getAudioDescriptionMixLevel
IStreamOut.setAudioDescriptionMixLevel
IStreamOut.setLatencyMode
IStreamOut.getRecommendedLatencyModes |
IStreamOut.\* |
IStreamOut.setEventCallback
IStreamOut.setLatencyModeCallback |
IModule.openOutputStream (কলব্যাকগুলি
IStreamOutEventCallback-এ একত্রিত করা হয়েছে) |
IDevice.get/setParameters
IStream.get/setParameters |
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters |
পুরনো পদ্ধতি
| HIDL API ইন্টারফেস পদ্ধতি | কমেন্ট |
|---|---|
IDevice.initCheckIDevice.close |
সফলভাবে ইনিশিয়ালাইজ করা হলে, HAL মডিউল ServiceManager সহ নিজেকে প্রকাশ করে।
সেই সময়, এটি স্থায়ীভাবে বন্ধ হয়ে গেছে বলে ধরে নেওয়া হয়
এবং আর বন্ধ করা যায় না। |
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain |
প্যাচ, পজ, আবার চালু করা এবং ড্রেন করার জন্য সহায়তা বাধ্যতামূলক। |
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp |
অনেক পুরনো। |
ভেন্ডর এক্সটেনশন
HIDL API-তে, IDevice এবং IStream ইন্টারফেস থেকে getParameters বা
setParameters পদ্ধতি ব্যবহার করে ভেন্ডর এক্সটেনশন প্রয়োগ করা হয়। এইসব
পদ্ধতি নির্বিচারে স্ট্রিং গ্রহণ করে।
AIDL API-তে, getVendorParameters
বা setVendorParameters-এর মতো সংশ্লিষ্ট পদ্ধতি আছে, যা ParcelableHolders-এর মধ্যে এনক্যাপসুলেশন ব্যবহার করে নির্বিচারে Parcelable ইনস্ট্যান্স নেয়।
অন্যান্য পরিবর্তন
অন্যান্য সাধারণ পরিবর্তনগুলি হল:
HAL API-এর টেস্ট করার ক্ষমতা উন্নত করতে, AIDL ভার্সনে, আমরা ডিবাগ করার বিকল্প নিয়ে এসেছি যা VTS টেস্ট ব্যবহার করে এবং
ModuleDebugপার্সেলযোগ্যর মাধ্যমে উপলভ্য। এইসব বিকল্প HAL-কে নির্দিষ্ট কিছু ফাংশনালিটি (যেমন, এক্সটার্নাল ডিভাইস কানেক্ট করা) এমুলেট করার নির্দেশ দেয়, যেগুলির জন্য অন্যথায় ম্যানুয়াল হস্তক্ষেপ ও এক্সটার্নাল টেস্টিং সরঞ্জামের ব্যবহার প্রয়োজন হয়।ফ্রেমওয়ার্ক বা VTS টেস্ট
sys.audio.restart.halসিস্টেম প্রপার্টি1-এ সেট করলে, HAL পরিষেবা অবশ্যই রিস্টার্ট করতে হবে। রিস্টার্ট করার কাজটিaudioserver.rcফাইল করে। HAL প্রয়োগ করার সময়,audioserver.rcফাইলে তালিকাভুক্ত উপযুক্ত HAL সার্ভিসের নাম ব্যবহার করুন। Android 14-এ, HAL-এর AIDL ভার্সনের জন্য বিশেষভাবেvendor.audio-hal-aidlনামটি যোগ করা হয়েছে।
এফেক্ট HAL
সব HIDL ইন্টারফেস android.hardware.audio.effect@N.M*
প্যাকেজের মধ্যে থাকে, যেখানে N.M হল Major.Minor ভার্সন। সব AIDL ইন্টারফেস
android.hardware.audio.effect প্যাকেজের মধ্যে থাকে।
| HIDL API ইন্টারফেস ও কনফিগারেশন ফাইল | AIDL API ইন্টারফেস |
|---|---|
IEffectsFactory |
IFactory |
IEffect |
IEffect |
audio_effects.xml |
IEffect |
Effect Factory
| HIDL API ইন্টারফেস (android.hardware.audio.effect@X.X) |
AIDL API ইন্টারফেস (android.hardware.audio.effect) |
|---|---|
IEffectsFactory.getAllDescriptors |
IFactory.queryEffects-এ নাল UUID প্যারামিটার আছে |
IEffectsFactory.getDescriptor |
IFactory.queryEffects UUID প্যারামিটার সহ |
IEffectsFactory.createEffect |
IFactory.createEffect |
audio_effects.xml |
IFactory.queryProcessing
IFactory.queryEffects |
এফেক্ট ইন্টারফেস
| HIDL API ইন্টারফেস (android.hardware.audio.effect@X.X) |
AIDL API ইন্টারফেস (android.hardware.audio.effect) |
|---|---|
IEffect.init |
IEffect.open |
IEffect.setConfig |
IEffect.setParameter |
IEffect.enable |
IEffect.command(CommandId::START) |
IEffect.disable |
IEffect.command(CommandId::STOP) |
IEffect.reset |
IEffect.command(CommandId::RESET) |
IEffect.getDescriptor |
IEffect.getDescriptor |
IEffect.command |
পুরনো HIDL
কমান্ডের ধরনের উপর ভিত্তি করে IEffect.command,
IEffect.setParameter বা
IEffect.getParameter-এর সাথে ম্যাপ করুন
|
| N/A | IEffect.getState |
IEffect.setParameter |
IEffect.setParameter |
IEffect.getParameter |
IEffect.getParameter |
এফেক্ট কমান্ড
| HIDL API ইন্টারফেস (android.hardware.audio.effect@X.X) |
AIDL API ইন্টারফেস (android.hardware.audio.effect) |
|---|---|
EFFECT_CMD_INIT |
IEffect.open |
EFFECT_CMD_RESET |
CommandId.RESET |
EFFECT_CMD_ENABLE |
IEffect.command(CommandId::START) |
EFFECT_CMD_DISABLE |
IEffect.command(CommandId::STOP) |
EFFECT_CMD_SET_PARAM_DEFERRED |
Effects AIDL HAL-এ বন্ধ করে দেওয়া হয়েছে |
EFFECT_CMD_SET_PARAM_COMMIT |
Effects AIDL HAL-এ বন্ধ করে দেওয়া হয়েছে |
EFFECT_CMD_SET_CONFIG
EFFECT_CMD_SET_PARAM
EFFECT_CMD_SET_DEVICE
EFFECT_CMD_SET_VOLUME
EFFECT_CMD_SET_AUDIO_MODE
EFFECT_CMD_SET_CONFIG_REVERSE
EFFECT_CMD_SET_INPUT_DEVICE
EFFECT_CMD_SET_FEATURE_CONFIG
EFFECT_CMD_SET_AUDIO_SOURCE |
IEffect.setParameter |
EFFECT_CMD_GET_PARAM
EFFECT_CMD_GET_CONFIG
EFFECT_CMD_GET_CONFIG_REVERSE
EFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGS
EFFECT_CMD_GET_FEATURE_CONFIG
VISUALIZER_CMD_MEASURE
EFFECT_CMD_FIRST_PROPRIETARY
( VISUALIZER_CMD_CAPTURE-এর সমান) |
IEffect.getParameter |
EFFECT_CMD_OFFLOAD |
বন্ধ করে দেওয়া হয়েছে।
AIDL-এ, অফলোড ও নন-অফলোড মোড সুইচ ফ্রেমওয়ার্কে হ্যান্ডেল করা হয়। |
EFFECT_CMD_DUMP |
বিল্ট-ইন বাইন্ডার ট্রানজ্যাকশন AIBinder_dump দ্বারা ম্যানেজ করা হয়। |
সাধারণ এফেক্ট প্যারামিটারের সংজ্ঞা
| HIDL সংজ্ঞা (android.hardware.audio.effect@X.X) |
AIDL সংজ্ঞা |
|---|---|
Types.hal |
Flags.aidl
Parameter.aidl
|
নির্দিষ্ট এফেক্টের সংজ্ঞা
| HIDL API ইন্টারফেস (android.hardware.audio.effect@X.X) |
AIDL API ইন্টারফেস (android.hardware.audio.effect) |
|---|---|
I$EffectType$.hal |
$EffectType$.aidl |