Android 14'ten itibaren iş ortaklarının ve SoC tedarikçilerinin mevcut HIDL HAL uygulamasını AIDL HAL uygulamasıyla değiştirmesi önerilir.
HIDL Audio HAL'den AIDL Audio HAL'e sorunsuz bir geçiş sağlamak için temel farklılıklardan bazıları bu sayfada vurgulanmıştır. Bu sayfada, Audio HAL için AIDL ve HIDL arayüzleri arasındaki eşleme de gösterilmektedir.
AIDL ve HIDL Audio HAL uygulaması arasındaki fark
HIDL yapısı ile AIDL yapısı arasındaki temel farklar şunlardır:
- AIDL Audio Core HAL'de, HIDL HAL'deki XML dosyalarındaki sistem genelindeki parametrelerin yerine - IConfigarayüzü kullanıma sunulur. Çerçeve, bu parametreleri satıcı yapılandırma dosyası yerine Core HAL'den okur. Örneğin, kullanıcı kontrolü için sunulan surround formatları listesi, Core HAL'deki- IConfig.getSurroundSoundConfigyöntemiyle sağlanır.- AIDL Ses Efektleri HAL'de, HIDL Efektleri HAL'deki XML dosyalarında tanımlanan - effectProxymantığı, ses çerçevesine taşınır. Ses çerçevesi,- IFactory.queryEffectskullanılarak sistemdeki tüm efekt örneklerini ve- IFactory.queryProcessingkullanılarak tüm efekt işlemlerini sorgular.
- Ses cihazı türleri için cihaz teriminin kullanımında karışıklık yaşanmaması için, - IDevicein HIDL Audio HAL, AIDL Audio HAL'de- IModuleolarak yeniden adlandırıldı.
- AIDL Audio HAL, - IPrimaryDevice'ın yerini alıyor. Çerçeve, mevcut ses modu ve ekran döndürme ile ilgili güncellemeleri her- IModuleörneğine gönderir. Bluetooth eşzamanlı bağlantı odaklı (BT SCO) ve Eller Serbest Profili (HFP) ile ilgili parametreler özel bir- IBluetootharayüzü tarafından işlenir. Özel bir- ITelephonyarayüzü, telefona özgü kontroller sağlar. Bu arayüzlerin her ikisinin de örneklerini- IModulearayüzünün birincil örneğinden alabilirsiniz. Daha fazla bilgi için Temel HAL ve Özellikle ilgili işlevler sayfalarındaki karşılaştırma tablolarına bakın.
- Gereksizliği önlemek için AIDL Audio HAL'de - IDevicesFactorykaldırıldı. HAL modülleri (yani- IModulearayüz örnekleri) artık doğrudan modül örneklerinin adları (ör.- bluetoothveya- r_submix) kullanılarak Hizmet Yöneticisi'ne kaydediliyor. Tek istisna,- primarymodülüdür. Bu modül,- defaultörnek adı altında kaydedilir.
AIDL ve HIDL Ses Donanım Soyutlama Katmanı eşlemesi
Aşağıdaki bölümlerdeki tablolarda, HIDL ve AIDL Audio HAL arayüzleri arasındaki eşleme gösterilmektedir. Dizin yapısı hakkında daha fazla bilgi için Audio HAL konusuna bakın.
Temel HAL
Tüm HIDL arayüzleri android.hardware.audio@N.M paketindedir. Burada N.M, Major.Minor sürümünü gösterir. Tüm AIDL arayüzleri android.hardware.audio.core paketindedir.
| HIDL API arayüzleri ve yapılandırma dosyaları | AIDL API arayüzleri | 
|---|---|
| IDevicesFactory | IModulealanınınServiceManagerile kaydedilmesi. | 
| IDevice | IModule | 
| IPrimaryDevice | ITelephonyIBluetooth | 
| IStreamIStreamInIStreamOut | StreamDescriptorIStreamInIStreamCommonIStreamOut | 
| audio_policy_configuration.xmlaudio_policy_engine_configuration.xml | IConfigIModule | 
| Yapılandırılabilir ses politikası dosyaları | Android 14 için HIDL uygulamasını kullanın. | 
Ses bağlantı noktaları, dinamik profiller, rotalar ve yamalar
Bu tabloda, XML dosyalarının öğeleri köşeli parantezlerle belirtilir.
| HIDL API arayüzü yöntemleri ve yapılandırma dosyaları öğeleri | AIDL API arayüzü yöntemleri | 
|---|---|
| <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.openInputStreamcihazının özellikleriIDevice.openInputStreamIDevice.openOutputStream | IModule.setAudioPatchIModule.setAudioPortConfigIModule.resetAudioPatch | 
Ses bağlantı noktası yapılandırmaları ve yayınları
| HIDL API arayüzü yöntemleri | AIDL API arayüzü yöntemleri | 
|---|---|
| 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(MMAP Akışları) | StreamDescriptor.Command.startveya.burst.pause(giriş) ve/veya.flush(çıkış) | 
| IStreamOut.drainIStreamOut.flush | StreamDescriptor.Command.drain.flush | 
| IStreamOut.setCallbackIStreamOut.clearCallback | IModule.openOutputStreamIStreamCommon.close | 
| IStreamOut.getPresentationPositionveIStreamIn.getCapturePositionIStreamOut.getLatencyIStream.getMmapPositionIStreamIn.getInputFramesLost | StreamDescriptor.Reply.observableStreamDescriptor.Reply.latencyMsStreamDescriptor.Reply.hardwareStreamDescriptor.Reply.xrunFrames | 
| IDevice.getInputBufferSizeIStreamOut.getLatencyIStream.getBufferSizeIStream.getFrameSizeIStream.getFrameCount | IModule.setAudioPatch, nominal gecikme ve minimum arabellek
      boyutu, HAL tarafından döndürülenAudioPatchyapısının bir parçasıdır.
      Çerçeveler cinsinden gerçek arabellek boyutu, bayt cinsinden çerçeve boyutuyla birlikteStreamDescriptoryapısının bir parçasıdır. Bayt cinsinden arabellek boyutu, bu iki sayının çarpılmasıyla hesaplanabilir. | 
