Android 14 से, पार्टनर और एसओसी वेंडर को मौजूदा एचआईडीएल एचएएल को एआईडीएल एचएएल से बदलने का सुझाव दिया जाता है.
एचआईडीएल ऑडियो एचएएल से एआईडीएल ऑडियो एचएएल पर आसानी से स्विच करने के लिए, इस पेज पर कुछ मुख्य अंतरों के बारे में बताया गया है. इस पेज पर, ऑडियो एचएएल के लिए एआईडीएल और एचआईडीएल इंटरफ़ेस के बीच मैपिंग भी दिखाई गई है.
AIDL और HIDL ऑडियो HAL को लागू करने के बीच अंतर
HIDL और AIDL के स्ट्रक्चर के बीच मुख्य अंतर यहां दिए गए हैं:
एआईडीएल ऑडियो कोर एचएएल में,
IConfig
इंटरफ़ेस को एचआईडीएल एचएएल में एक्सएमएल फ़ाइलों में मौजूद सिस्टम-वाइड पैरामीटर के विकल्प के तौर पर पेश किया गया है. फ़्रेमवर्क, इन पैरामीटर को वेंडर कॉन्फ़िगरेशन फ़ाइल के बजाय Core HAL से पढ़ता है. उदाहरण के लिए, उपयोगकर्ता कंट्रोल के लिए उपलब्ध कराए गए सराउंड फ़ॉर्मैट की सूची, Core HAL मेंIConfig.getSurroundSoundConfig
तरीके से दी जाती है.एआईडीएल ऑडियो इफ़ेक्ट एचएएल में, एचआईडीएल इफ़ेक्ट एचएएल की एक्सएमएल फ़ाइलों में तय किए गए
effectProxy
लॉजिक को ऑडियो फ़्रेमवर्क में ले जाया जाता है. ऑडियो फ़्रेमवर्क, सिस्टम में मौजूद सभी इफ़ेक्ट इंस्टेंस के लिएIFactory.queryEffects
का इस्तेमाल करके क्वेरी करता है. साथ ही, सभी इफ़ेक्ट प्रोसेसिंग के लिएIFactory.queryProcessing
का इस्तेमाल करके क्वेरी करता है.ऑडियो डिवाइस टाइप के लिए डिवाइस शब्द के इस्तेमाल से होने वाले भ्रम से बचने के लिए, HIDL ऑडियो एचएएल में
IDevice
का नाम बदलकर AIDL ऑडियो एचएएल मेंIModule
कर दिया गया है.IPrimaryDevice
को एआईडीएल ऑडियो एचएएल में बदल दिया गया है. मौजूदा ऑडियो मोड और स्क्रीन रोटेशन के बारे में अपडेट, हरIModule
इंस्टेंस को भेजे जाते हैं. ब्लूटूथ सिंक्रोनस कनेक्शन ओरिएंटेड (बीटी एससीओ) और हैंड्स-फ़्री प्रोफ़ाइल (एचएफ़पी) से जुड़े पैरामीटर,IBluetooth
इंटरफ़ेस की मदद से मैनेज किए जाते हैं.ITelephony
का खास इंटरफ़ेस, टेलीफ़ोनी से जुड़े कंट्रोल उपलब्ध कराता है. इन दोनों इंटरफ़ेस के इंस्टेंस,IModule
इंटरफ़ेस के प्राइमरी इंस्टेंस से वापस पाए जा सकते हैं. ज़्यादा जानकारी के लिए, कोर HAL और सुविधा से जुड़ी फ़ंक्शनैलिटी पर तुलना के लिए दी गई टेबल देखें.रिडंडेंसी से बचने के लिए,
IDevicesFactory
को AIDL ऑडियो HAL में हटा दिया गया है. HAL मॉड्यूल (यानी किIModule
इंटरफ़ेस इंस्टेंस) अब सीधे तौर पर सर्विस मैनेजर के साथ रजिस्टर किए जाते हैं. इसके लिए, इंस्टेंस के नाम का इस्तेमाल किया जाता है. जैसे,bluetooth
याr_submix
. हालांकि,primary
मॉड्यूल कोdefault
इंस्टेंस के नाम से रजिस्टर किया जाता है.
एआईडीएल और एचआईडीएल ऑडियो एचएएल मैपिंग
यहां दिए गए सेक्शन में मौजूद टेबल में, HIDL और AIDL ऑडियो HAL इंटरफ़ेस के बीच मैपिंग दिखाई गई है. डायरेक्ट्री स्ट्रक्चर के बारे में ज़्यादा जानकारी के लिए, ऑडियो एचएएल की README फ़ाइल देखें.
कोर HAL
सभी एचआईडीएल इंटरफ़ेस, 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 API इंटरफ़ेस के तरीके और कॉन्फ़िगरेशन फ़ाइलों के एलिमेंट | AIDL एपीआई इंटरफ़ेस के तरीके |
---|---|
<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 एपीआई इंटरफ़ेस के तरीके |
---|---|
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
IStream.start IStream.stop |
StreamDescriptor.Command.pause .start
.start .drain |
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 एपीआई इंटरफ़ेस के तरीके |
---|---|
IDevice.addDeviceEffect
IDevice.removeDeviceEffect |
IModule.addDeviceEffect
IModule.removeDeviceEffect |
IStream.addEffect
IStream.removeEffect |
IStreamCommon.addEffect
IStreamCommon.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.getSupportedAudioModes
IConfig.getEngineConfig |
<volumes> या
<volumeGroups> , <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
speaker_drc_enabled
को कॉन्फ़िगरेशन फ़ाइल से हटा दिया गया है, क्योंकि इस कॉन्फ़िगरेशन आइटम का इस्तेमाल सिस्टम में नहीं किया जाता. सभी डिवाइसों पर डीआसी की सुविधा चालू होनी चाहिए. <ahref="#fnref1" rev="footnote"> </ahref="#fnref1">
सुविधा से जुड़ी फ़ंक्शनैलिटी
HIDL 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 |
पुराना हो गया है. |
वेंडर एक्सटेंशन
एचआईडीएल एपीआई में, वेंडर एक्सटेंशन को IDevice
और IStream
इंटरफ़ेस के getParameters
या setParameters
तरीकों का इस्तेमाल करके लागू किया जाता है. ये तरीके, आर्बिट्रेरी स्ट्रिंग स्वीकार करते हैं.
AIDL API में, इससे जुड़े तरीके मौजूद हैं. जैसे, getVendorParameters
या setVendorParameters
. ये ParcelableHolders
में इनकैप्सुलेशन का इस्तेमाल करके, मनमाने Parcelable
इंस्टेंस लेते हैं.
अन्य बदलाव
अन्य सामान्य बदलाव यहां दिए गए हैं:
एचएएल एपीआई की जांच करने की सुविधा को बेहतर बनाने के लिए, AIDL वर्शन में हम डीबग करने के विकल्प उपलब्ध कराते हैं. इनका इस्तेमाल VTS टेस्ट करते हैं. ये
ModuleDebug
पार्सल करने लायक ऑब्जेक्ट के ज़रिए उपलब्ध होते हैं. इन विकल्पों से एचएएल को कुछ सुविधाओं (जैसे, बाहरी डिवाइसों को कनेक्ट करना) को एमुलेट करने का निर्देश मिलता है. इसके लिए, मैन्युअल तरीके से कार्रवाई करने और बाहरी टेस्टिंग उपकरण का इस्तेमाल करने की ज़रूरत होती है.जब सिस्टम प्रॉपर्टी
sys.audio.restart.hal
की वैल्यू को1
पर सेट किया जाता है, तब HAL सेवाओं को रीस्टार्ट करना ज़रूरी होता है. रीस्टार्टaudioserver.rc
के ज़रिए किया जाता है. HAL लागू करते समय,audioserver.rc
फ़ाइल में दिए गए HAL सेवा के सही नाम का इस्तेमाल करें. 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.queryEffects with UUID parameter |
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 |
लेगसी एचआईडीएल कमांड के टाइप के आधार पर, 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_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 मैनेज करता है. |
सामान्य इफ़ेक्ट पैरामीटर की परिभाषा
एचआईडीएल डेफ़िनिशन (android.hardware.audio.effect@X.X) |
एआईडीएल की परिभाषा |
---|---|
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 |