AIDL ve HIDL Audio HAL karşılaştırması

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 IConfig arayü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.getSurroundSoundConfig yöntemiyle sağlanır.

    AIDL Ses Efektleri HAL'de, HIDL Efektleri HAL'deki XML dosyalarında tanımlanan effectProxy mantığı, ses çerçevesine taşınır. Ses çerçevesi, IFactory.queryEffects kullanılarak sistemdeki tüm efekt örneklerini ve IFactory.queryProcessing kullanı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, IDevice in HIDL Audio HAL, AIDL Audio HAL'de IModule olarak 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 IBluetooth arayüzü tarafından işlenir. Özel bir ITelephony arayüzü, telefona özgü kontroller sağlar. Bu arayüzlerin her ikisinin de örneklerini IModule arayü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 IDevicesFactory kaldırıldı. HAL modülleri (yani IModule arayüz örnekleri) artık doğrudan modül örneklerinin adları (ör. bluetooth veya r_submix) kullanılarak Hizmet Yöneticisi'ne kaydediliyor. Tek istisna, primary modü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 IModule alanının ServiceManager ile kaydedilmesi.
IDevice IModule
IPrimaryDevice ITelephony
IBluetooth
IStream
IStreamIn
IStreamOut
StreamDescriptor
IStreamIn
IStreamCommon
IStreamOut
audio_policy_configuration.xml
audio_policy_engine_configuration.xml
IConfig
IModule
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.getAudioPort
IDevice.setConnectedState
IModule.getAudioPort
IModule.connectExternalDevice
IModule.disconnectExternalDevice
IStream.getSupportedProfiles IModule.connectExternalDevice
<routes> IModule.getAudioRoutes
IDevice.createAudioPatch
IDevice.updateAudioPatch
IDevice.releaseAudioPatch
IStream.getDevices
IStream.setDevices
IDevice.openInputStream cihazının özellikleriIDevice.openInputStream
IDevice.openOutputStream
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch

Ses bağlantı noktası yapılandırmaları ve yayınları

HIDL API arayüzü yöntemleri AIDL API arayüzü yöntemleri
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
StreamDescriptor.Command.pause
.start
IStream.start
IStream.stop
(MMAP Akışları)
StreamDescriptor.Command.start veya .burst
.pause (giriş) ve/veya .flush (çıkış)
IStreamOut.drain
IStreamOut.flush
StreamDescriptor.Command.drain
.flush
IStreamOut.setCallback
IStreamOut.clearCallback
IModule.openOutputStream
IStreamCommon.close
IStreamOut.getPresentationPosition ve 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, nominal gecikme ve minimum arabellek boyutu, HAL tarafından döndürülen AudioPatch yapısının bir parçasıdır. Çerçeveler cinsinden gerçek arabellek boyutu, bayt cinsinden çerçeve boyutuyla birlikte StreamDescriptor yapı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.addDeviceEffect
IDevice.removeDeviceEffect
IModule.addDeviceEffect
IModule.removeDeviceEffect
IStream.addEffect
IStream.removeEffect
IStreamCommon.addEffect
IStreamCommon.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>1

<call_screen_mode_supported>
<engine_library>
İki farklı yönteme ayrılır:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes> VEYA
<volumeGroups>, <ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. Bu yapılandırma öğesi sistemde kullanılmadığından speaker_drc_enabled yapı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.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 (geri aramalar IStreamOutEventCallback içinde birleştirilir)
IDevice.get/setParameters
IStream.get/setParameters
IModule.get/setVendorParameters
IStreamCommon.get/setVendorParameters

Eski yöntemler

HIDL API arayüzü yöntemleri Yorumlar
IDevice.initCheck
IDevice.close
HAL modülü, yalnızca başarılı başlatma işleminden sonra ServiceManager ile kendini yayınlar. Bu noktada, kalıcı olarak kabul edilir ve kapatılamaz.
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain
Yamalar, duraklatma, devam ettirme ve boşaltma desteği zorunludur.
IStreamOut.getRenderPosition
IStreamOut.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 ModuleDebug paketlenebilir 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.hal sistem özelliğini 1 olarak ayarladığında HAL hizmetlerinin yeniden başlatılması gerekir. Yeniden başlatma işlemi audioserver.rc dosyası tarafından gerçekleştirilir. HAL'yi uygularken audioserver.rc dosyası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.queryEffects UUID parametresiyle
IEffectsFactory.createEffect IFactory.createEffect
audio_effects.xml IFactory.queryProcessing
IFactory.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.setParameter veya
IEffect.getParameter ile 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_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 ile 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_dump tarafından işlenir.

Ortak efekt parametreleri tanımı

HIDL tanımı
(android.hardware.audio.effect@X.X)
AIDL tanımı
Types.hal Flags.aidl
Parameter.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