Android 14 से, पार्टनर और एसओसी वेंडर को मौजूदा एचआईडीएल एचएएल को एआईडीएल एचएएल से बदलने का सुझाव दिया जाता है.
एचआईडीएल ऑडियो एचएएल से एआईडीएल ऑडियो एचएएल पर आसानी से स्विच करने के लिए, इस पेज पर कुछ मुख्य अंतरों के बारे में बताया गया है. इस पेज पर, ऑडियो एचएएल के लिए एआईडीएल और एचआईडीएल इंटरफ़ेस के बीच मैपिंग भी दिखाई गई है.
AIDL और HIDL ऑडियो HAL को लागू करने के बीच अंतर
HIDL और AIDL के स्ट्रक्चर के बीच मुख्य अंतर यहां दिए गए हैं:
- एआईडीएल ऑडियो कोर एचएएल में, - IConfigइंटरफ़ेस को एचआईडीएल एचएएल में एक्सएमएल फ़ाइलों में मौजूद सिस्टम-वाइड पैरामीटर के विकल्प के तौर पर पेश किया गया है. फ़्रेमवर्क, इन पैरामीटर को वेंडर कॉन्फ़िगरेशन फ़ाइल के बजाय Core HAL से पढ़ता है. उदाहरण के लिए, उपयोगकर्ता कंट्रोल के लिए उपलब्ध कराए गए सराउंड फ़ॉर्मैट की सूची, Core HAL में- IConfig.getSurroundSoundConfigतरीके से दी जाती है.- एआईडीएल ऑडियो इफ़ेक्ट एचएएल में, एचआईडीएल इफ़ेक्ट एचएएल की एक्सएमएल फ़ाइलों में तय किए गए - effectProxyलॉजिक को ऑडियो फ़्रेमवर्क में ले जाया जाता है. ऑडियो फ़्रेमवर्क, सिस्टम में मौजूद सभी इफ़ेक्ट इंस्टेंस के लिए- IFactory.queryEffectsका इस्तेमाल करके क्वेरी करता है. साथ ही, सभी इफ़ेक्ट प्रोसेसिंग के लिए- IFactory.queryProcessingका इस्तेमाल करके क्वेरी करता है.
- ऑडियो डिवाइस टाइप के लिए डिवाइस शब्द के इस्तेमाल से होने वाले भ्रम से बचने के लिए, HIDL ऑडियो एचएएल में - IDeviceका नाम बदलकर AIDL ऑडियो एचएएल में- IModuleकर दिया गया है.
- AIDL ऑडियो HAL, - IPrimaryDeviceकी जगह लेता है. फ़्रेमवर्क, मौजूदा ऑडियो मोड और स्क्रीन रोटेशन के बारे में अपडेट, हर- IModuleइंस्टेंस को भेजता है.- IBluetoothइंटरफ़ेस, ब्लूटूथ सिंक्रोनस कनेक्शन ओरिएंटेड (बीटी एससीओ) और हैंड्स-फ़्री प्रोफ़ाइल (एचएफ़पी) से जुड़े पैरामीटर को मैनेज करता है.- ITelephonyइंटरफ़ेस में, टेलीफ़ोनी से जुड़े कंट्रोल होते हैं.- IModuleइंटरफ़ेस के मुख्य इंस्टेंस से, इन दोनों इंटरफ़ेस के इंस्टेंस वापस पाए जा सकते हैं. ज़्यादा जानकारी के लिए, कोर HAL और सुविधा से जुड़ी फ़ंक्शनैलिटी की तुलना करने वाली टेबल देखें.
- रिडंडेंसी से बचने के लिए, - IDevicesFactoryको AIDL ऑडियो HAL में हटा दिया गया है. HAL मॉड्यूल (यानी कि- IModuleइंटरफ़ेस इंस्टेंस) अब सीधे तौर पर सर्विस मैनेजर के साथ रजिस्टर किए जाते हैं. इसके लिए, मॉड्यूल इंस्टेंस के नामों का इस्तेमाल किया जाता है. जैसे,- bluetoothया- r_submix. हालांकि,- primaryमॉड्यूल को- defaultइंस्टेंस के नाम से रजिस्टर किया जाता है.
एआईडीएल और एचआईडीएल ऑडियो एचएएल मैपिंग
यहां दिए गए सेक्शन में मौजूद टेबल में, HIDL और AIDL ऑडियो HAL इंटरफ़ेस के बीच मैपिंग दिखाई गई है. डायरेक्ट्री के स्ट्रक्चर के बारे में ज़्यादा जानकारी के लिए, ऑडियो एचएएल देखें.
कोर HAL
सभी एचआईडीएल इंटरफ़ेस, android.hardware.audio@N.M पैकेज में होते हैं. यहां N.M, Major.Minor वर्शन को दिखाता है. सभी एआईडीएल इंटरफ़ेस, 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 | 
| ऑडियो से जुड़ी नीति की कॉन्फ़िगर की जा सकने वाली फ़ाइलें | Android 14 के लिए, एचआईडीएल लागू करने की सुविधा का इस्तेमाल करें. | 
ऑडियो पोर्ट, डाइनैमिक प्रोफ़ाइलें, रूट, और पैच
इस टेबल में, एक्सएमएल फ़ाइलों के एलिमेंट को ऐंगल ब्रैकेट का इस्तेमाल करके दिखाया गया है.
| HIDL API इंटरफ़ेस के तरीके और कॉन्फ़िगरेशन फ़ाइलों के एलिमेंट | AIDL एपीआई इंटरफ़ेस के तरीके | 
|---|---|
| <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 एपीआई इंटरफ़ेस के तरीके | 
|---|---|
| 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 एपीआई इंटरफ़ेस के तरीके | 
|---|---|
| IDevice.addDeviceEffectIDevice.removeDeviceEffect | IModule.addDeviceEffectIModule.removeDeviceEffect | 
| IStream.addEffectIStream.removeEffect | IStreamCommon.addEffectIStreamCommon.removeEffect | 
पूरे सिस्टम के लिए कॉन्फ़िगरेशन
सिस्टम-वाइड कॉन्फ़िगरेशन, जिसे पहले ऑडियो नीति की एक्सएमएल कॉन्फ़िगरेशन फ़ाइलों (जैसे कि audio_policy_configuration.xml और audio_policy_engine_configuration.xml) में तय किया गया था उसे IConfig के ज़रिए उपलब्ध कराना होगा.
हालांकि, AIDL पर स्विच करने की प्रोसेस को आसान बनाने के लिए, वेंडर के पास अब भी उन एक्सएमएल फ़ाइलों का इस्तेमाल करने का विकल्प है जिनका इस्तेमाल वे पहले सिस्टम-वाइड कॉन्फ़िगरेशन सेट करने के लिए करते थे. IConfig के लिए रेफ़रंस इंप्लीमेंटेशन में, AIDL डेटा टाइप का इस्तेमाल करके एक्सएमएल फ़ाइल से जानकारी दिखाने के लिए ज़रूरी कोड शामिल होता है. इससे एक्सएमएल को AIDL में बदलने में आसानी होती है.
| HIDL कॉन्फ़िगरेशन फ़ाइल के एलिमेंट | AIDL एपीआई इंटरफ़ेस के तरीके | 
|---|---|
| <globalConfiguration><speaker_drc_enabled><call_screen_mode_supported><engine_library> | इन्हें दो अलग-अलग तरीकों में बांटा गया है: ITelephony.getSupportedAudioModesIConfig.getEngineConfig | 
| <volumes>या<volumeGroups>,<ProductStrategies> | IConfig.getEngineConfig | 
| <surroundSound> | IConfig.getSurroundSoundConfig | 
- 
  speaker_drc_enabledको कॉन्फ़िगरेशन फ़ाइल से हटा दिया गया है, क्योंकि इस कॉन्फ़िगरेशन आइटम का इस्तेमाल सिस्टम में नहीं किया जाता. सभी डिवाइसों पर डीआसी की सुविधा चालू होनी चाहिए. <ahref="#fnref1" rev="footnote"> </ahref="#fnref1">
