অ্যান্ড্রয়েড ১৪ থেকে শুরু করে, পার্টনার এবং এসওসি ভেন্ডরদের বর্তমান HIDL HAL ইমপ্লিমেন্টেশনকে AIDL HAL ইমপ্লিমেন্টেশন দিয়ে প্রতিস্থাপন করতে উৎসাহিত করা হচ্ছে।
HIDL Audio HAL থেকে AIDL Audio HAL-এ একটি মসৃণ রূপান্তর সহজ করার জন্য, এই পৃষ্ঠায় কিছু মূল পার্থক্য তুলে ধরা হয়েছে। এই পৃষ্ঠায় Audio HAL-এর জন্য AIDL এবং HIDL ইন্টারফেসগুলোর মধ্যেকার ম্যাপিংও দেখানো হয়েছে।
AIDL এবং HIDL অডিও HAL বাস্তবায়নের মধ্যে পার্থক্য
HIDL কাঠামো এবং AIDL কাঠামোর মধ্যে প্রধান পার্থক্যগুলো নিম্নরূপ:
AIDL Audio Core HAL- এ, HIDL HAL-এর XML ফাইলগুলিতে থাকা সিস্টেম-ব্যাপী প্যারামিটারগুলির প্রতিস্থাপন হিসেবে
IConfigইন্টারফেসটি চালু করা হয়েছে। ফ্রেমওয়ার্কটি ভেন্ডর কনফিগারেশন ফাইলের পরিবর্তে Core HAL থেকে এই প্যারামিটারগুলি পড়ে নেয়। উদাহরণস্বরূপ, ব্যবহারকারীর নিয়ন্ত্রণের জন্য প্রদর্শিত সারাউন্ড ফরম্যাটগুলির তালিকা Core HAL-এরIConfig.getSurroundSoundConfigমেথড দ্বারা সরবরাহ করা হয়।AIDL Audio Effects HAL- এ, HIDL Effects HAL-এর XML ফাইলগুলিতে সংজ্ঞায়িত
effectProxyলজিকটি অডিও ফ্রেমওয়ার্কে স্থানান্তরিত করা হয়। অডিও ফ্রেমওয়ার্কটিIFactory.queryEffectsব্যবহার করে সিস্টেমের সমস্ত এফেক্ট ইনস্ট্যান্স এবংIFactory.queryProcessingব্যবহার করে সমস্ত এফেক্ট প্রসেসিং সম্পর্কে কোয়েরি করে।অডিও ডিভাইসের প্রকারভেদ বোঝাতে ' ডিভাইস ' পরিভাষাটির ব্যবহারজনিত বিভ্রান্তি এড়ানোর জন্য, HIDL Audio HAL-এর
IDeviceAIDL Audio HAL-এIModuleনামে পুনঃনামকরণ করা হয়েছে।AIDL Audio HAL,
IPrimaryDeviceপ্রতিস্থাপন করে। এই ফ্রেমওয়ার্কটি প্রতিটিIModuleইনস্ট্যান্সে বর্তমান অডিও মোড এবং স্ক্রিন রোটেশন সম্পর্কিত আপডেট পাঠায়। একটি ডেডিকেটেডIBluetoothইন্টারফেস ব্লুটুথ সিনক্রোনাস কানেকশন ওরিয়েন্টেড (BT SCO) এবং হ্যান্ডস-ফ্রি প্রোফাইল (HFP) সম্পর্কিত প্যারামিটারগুলো পরিচালনা করে। একটি ডেডিকেটেডITelephonyইন্টারফেস টেলিফোনি-নির্দিষ্ট কন্ট্রোল সরবরাহ করে। আপনিIModuleইন্টারফেসের প্রাইমারি ইনস্ট্যান্স থেকে এই দুটি ইন্টারফেসের ইনস্ট্যান্সই পুনরুদ্ধার করতে পারেন। আরও তথ্যের জন্য Core HAL এবং ফিচার-সম্পর্কিত কার্যকারিতার তুলনামূলক সারণিগুলো দেখুন।পুনরাবৃত্তি এড়ানোর জন্য AIDL Audio HAL থেকে
IDevicesFactoryসরিয়ে দেওয়া হয়েছে। HAL মডিউলগুলো (অর্থাৎ,IModuleইন্টারফেস ইনস্ট্যান্সগুলো) এখন মডিউল ইনস্ট্যান্সের নাম, যেমনbluetoothবাr_submix, ব্যবহার করে সরাসরি সার্ভিস ম্যানেজারের সাথে রেজিস্টার করা হয়। এর একমাত্র ব্যতিক্রম হলোprimaryমডিউল, যাdefaultইনস্ট্যান্স নামে রেজিস্টার হয়।
AIDL এবং HIDL অডিও HAL ম্যাপিং
পরবর্তী বিভাগগুলির সারণিগুলিতে HIDL এবং AIDL Audio HAL ইন্টারফেসগুলির মধ্যেকার ম্যাপিং দেখানো হয়েছে। ডিরেক্টরি কাঠামো সম্পর্কে আরও তথ্যের জন্য Audio HAL দেখুন।
কোর এইচএএল
সমস্ত HIDL ইন্টারফেস android.hardware.audio@NM প্যাকেজের মধ্যে থাকে, যেখানে NM Major.Minor ভার্সন বোঝানো হয়। সমস্ত AIDL ইন্টারফেস android.hardware.audio.core প্যাকেজের মধ্যে থাকে।
| HIDL API ইন্টারফেস এবং কনফিগারেশন ফাইল | AIDL API ইন্টারফেস |
|---|---|
IDevicesFactory | ServiceManager সাথে IModule নিবন্ধন। |
IDevice | IModule |
IPrimaryDevice | ITelephonyIBluetooth |
IStreamIStreamInIStreamOut | StreamDescriptorIStreamInIStreamCommonIStreamOut |
audio_policy_configuration.xmlaudio_policy_engine_configuration.xml | IConfigIModule |
| কনফিগারযোগ্য অডিও নীতি ফাইল | অ্যান্ড্রয়েড ১৪-এর জন্য HIDL ইমপ্লিমেন্টেশন ব্যবহার করুন। |
অডিও পোর্ট, ডায়নামিক প্রোফাইল, রুট এবং প্যাচ
এই সারণিতে, XML ফাইলের উপাদানগুলোকে অ্যাঙ্গেল ব্র্যাকেট ব্যবহার করে চিহ্নিত করা হয়।
| HIDL API ইন্টারফেস মেথড এবং কনফিগারেশন ফাইলের উপাদানসমূহ | AIDL API ইন্টারফেস পদ্ধতি |
|---|---|
<attachedDevices><defaultOutputDevice><mixPorts><devicePorts> | IModule.getAudioPorts |
IDevice.getAudioPortIDevice.setConnectedState | IModule.connectExternalDeviceIModule.disconnectExternalDevice |
IStream.getSupportedProfiles | IModule.connectExternalDevice |
< routes > | IModule.getAudioRoutes |
IDevice.createAudioPatchIDevice.updateAudioPatchIDevice.releaseAudioPatchIStream.getDevicesIStream.setDevicesIDevice.openInputStream এ ডিভাইসটির স্পেসিফিকেশনIDevice.openOutputStream | IModule.setAudioPatchIModule.setAudioPortConfigIModule.resetAudioPatch |
অডিও পোর্ট কনফিগারেশন এবং স্ট্রিম
| HIDL API ইন্টারফেস পদ্ধতি | AIDL API ইন্টারফেস পদ্ধতি |
|---|---|
IStream.getAudioPropertiesIStream.setAudioPropertiesIStreamIn.getAudioSource | IModule.getAudioPortConfigsIModule.setAudioPortConfig |
IDevice.openInputStreamIDevice.openOutputStreamIStreamIn.prepareForReadingIStreamOut.prepareForWritingIStream.createMmapBuffer | IModule.openInputStreamIModule.openOutputStream |
IStream.close | IStreamCommon.close |
IStreamIn.updateSinkMetadataIStreamOut.updateSourceMetadata | IStreamIn.updateMetadataIStreamOut.updateMetadata |
IStream.standby | StreamDescriptor.Command.standby |
IStream.pauseIStream.resume | StreamDescriptor.Command.pause.start |
IStream.startIStream.stop(এমএমএপি স্ট্রিম) | StreamDescriptor.Command.start অথবা .burst.pause (ইনপুট) এবং/অথবা .flush (আউটপুট) |
IStreamOut.drainIStreamOut.flush | StreamDescriptor.Command.drain.flush |
IStreamOut.setCallbackIStreamOut.clearCallback | IModule.openOutputStreamIStreamCommon.close |
IStreamOut.getPresentationPosition এবং IStreamIn.getCapturePositionIStreamOut.getLatencyIStream.getMmapPositionIStreamIn.getInputFramesLost | StreamDescriptor.Reply.observableStreamDescriptor.Reply.latencyMsStreamDescriptor.Reply.hardwareStreamDescriptor.Reply.xrunFrames |
IDevice.getInputBufferSizeIStreamOut.getLatencyIStream.getBufferSizeIStream.getFrameSizeIStream.getFrameCount | IModule.setAudioPatch , নামমাত্র লেটেন্সি এবং ন্যূনতম বাফার সাইজ হলো HAL দ্বারা ফেরত দেওয়া AudioPatch স্ট্রাকচারের অংশ। ফ্রেমে প্রকৃত বাফার সাইজ, বাইটে ফ্রেম সাইজের সাথে StreamDescriptor স্ট্রাকচারের একটি অংশ। এই দুটি সংখ্যা গুণ করে বাইটে বাফার সাইজ গণনা করা যায়। |
অডিও এফেক্টস সংযোগ
| HIDL API ইন্টারফেস পদ্ধতি | AIDL API ইন্টারফেস পদ্ধতি |
|---|---|
IDevice.addDeviceEffectIDevice.removeDeviceEffect | IModule.addDeviceEffectIModule.removeDeviceEffect |
IStream.addEffectIStream.removeEffect | IStreamCommon.addEffectIStreamCommon.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.getSupportedAudioModesIConfig.getEngineConfig |
<volumes> , অথবা<volumeGroups> , <ProductStrategies> | IConfig.getEngineConfig |
<surroundSound> | IConfig.getSurroundSoundConfig |
কনফিগারেশন ফাইল থেকে
speaker_drc_enabledসরিয়ে ফেলা হয়েছে, কারণ এই কনফিগারেশন আইটেমটি সিস্টেমের মধ্যে ব্যবহৃত হয় না। সকল ডিভাইসে অবশ্যই DRC সক্রিয় থাকতে হবে।
বৈশিষ্ট্য-সম্পর্কিত কার্যকারিতা
| HIDL API ইন্টারফেস পদ্ধতি | AIDL API ইন্টারফেস |
|---|---|
IDevice.setMasterVolumeIDevice.getMasterVolumeIDevice.setMicMuteIDevice.getMicMuteIDevice.setMasterMuteIDevice.getMasterMute | IModule.\* |
IPrimaryDevice.getTtyModeIPrimaryDevice.setTtyModeIPrimaryDevice.getHacEnabledIPrimaryDevice.setHacEnabledIPrimaryDevice.setVoiceVolume | ITelephony.TelecomConfig.\* |
IPrimaryDevice.setBtScoHeadsetDebugNameIPrimaryDevice.getBtScoNrecEnabledIPrimaryDevice.setBtScoNrecEnabledIPrimaryDevice.getBtScoWidebandEnabledIPrimaryDevice.setBtScoWidebandEnabled,IPrimaryDevice.getBtHfpEnabledIPrimaryDevice.setBtHfpEnabledIPrimaryDevice.setBtHfpSampleRateIPrimaryDevice.setBtHfpVolume | IBluetooth.ScoConfig.\*IBluetooth.HfpConfig.\* |
IPrimaryDevice.setModeIPrimaryDevice.updateRotation | ITelephony.switchAudioModeIModule.updateAudioModeIModule.updateScreenRotation |
IDevice.setScreenStateIDevice.getMicrophones | IModule.updateScreenStateIModule.getMicrophones |
IDevice.getHwAvSyncIStream.setHwAvSync | IModule.generateHwAvSyncIdIStreamCommon.updateHwAvSyncId |
IStreamIn.setGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension | IStreamIn.setHwGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension |
IStreamOut.getDualMonoModeIStreamOut.setDualMonoModeIStreamOut.getPlaybackRateParametersIStreamOut.setPlaybackRateParametersIStreamOut.selectPresentationIStreamOut.getAudioDescriptionMixLevelIStreamOut.setAudioDescriptionMixLevelIStreamOut.setLatencyModeIStreamOut.getRecommendedLatencyModes | IStreamOut.\* |
IStreamOut.setEventCallbackIStreamOut.setLatencyModeCallback | IModule.openOutputStream (কলব্যাকগুলো IStreamOutEventCallback এ একত্রিত করা হয়েছে) |
IDevice.get/setParametersIStream.get/setParameters | IModule.get/setVendorParametersIStreamCommon.get/setVendorParameters |
অপ্রচলিত পদ্ধতি
| HIDL API ইন্টারফেস পদ্ধতি | মন্তব্য |
|---|---|
IDevice.initCheckIDevice.close | HAL মডিউলটি শুধুমাত্র সফলভাবে চালু হওয়ার পরেই ServiceManager সাথে নিজেকে প্রকাশ করে। সেই মুহূর্তে, এটিকে স্থায়ী বলে গণ্য করা হয় এবং আর বন্ধ করা যায় না। |
IDevice.supportsAudioPatchesIStreamOut.supportsPauseAndResumeIStreamOut.supportsDrain | প্যাচ, পজ, রিজুম এবং ড্রেইন-এর জন্য সাপোর্ট থাকা বাধ্যতামূলক। |
IStreamOut.getRenderPositionIStreamOut.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@NM* প্যাকেজের মধ্যে থাকে, যেখানে NM হলো Major.Minor ভার্সন। সমস্ত AIDL ইন্টারফেস android.hardware.audio.effect প্যাকেজের মধ্যে থাকে।
| HIDL API ইন্টারফেস এবং কনফিগারেশন ফাইল | AIDL API ইন্টারফেস |
|---|---|
IEffectsFactory | IFactory |
IEffect | IEffect |
audio_effects.xml | IEffect |
এফেক্ট ফ্যাক্টরি
| HIDL API ইন্টারফেস (android.hardware.audio.effect@XX) | AIDL API ইন্টারফেস (অ্যান্ড্রয়েড.হার্ডওয়্যার.অডিও.ইফেক্ট) |
|---|---|
IEffectsFactory.getAllDescriptors | নাল UUID প্যারামিটার সহ IFactory.queryEffects |
IEffectsFactory.getDescriptor | UUID প্যারামিটার সহ IFactory.queryEffects |
IEffectsFactory.createEffect | IFactory.createEffect |
audio_effects.xml | IFactory.queryProcessingIFactory.queryEffects |
প্রভাব ইন্টারফেস
| HIDL API ইন্টারফেস (android.hardware.audio.effect@XX) | AIDL API ইন্টারফেস (অ্যান্ড্রয়েড.হার্ডওয়্যার.অডিও.ইফেক্ট) |
|---|---|
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 | IEffect.command এ ম্যাপ করুন,IEffect.setParameter , অথবালিগ্যাসি HIDL কমান্ডের ধরনের উপর ভিত্তি করে IEffect.getParameter |
| প্রযোজ্য নয় | IEffect.getState |
IEffect.setParameter | IEffect.setParameter |
IEffect.getParameter | IEffect.getParameter |
প্রভাব কমান্ড
| HIDL API ইন্টারফেস (android.hardware.audio.effect@XX) | AIDL API ইন্টারফেস (অ্যান্ড্রয়েড.হার্ডওয়্যার.অডিও.ইফেক্ট) |
|---|---|
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 | প্রভাবে বাতিল AIDL HAL |
EFFECT_CMD_SET_PARAM_COMMIT | প্রভাবে বাতিল AIDL HAL |
EFFECT_CMD_SET_CONFIGEFFECT_CMD_SET_PARAMEFFECT_CMD_SET_DEVICEEFFECT_CMD_SET_VOLUMEEFFECT_CMD_SET_AUDIO_MODEEFFECT_CMD_SET_CONFIG_REVERSEEFFECT_CMD_SET_INPUT_DEVICEEFFECT_CMD_SET_FEATURE_CONFIGEFFECT_CMD_SET_AUDIO_SOURCE | IEffect.setParameter |
EFFECT_CMD_GET_PARAMEFFECT_CMD_GET_CONFIGEFFECT_CMD_GET_CONFIG_REVERSEEFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGSEFFECT_CMD_GET_FEATURE_CONFIGVISUALIZER_CMD_MEASUREEFFECT_CMD_FIRST_PROPRIETARY( VISUALIZER_CMD_CAPTURE এর অনুরূপ) | IEffect.getParameter |
EFFECT_CMD_OFFLOAD | অপ্রচলিত। AIDL-এ, অফলোড এবং নন-অফলোড মোড স্যুইচিং ফ্রেমওয়ার্কের মধ্যেই পরিচালনা করা হয়। |
EFFECT_CMD_DUMP | অন্তর্নির্মিত বাইন্ডার ট্রানজ্যাকশন AIBinder_dump দ্বারা পরিচালিত। |
কমন এফেক্ট প্যারামিটারের সংজ্ঞা
| HIDL সংজ্ঞা (android.hardware.audio.effect@XX) | AIDL সংজ্ঞা |
|---|---|
Types.hal | Flags.aidlParameter.aidl |
নির্দিষ্ট প্রভাবের সংজ্ঞা
| HIDL API ইন্টারফেস (android.hardware.audio.effect@XX) | AIDL API ইন্টারফেস (অ্যান্ড্রয়েড.হার্ডওয়্যার.অডিও.ইফেক্ট) |
|---|---|
I $EffectType$ .hal | $EffectType$ .aidl |