Ses efektleri bağlantısı
| HIDL API arayüzü yöntemleri | AIDL API arayüzü yöntemleri | 
|---|---|
| IDevice.addDeviceEffectIDevice.removeDeviceEffect | IModule.addDeviceEffectIModule.removeDeviceEffect | 
| IStream.addEffectIStream.removeEffect | IStreamCommon.addEffectIStreamCommon.removeEffect | 
Sistem genelinde yapılandırma
Daha önce ses politikası XML yapılandırma dosyalarında (yani audio_policy_configuration.xml ve audio_policy_engine_configuration.xml) tanımlanan sistem genelinde yapılandırma, IConfig aracılığıyla sağlanmalıdır.
Ancak AIDL'ye geçişi kolaylaştırmak için tedarikçiler, sistem genelinde yapılandırmayı ayarlamak üzere daha önce kullandıkları XML dosyalarını kullanmaya devam edebilir. IConfig için referans uygulaması, XML dosyasındaki bilgileri AIDL veri türlerini kullanarak temsil etmek için gereken kodu içerir. Bu kod, XML'den AIDL'ye dönüşümü kolaylaştırır.
| HIDL yapılandırma dosyası öğeleri | AIDL API arayüzü yöntemleri | 
|---|---|
| <globalConfiguration><speaker_drc_enabled><call_screen_mode_supported><engine_library> | İki farklı yönteme ayrılır: ITelephony.getSupportedAudioModesIConfig.getEngineConfig | 
| <volumes>VEYA<volumeGroups>,<ProductStrategies> | IConfig.getEngineConfig | 
| <surroundSound> | IConfig.getSurroundSoundConfig | 
- 
  Bu yapılandırma öğesi sistemde kullanılmadığından speaker_drc_enabledyapılandırma dosyasından kaldırılır. Tüm cihazlarda DRC etkin olmalıdır. <ahref="#fnref1" rev="footnote"> </ahref="#fnref1">
