AIDL এবং HIDL অডিও HAL তুলনা

অ্যান্ড্রয়েড ১৪ থেকে শুরু করে, পার্টনার এবং এসওসি ভেন্ডরদের বর্তমান 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-এর IDevice AIDL 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 ITelephony
IBluetooth
IStream
IStreamIn
IStreamOut
StreamDescriptor
IStreamIn
IStreamCommon
IStreamOut
audio_policy_configuration.xml
audio_policy_engine_configuration.xml
IConfig
IModule
কনফিগারযোগ্য অডিও নীতি ফাইল অ্যান্ড্রয়েড ১৪-এর জন্য HIDL ইমপ্লিমেন্টেশন ব্যবহার করুন।

অডিও পোর্ট, ডায়নামিক প্রোফাইল, রুট এবং প্যাচ

এই সারণিতে, XML ফাইলের উপাদানগুলোকে অ্যাঙ্গেল ব্র্যাকেট ব্যবহার করে চিহ্নিত করা হয়।

HIDL API ইন্টারফেস মেথড এবং কনফিগারেশন ফাইলের উপাদানসমূহ AIDL API ইন্টারফেস পদ্ধতি
<attachedDevices>
<defaultOutputDevice>
<mixPorts>
<devicePorts>
IModule.getAudioPorts
IDevice.getAudioPort
IDevice.setConnectedState
IModule.getAudioPort
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
(এমএমএপি স্ট্রিম)
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

  1. কনফিগারেশন ফাইল থেকে speaker_drc_enabled সরিয়ে ফেলা হয়েছে, কারণ এই কনফিগারেশন আইটেমটি সিস্টেমের মধ্যে ব্যবহৃত হয় না। সকল ডিভাইসে অবশ্যই DRC সক্রিয় থাকতে হবে।

বৈশিষ্ট্য-সম্পর্কিত কার্যকারিতা

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.setGain
IStreamIn.setMicrophoneDirection
IStreamIn.setMicrophoneFieldDimension
IStreamIn.setHwGain
IStreamIn.setMicrophoneDirection
IStreamIn.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.initCheck
IDevice.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@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.queryProcessing
IFactory.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_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@XX)
AIDL সংজ্ঞা
Types.hal Flags.aidl
Parameter.aidl

নির্দিষ্ট প্রভাবের সংজ্ঞা

HIDL API ইন্টারফেস
(android.hardware.audio.effect@XX)
AIDL API ইন্টারফেস
(অ্যান্ড্রয়েড.হার্ডওয়্যার.অডিও.ইফেক্ট)
I $EffectType$ .hal $EffectType$ .aidl