Android 14 और इसके बाद के वर्शन में, पार्टनर और SoC वेंडर हम एचआईडीएल एचएएल को लागू करने के मौजूदा तरीके को एआईडीएल एचएएल से बदलने के लिए प्रोत्साहित करते हैं लागू करना.
HIDL ऑडियो एचएएल से आसानी से ट्रांज़िशन इसलिए, आपको इस पेज पर कुछ अहम फ़र्क़ हाइलाइट किए गए हैं. यह पेज, AIDL और HIDL इंटरफ़ेस के बीच की मैपिंग भी दिखाता है ऑडियो एचएएल.
एआईडीएल और HIDL ऑडियो एचएएल लागू करने के बीच का अंतर
एचआईडीएल स्ट्रक्चर और एआईडीएल स्ट्रक्चर के बीच मुख्य अंतर ये हैं अनुसरण करता है:
AIDL Audio Core HAL में,
IConfig
इंटरफ़ेस को पूरे सिस्टम की जगह इस्तेमाल करने के लिए लॉन्च किया गया है HIDL HAL में एक्सएमएल फ़ाइलों में पैरामीटर. फ़्रेमवर्क ये पैरामीटर वेंडर कॉन्फ़िगरेशन फ़ाइल के बजाय कोर HAL से लिए जाते हैं. उदाहरण के लिए, यूज़र कंट्रोल के लिए, सराउंड फ़ॉर्मैट की सूची दिखाई जाती है इस कंपनी की तरफ़ से उपलब्ध कराया जाता हैIConfig.getSurroundSoundConfig
शामिल हैं.AIDL ऑडियो इफ़ेक्ट एचएएल में, HIDL इफ़ेक्ट HAL की एक्सएमएल फ़ाइलों में तय किया गया
effectProxy
लॉजिक, मदद ली जा सकती है. यह ऑडियो फ़्रेमवर्क, सिस्टम का इस्तेमाल करता हैIFactory.queryEffects
और सभी इफ़ेक्ट को प्रोसेस करने के लिएIFactory.queryProcessing
.अलग-अलग तरह के ऑडियो डिवाइसों के लिए, डिवाइस शब्द के इस्तेमाल से जुड़े भ्रम से बचने के लिए, एआईडीएल ऑडियो एचएएल में HIDL ऑडियो HAL के
IDevice
का नाम बदलकर,IModule
कर दिया गया है.एआईडीएल ऑडियो एचएएल में
IPrimaryDevice
की जगह ले ली गई है. मौजूदा ऑडियो के बारे में अपडेट मोड और स्क्रीन रोटेशन की सुविधा हरIModule
इंस्टेंस पर भेजी जाती है. पैरामीटर में ब्लूटूथ सिंक्रोनस कनेक्शन ओरिएंटेड (BT SCO) और हैंड्स-फ़्री से संबंधित प्रोफ़ाइल (एचएफ़पी) को एक खासIBluetooth
मैनेज करता है इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है. खास तौर पर बनाया गयाITelephony
इंटरफ़ेस, टेलीफ़ोनी की मदद से काम करता है नियंत्रण. इन दोनों इंटरफ़ेस के इंस्टेंस यहां से लिए जा सकते हैंIModule
इंटरफ़ेस का प्राइमरी इंस्टेंस. तुलना की टेबल यहां देखें कोर एचएएल और सुविधा से जुड़ी सुविधाएं हमारा वीडियो देखें.रिडंडंसी से बचने के लिए, AIDL Audio HAL से
IDevicesFactory
को हटा दिया गया है. एचएएल अब मॉड्यूल (यानी,IModule
इंटरफ़ेस इंस्टेंस) सीधे तौर पर रजिस्टर किए गए हैं के लिए अपने नामों का उपयोग करके सेवा मैनेजर से संपर्क करना चाहते हैं, जैसे किbluetooth
याr_submix
. अकेला अपवादprimary
मॉड्यूल है जो इंस्टेंस नामdefault
के तहत रजिस्टर करता है.
एआईडीएल और HIDL ऑडियो एचएएल मैपिंग
नीचे दिए गए सेक्शन में मौजूद टेबल में, HIDL और एआईडीएल के बीच मैपिंग को दिखाया गया है ऑडियो HAL इंटरफ़ेस. यहां जाएं: ऑडियो HAL README फ़ाइल पर जाएं.
कोर एचएएल
सभी HIDL इंटरफ़ेस android.hardware.audio@N.M
पैकेज में होते हैं, जहां
N.M
, Major.Minor वर्शन को दिखाता है. सभी एआईडीएल इंटरफ़ेस
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 लागू करें. |
ऑडियो पोर्ट, डाइनैमिक प्रोफ़ाइलें, रूट, और पैच
इस टेबल में, एक्सएमएल फ़ाइलों के एलिमेंट को ऐंगल ब्रैकेट की मदद से दिखाया जाता है.
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
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 , नॉमिनल इंतज़ार का समय, और कम से कम बफ़र
साइज़, एचएएल से मिले AudioPatch स्ट्रक्चर का हिस्सा हैं.
फ़्रेम में असल बफ़र साइज़, StreamDescriptor का हिस्सा होता है
साथ ही, बाइट में फ़्रेम साइज़. बफ़र का साइज़ बाइट में
इन दोनों संख्याओं को गुणा करके कैलकुलेट किया जाता है. |
ऑडियो इफ़ेक्ट कनेक्शन
HIDL API इंटरफ़ेस के तरीके | AIDL API इंटरफ़ेस के तरीके |
---|---|
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
के ज़रिए दी जानी चाहिए.
हालांकि, एआईडीएल पर ट्रांज़िशन की प्रक्रिया आसान बनाने के लिए, वेंडर अब भी इनका इस्तेमाल कर सकते हैं
वही एक्सएमएल फ़ाइलें हों जिनका इस्तेमाल उन्होंने पूरे सिस्टम का कॉन्फ़िगरेशन सेट करने के लिए किया था. कॉन्टेंट बनाने
IConfig
को लागू करने की प्रक्रिया में, इसके लिए ज़रूरी कोड शामिल है
यह 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
को कॉन्फ़िगरेशन फ़ाइल से इस तौर पर हटाया गया है सिस्टम के अंदर, इस कॉन्फ़िगरेशन आइटम का इस्तेमाल नहीं किया जाता. सभी डिवाइसों में डीआरसी की सुविधा चालू की गई.<a href="#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.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 |
एचएएल मॉड्यूल खुद को ServiceManager के साथ सिर्फ़
सफलतापूर्वक शुरू किया गया. उस समय, इसे स्थायी
इसे बंद नहीं किया जा सकता. |
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain |
पैच, रोकें, रिज़्यूमे, और ड्रेन के लिए सहायता ज़रूरी है. |
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp |
'पुरानी है' के तौर पर मार्क करें. |
वेंडर एक्सटेंशन
HIDL API में, वेंडर एक्सटेंशन getParameters
या
IDevice
और IStream
इंटरफ़ेस से setParameters
तरीके. ये
तरीकों में आर्बिट्रेरी स्ट्रिंग स्वीकार की जाती हैं.
AIDL API में, इससे जुड़े तरीके होते हैं, जैसे कि getVendorParameters
या setVendorParameters
, जो मैन्युअल तरीके से Parcelable
इंस्टेंस लेते हैं
ParcelableHolders
के अंदर एनकैप्सुलेशन.
अन्य बदलाव
अन्य सामान्य बदलाव यहां दिए गए हैं:
एचएएल एपीआई की जांच करने की क्षमता को बेहतर बनाने के लिए, एआईडीएल वर्शन में हम डीबग करने के ऐसे विकल्प शुरू करना जिनका इस्तेमाल वीटीएस टेस्ट में किया जाता है और ये उपलब्ध हैं पार्सलेबल
ModuleDebug
से होकर गुज़र जाएगा. ये विकल्प, एचएएल को यह निर्देश देते हैं कि वे कुछ सुविधाओं (जैसे, बाहरी डिवाइसों के कनेक्शन) को एम्युलेट कर सकें, इसके लिए मैन्युअल तरीके से रुकावट और बाहरी टेस्टिंग की ज़रूरत होती है. उपकरण.सिस्टम प्रॉपर्टी की वैल्यू सबमिट होने पर, एचएएल सेवाओं को रीस्टार्ट करना होगा
sys.audio.restart.hal
को1
पर सेट किया गया. रीस्टार्ट इसके ज़रिए होता हैaudioserver.rc
. एचएएल को लागू करते समय, एचएएल सेवा के उस नाम का इस्तेमाल करें जो यहां दी गई सूची में मौजूद हैaudioserver.rc
फ़ाइल. Android 14 में,vendor.audio-hal-aidl
को खास तौर पर, GA4 के एआईडीएल वर्शन के लिए जोड़ा गया है हैल.
इफ़ेक्ट एचएएल
सभी HIDL इंटरफ़ेस 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 एपीआई इंटरफ़ेस (android.hardware.audio.effect@X.X) |
AIDL एपीआई इंटरफ़ेस (android.hardware.audio.effect) |
---|---|
IEffectsFactory.getAllDescriptors |
शून्य यूयूआईडी पैरामीटर वाला IFactory.queryEffects |
IEffectsFactory.getDescriptor |
यूयूआईडी पैरामीटर वाला IFactory.queryEffects |
IEffectsFactory.createEffect |
IFactory.createEffect |
audio_effects.xml |
IFactory.queryProcessing
IFactory.queryEffects |
इफ़ेक्ट इंटरफ़ेस
HIDL एपीआई इंटरफ़ेस (android.hardware.audio.effect@X.X) |
AIDL एपीआई इंटरफ़ेस (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 , लेगसी HIDL के टाइप पर आधारित है
निर्देश
|
लागू नहीं | IEffect.getState |
IEffect.setParameter |
IEffect.setParameter |
IEffect.getParameter |
IEffect.getParameter |
इफ़ेक्ट से जुड़े निर्देश
HIDL एपीआई इंटरफ़ेस (android.hardware.audio.effect@X.X) |
AIDL एपीआई इंटरफ़ेस (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 |
अब काम नहीं करता.
एआईडीएल में, ऑफ़लोड और नॉन-ऑफ़लोड मोड के स्विच फ़्रेमवर्क शामिल है. |
EFFECT_CMD_DUMP |
इसे बिल्ट-इन बाइंडर ट्रांज़ैक्शन AIBinder_dump से मैनेज किया जाता है. |
कॉमन इफ़ेक्ट के पैरामीटर की परिभाषा
HIDL डेफ़िनिशन (android.hardware.audio.effect@X.X) |
एआईडीएल की परिभाषा |
---|---|
Types.hal |
Flags.aidl
Parameter.aidl
|
खास इफ़ेक्ट की परिभाषा
HIDL एपीआई इंटरफ़ेस (android.hardware.audio.effect@X.X) |
AIDL एपीआई इंटरफ़ेस (android.hardware.audio.effect) |
---|---|
I$EffectType$.hal |
$EffectType$.aidl |