Özelliklerle ilgili işlevler
| HIDL API arayüzü yöntemleri | AIDL API arayüzü | 
|---|---|
| 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(geri aramalarIStreamOutEventCallbackiçinde birleştirilir) | 
| IDevice.get/setParametersIStream.get/setParameters | IModule.get/setVendorParametersIStreamCommon.get/setVendorParameters | 
Eski yöntemler
| HIDL API arayüzü yöntemleri | Yorumlar | 
|---|---|
| IDevice.initCheckIDevice.close | HAL modülü, yalnızca başarılı başlatma işleminden sonra ServiceManagerile kendini yayınlar. Bu noktada, kalıcı olarak kabul edilir ve kapatılamaz. | 
| IDevice.supportsAudioPatchesIStreamOut.supportsPauseAndResumeIStreamOut.supportsDrain | Yamalar, duraklatma, devam ettirme ve boşaltma desteği zorunludur. | 
| IStreamOut.getRenderPositionIStreamOut.getNextWriteTimestamp | Eski. | 
Tedarikçi uzantıları
HIDL API'sinde, satıcı uzantıları IDevice ve IStream arayüzlerindeki getParameters veya setParameters yöntemleri kullanılarak uygulanır. Bu yöntemler rastgele dizeleri kabul eder.
AIDL API'sinde, getVendorParameters veya setVendorParameters gibi, ParcelableHolders içinde kapsülleme kullanılarak rastgele Parcelable örnekleri alan karşılık gelen yöntemler vardır.
Diğer değişiklikler
Diğer genel değişiklikler şunlardır:
- HAL API'lerinin test edilebilirliğini artırmak için AIDL sürümünde, VTS testleri tarafından kullanılan ve - ModuleDebugpaketlenebilir aracılığıyla kullanılabilen hata ayıklama seçeneklerini kullanıma sunuyoruz. Bu seçenekler, aksi takdirde manuel müdahale ve harici test ekipmanı gerektiren belirli işlevleri (örneğin, harici cihazların bağlanması) taklit etmesi için HAL'ye talimat verir.
- Çerçeve veya VTS test kümeleri - sys.audio.restart.halsistem özelliğini- 1olarak ayarladığında HAL hizmetlerinin yeniden başlatılması gerekir. Yeniden başlatma işlemi- audioserver.rcdosyası tarafından gerçekleştirilir. HAL'yi uygularken- audioserver.rcdosyasında listelenen uygun HAL hizmeti adını kullanın. Android 14'te, ad- vendor.audio-hal-aidl, HAL'ın AIDL sürümü için özel olarak eklenir.
Efektler Donanım Soyutlama Katmanı
Tüm HIDL arayüzleri, N.M sürümünün kullanıldığı android.hardware.audio.effect@N.M* paketindedir.Major.Minor Tüm AIDL arayüzleri android.hardware.audio.effect paketi içindedir.
| HIDL API arayüzleri ve yapılandırma dosyaları | AIDL API arayüzleri | 
|---|---|
| IEffectsFactory | IFactory | 
| IEffect | IEffect | 
| audio_effects.xml | IEffect | 
Effect Factory
| HIDL API arayüzleri (android.hardware.audio.effect@X.X) | AIDL API arayüzleri (android.hardware.audio.effect) | 
|---|---|
| IEffectsFactory.getAllDescriptors | Boş UUID parametresiyle IFactory.queryEffects | 
| IEffectsFactory.getDescriptor | IFactory.queryEffectsUUID parametresiyle | 
| IEffectsFactory.createEffect | IFactory.createEffect | 
| audio_effects.xml | IFactory.queryProcessingIFactory.queryEffects | 
Efekt arayüzleri
| HIDL API arayüzleri (android.hardware.audio.effect@X.X) | AIDL API arayüzleri (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 | Eski HIDL komutunun türüne göre IEffect.command,IEffect.setParameterveyaIEffect.getParameterile eşleyin. | 
| Yok | IEffect.getState | 
| IEffect.setParameter | IEffect.setParameter | 
| IEffect.getParameter | IEffect.getParameter | 
Efekt Komutları
| HIDL API arayüzleri (android.hardware.audio.effect@X.X) | AIDL API arayüzleri (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 | Effects AIDL HAL'de kullanımdan kaldırıldı | 
| EFFECT_CMD_SET_PARAM_COMMIT | Effects AIDL HAL'de kullanımdan kaldırıldı | 
| 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_CAPTUREile aynı) | IEffect.getParameter | 
| EFFECT_CMD_OFFLOAD | Desteği sonlandırıldı. AIDL'de, yükü boşaltma ve yükü boşaltmama modu geçişleri çerçevede işlenir. | 
| EFFECT_CMD_DUMP | Yerleşik bağlayıcı işlemi AIBinder_dumptarafından işlenir. | 
Ortak efekt parametreleri tanımı
| HIDL tanımı (android.hardware.audio.effect@X.X) | AIDL tanımı | 
|---|---|
| Types.hal | Flags.aidlParameter.aidl | 
Belirli Efektler tanımı
| HIDL API arayüzleri (android.hardware.audio.effect@X.X) | AIDL API arayüzleri (android.hardware.audio.effect) | 
|---|---|
| I$EffectType$.hal | $EffectType$.aidl | 
