एंड्रॉइड 14 से शुरू करके, भागीदारों और एसओसी विक्रेताओं को वर्तमान एचआईडीएल एचएएल कार्यान्वयन को एआईडीएल एचएएल कार्यान्वयन के साथ बदलने के लिए प्रोत्साहित किया जाता है।
एचआईडीएल ऑडियो एचएएल से एआईडीएल ऑडियो एचएएल में सहज संक्रमण की सुविधा के लिए, इस पृष्ठ पर कुछ प्रमुख अंतरों पर प्रकाश डाला गया है। यह पृष्ठ ऑडियो एचएएल के लिए एआईडीएल और एचआईडीएल इंटरफेस के बीच मैपिंग भी दिखाता है।
एआईडीएल और एचआईडीएल ऑडियो एचएएल कार्यान्वयन के बीच अंतर
एचआईडीएल संरचना और एआईडीएल संरचना के बीच मुख्य अंतर इस प्रकार हैं:
AIDL ऑडियो कोर HAL में,
IConfig
इंटरफ़ेस को HIDL HAL में XML फ़ाइलों में सिस्टम-वाइड पैरामीटर के प्रतिस्थापन के रूप में पेश किया गया है। फ़्रेमवर्क इन मापदंडों को विक्रेता कॉन्फ़िगरेशन फ़ाइल के बजाय कोर एचएएल से पढ़ता है। उदाहरण के तौर पर, उपयोगकर्ता नियंत्रण के लिए सामने आए सराउंड फॉर्मेट की सूची कोर एचएएल मेंIConfig.getSurroundSoundConfig
विधि द्वारा प्रदान की गई है।AIDL ऑडियो इफेक्ट्स HAL में, HIDL इफेक्ट्स HAL में XML फ़ाइलों में परिभाषित
effectProxy
लॉजिक को ऑडियो फ्रेमवर्क में ले जाया जाता है। ऑडियो फ्रेमवर्कIFactory.queryEffects
उपयोग करके सिस्टम में सभी प्रभाव उदाहरणों औरIFactory.queryProcessing
उपयोग करके सभी प्रभाव प्रसंस्करणों पर सवाल उठाता है।ऑडियो डिवाइस प्रकारों के लिए डिवाइस शब्द के उपयोग में भ्रम से बचने के लिए, HIDL ऑडियो HAL में
IDevice
नाम बदलकर AIDL ऑडियो HAL मेंIModule
कर दिया गया है।AIDL ऑडियो HAL में
IPrimaryDevice
बदल दिया गया है। वर्तमान ऑडियो मोड और स्क्रीन रोटेशन के बारे में अपडेट प्रत्येकIModule
इंस्टेंस पर भेजे जाते हैं। ब्लूटूथ सिंक्रोनस कनेक्शन ओरिएंटेड (बीटी एससीओ) और हैंड्स-फ्री प्रोफाइल (एचएफपी) से संबंधित पैरामीटर एक समर्पितIBluetooth
इंटरफ़ेस द्वारा नियंत्रित किए जाते हैं। एक समर्पितITelephony
इंटरफ़ेस टेलीफोनी-विशिष्ट नियंत्रण प्रदान करता है। इन दोनों इंटरफ़ेस के उदाहरणIModule
इंटरफ़ेस के प्राथमिक उदाहरण से प्राप्त किए जा सकते हैं। अधिक जानकारी के लिए कोर एचएएल और फ़ीचर-संबंधित कार्यक्षमता पर तुलना तालिकाएँ देखें।अतिरेक से बचने के लिए AIDL ऑडियो HAL में
IDevicesFactory
को हटा दिया गया है। एचएएल मॉड्यूल (अर्थात,IModule
इंटरफ़ेस इंस्टेंस) अब उदाहरण के नाम, जैसेbluetooth
याr_submix
के लिए उनके नाम का उपयोग करके सीधे सेवा प्रबंधक के साथ पंजीकृत हैं। एकमात्र अपवादprimary
मॉड्यूल है जो इंस्टेंस नामdefault
के तहत पंजीकृत होता है।
एआईडीएल और एचआईडीएल ऑडियो एचएएल मैपिंग
निम्नलिखित अनुभागों की तालिकाएँ HIDL और AIDL ऑडियो HAL इंटरफ़ेस के बीच मैपिंग दिखाती हैं। निर्देशिका संरचना पर अधिक जानकारी के लिए ऑडियो HAL README फ़ाइल देखें।
कोर एचएएल
सभी HIDL इंटरफ़ेस android.hardware.audio@NM
पैकेज के भीतर हैं, जहाँ NM
Major.Minor संस्करण को दर्शाता है। सभी एआईडीएल इंटरफेस android.hardware.audio.core
पैकेज के भीतर हैं।
HIDL 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 कार्यान्वयन का उपयोग करें। |
ऑडियो पोर्ट, डायनामिक प्रोफाइल, रूट और पैच
इस तालिका में, XML फ़ाइलों के तत्वों को कोण कोष्ठक का उपयोग करके निर्दिष्ट किया गया है।
HIDL 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 |
ऑडियो पोर्ट कॉन्फ़िगरेशन और स्ट्रीम
एचआईडीएल एपीआई इंटरफ़ेस विधियाँ | एआईडीएल एपीआई इंटरफ़ेस विधियाँ |
---|---|
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 संरचना का हिस्सा है। बाइट्स में बफ़र आकार की गणना इन दो संख्याओं को गुणा करके की जा सकती है। |
ऑडियो प्रभाव कनेक्शन
एचआईडीएल एपीआई इंटरफ़ेस विधियाँ | एआईडीएल एपीआई इंटरफ़ेस विधियाँ |
---|---|
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
के माध्यम से प्रदान किया जाना चाहिए। हालाँकि, एआईडीएल में संक्रमण को आसान बनाने के लिए, विक्रेताओं के पास अभी भी उन्हीं XML फ़ाइलों का उपयोग करने का विकल्प है जो वे पहले सिस्टम-वाइड कॉन्फ़िगरेशन सेट करने के लिए उपयोग करते थे। IConfig
के संदर्भ कार्यान्वयन में AIDL डेटा प्रकारों का उपयोग करके XML फ़ाइल से जानकारी प्रस्तुत करने के लिए आवश्यक कोड शामिल है, जो XML से AIDL में रूपांतरण की सुविधा प्रदान करता है।
HIDL कॉन्फ़िगरेशन फ़ाइल तत्व | एआईडीएल एपीआई इंटरफ़ेस विधियाँ |
---|---|
<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
कॉन्फ़िगरेशन फ़ाइल से हटा दिया गया है क्योंकि सिस्टम के भीतर इस कॉन्फ़िगरेशन आइटम का उपयोग नहीं किया जाता है। सभी उपकरणों में DRC सक्षम होना चाहिए।
सुविधा-संबंधी कार्यक्षमता
एचआईडीएल एपीआई इंटरफ़ेस विधियाँ | एआईडीएल एपीआई इंटरफ़ेस |
---|---|
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 |
अप्रचलित तरीके
एचआईडीएल एपीआई इंटरफ़ेस विधियाँ | टिप्पणियाँ |
---|---|
IDevice.initCheck IDevice.close | एचएएल मॉड्यूल सफल आरंभीकरण पर ही ServiceManager के साथ स्वयं को प्रकाशित करता है। उस समय, इसे स्थायी माना जाता है और इसे बंद नहीं किया जा सकता है। |
IDevice.supportsAudioPatches IStreamOut.supportsPauseAndResume IStreamOut.supportsDrain | पैच, पॉज़, रेज़्युमे और ड्रेन के लिए समर्थन अनिवार्य है। |
IStreamOut.getRenderPosition IStreamOut.getNextWriteTimestamp | अप्रचलित। |
विक्रेता एक्सटेंशन
HIDL API में, विक्रेता एक्सटेंशन को IDevice
और IStream
इंटरफेस से getParameters
या setParameters
विधियों का उपयोग करके कार्यान्वित किया जाता है। ये विधियाँ मनमानी स्ट्रिंग स्वीकार करती हैं। एआईडीएल एपीआई में, संबंधित विधियां हैं, जैसे कि getVendorParameters
या setVendorParameters
, जो ParcelableHolders
के भीतर एनकैप्सुलेशन का उपयोग करके मनमाने ढंग से Parcelable
उदाहरण लेते हैं।
अन्य परिवर्तन
अन्य सामान्य परिवर्तन इस प्रकार हैं:
एचएएल एपीआई की परीक्षण क्षमता में सुधार करने के लिए, एआईडीएल संस्करण में, हम डिबगिंग विकल्प पेश करते हैं जो वीटीएस परीक्षणों द्वारा उपयोग किए जाते हैं और
ModuleDebug
पार्सलेबल के माध्यम से उपलब्ध होते हैं। ये विकल्प एचएएल को कुछ कार्यक्षमता (उदाहरण के लिए, बाहरी उपकरणों का कनेक्शन) का अनुकरण करने का निर्देश देते हैं, जिसके लिए अन्यथा मैन्युअल हस्तक्षेप और बाहरी परीक्षण उपकरणों के उपयोग की आवश्यकता होती है।जब सिस्टम प्रॉपर्टी
sys.audio.restart.hal
का मान1
पर सेट हो तो HAL सेवाओं को पुनरारंभ करना आवश्यक है। पुनरारंभaudioserver.rc
के माध्यम से प्राप्त किया जाता है। एचएएल को लागू करते समय,audioserver.rc
फ़ाइल में सूचीबद्ध उपयुक्त एचएएल सेवा नाम का उपयोग करें। Android 14 में,vendor.audio-hal-aidl
नाम विशेष रूप से HAL के AIDL संस्करण के लिए जोड़ा गया है।
प्रभाव एचएएल
सभी HIDL इंटरफ़ेस android.hardware.audio.effect@NM*
पैकेज के अंतर्गत हैं, जहाँ NM
Major.Minor संस्करण है। सभी एआईडीएल इंटरफेस android.hardware.audio.effect
पैकेज के भीतर हैं।
HIDL API इंटरफ़ेस और कॉन्फ़िगरेशन फ़ाइलें | एआईडीएल एपीआई इंटरफेस |
---|---|
IEffectsFactory | IFactory |
IEffect | IEffect |
audio_effects.xml | IEffect |
प्रभाव फ़ैक्टरी
एचआईडीएल एपीआई इंटरफेस (android.hardware.audio.effect@XX) | एआईडीएल एपीआई इंटरफेस (android.hardware.audio.effect) |
---|---|
IEffectsFactory.getAllDescriptors | IFactory.queryEffects शून्य UUID पैरामीटर के साथ |
IEffectsFactory.getDescriptor | UUID पैरामीटर के साथ IFactory.queryEffects |
IEffectsFactory.createEffect | IFactory.createEffect |
audio_effects.xml | IFactory.queryProcessing IFactory.queryEffects |
प्रभाव इंटरफ़ेस
एचआईडीएल एपीआई इंटरफेस (android.hardware.audio.effect@XX) | एआईडीएल एपीआई इंटरफेस (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 |
प्रभाव आदेश
एचआईडीएल एपीआई इंटरफेस (android.hardware.audio.effect@XX) | एआईडीएल एपीआई इंटरफेस (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 द्वारा नियंत्रित किया जाता है। |
सामान्य प्रभाव पैरामीटर परिभाषा
एचआईडीएल परिभाषा (android.hardware.audio.effect@XX) | एआईडीएल परिभाषा |
---|---|
Types.hal | Flags.aidl Parameter.aidl |
विशिष्ट प्रभाव परिभाषा
एचआईडीएल एपीआई इंटरफेस (android.hardware.audio.effect@XX) | एआईडीएल एपीआई इंटरफेस (android.hardware.audio.effect) |
---|---|
I $EffectType$ .hal | $EffectType$ .aidl |