सुविधा से जुड़ी फ़ंक्शनैलिटी
| HIDL 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 | पुराना हो गया है. | 
वेंडर एक्सटेंशन
एचआईडीएल एपीआई में, वेंडर एक्सटेंशन को IDevice और IStream इंटरफ़ेस के getParameters या setParameters तरीकों का इस्तेमाल करके लागू किया जाता है. ये तरीके, आर्बिट्रेरी स्ट्रिंग स्वीकार करते हैं.
AIDL API में, इससे जुड़े तरीके मौजूद हैं. जैसे, getVendorParameters या setVendorParameters. ये ParcelableHolders में इनकैप्सुलेशन का इस्तेमाल करके, मनमाने Parcelable इंस्टेंस लेते हैं.
अन्य बदलाव
अन्य सामान्य बदलाव यहां दिए गए हैं:
- एचएएल एपीआई की जांच करने की सुविधा को बेहतर बनाने के लिए, AIDL वर्शन में हम डीबग करने के विकल्प उपलब्ध कराते हैं. इनका इस्तेमाल VTS टेस्ट करते हैं. ये - ModuleDebugपार्सल करने लायक ऑब्जेक्ट के ज़रिए उपलब्ध होते हैं. इन विकल्पों से एचएएल को कुछ सुविधाओं (जैसे, बाहरी डिवाइसों को कनेक्ट करना) को एमुलेट करने का निर्देश मिलता है. इसके लिए, मैन्युअल तरीके से कार्रवाई करने और बाहरी टेस्टिंग उपकरण का इस्तेमाल करने की ज़रूरत होती है.
- जब फ़्रेमवर्क या वीटीएस, - sys.audio.restart.halसिस्टम प्रॉपर्टी को- 1पर सेट करता है, तब HAL सेवाओं को रीस्टार्ट करना ज़रूरी होता है.- audioserver.rcफ़ाइल, रीस्टार्ट को मैनेज करती है. एचएएल को लागू करते समय,- audioserver.rcफ़ाइल में दिए गए एचएएल सेवा के सही नाम का इस्तेमाल करें. Android 14 में,- vendor.audio-hal-aidlनाम को खास तौर पर एचएएल के एआईडीएल वर्शन के लिए जोड़ा गया है.
इफ़ेक्ट एचएएल
सभी एचआईडीएल इंटरफ़ेस, android.hardware.audio.effect@N.M* पैकेज में होते हैं. यहां N.M, Major.Minor वर्शन है. सभी एआईडीएल इंटरफ़ेस, android.hardware.audio.effect पैकेज में मौजूद होते हैं.
| HIDL API इंटरफ़ेस और कॉन्फ़िगरेशन फ़ाइलें | AIDL API इंटरफ़ेस | 
|---|---|
| IEffectsFactory | IFactory | 
| IEffect | IEffect | 
| audio_effects.xml | IEffect | 
इफ़ेक्ट फ़ैक्ट्री
| HIDL API इंटरफ़ेस (android.hardware.audio.effect@X.X) | AIDL API इंटरफ़ेस (android.hardware.audio.effect) | 
|---|---|
| IEffectsFactory.getAllDescriptors | IFactory.queryEffectsजिसमें UUID पैरामीटर की वैल्यू शून्य हो | 
| IEffectsFactory.getDescriptor | IFactory.queryEffectswith UUID parameter | 
| IEffectsFactory.createEffect | IFactory.createEffect | 
| audio_effects.xml | IFactory.queryProcessingIFactory.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 | लेगसी एचआईडीएल कमांड के टाइप के आधार पर, IEffect.command,IEffect.setParameterयाIEffect.getParameterपर मैप करें | 
| लागू नहीं | 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 | इफ़ेक्ट एआईडीएल एचएएल में बंद कर दिया गया है | 
| EFFECT_CMD_SET_PARAM_COMMIT | इफ़ेक्ट एआईडीएल एचएएल में बंद कर दिया गया है | 
| 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मैनेज करता है. | 
सामान्य इफ़ेक्ट पैरामीटर की परिभाषा
| एचआईडीएल डेफ़िनिशन (android.hardware.audio.effect@X.X) | एआईडीएल की परिभाषा | 
|---|---|
| Types.hal | Flags.aidlParameter.aidl | 
खास इफ़ेक्ट की परिभाषा
| HIDL API इंटरफ़ेस (android.hardware.audio.effect@X.X) | AIDL API इंटरफ़ेस (android.hardware.audio.effect) | 
|---|---|
| I$EffectType$.hal | $EffectType$.aidl | 
