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, Ses Donanım Soyutlama Katmanı 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ının listesi, Core HAL'dekiIConfig.getSurroundSoundConfigyöntemiyle sağlanır.AIDL Audio Effects HAL'de, HIDL Effects HAL'deki XML dosyalarında tanımlanan
effectProxymantığı, ses çerçevesine taşınır. Ses çerçevesi,IFactory.queryEffectskullanarak sistemdeki tüm efekt örneklerini veIFactory.queryProcessingkullanarak tüm efekt işlemlerini sorgular.Ses sistemi türleri için cihaz teriminin kullanımında karışıklık yaşanmaması için,
IDevice, HIDL Audio HAL'deIModuleolarak yeniden adlandırıldı.AIDL Audio HAL,
IPrimaryDeviceyerine geçer. Çerçeve, mevcut ses modu ve ekran döndürme ile ilgili güncellemeleri herIModuleörneğine gönderir. Bluetooth eşzamanlı bağlantı odaklı (BT SCO) ve Eller Serbest Profili (HFP) ile ilgili parametreler özel birIBluetootharayüzü tarafından işlenir. Özel birITelephonyarayüzü, telefona özgü kontroller sağlar. Bu arayüzlerin her ikisinin de örnekleriniIModulearayü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
IDevicesFactory, AIDL Audio HAL'de kaldırıldı. HAL modülleri (yaniIModulearayüz örnekleri) artık doğrudan modül örneklerinin adları (ör.bluetoothveyar_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 |
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 dosyası öğeleri | AIDL API arayüzü yöntemleri |
|---|---|
<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 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.
Kare cinsinden gerçek arabellek boyutu, bayt cinsinden kare 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 (ör. audio_policy_configuration.xml ve audio_policy_engine_configuration.xml) tanımlanan sistem genelinde yapılandırma, IConfig üzerinden 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üştürmeyi 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.getSupportedAudioModes
IConfig.getEngineConfig |
<volumes> VEYA
<volumeGroups>, <ProductStrategies>
|
IConfig.getEngineConfig |
<surroundSound> |
IConfig.getSurroundSoundConfig |
-
speaker_drc_enabled, yapılandırma dosyasından kaldırılır. Çünkü bu yapılandırma öğesi sistemde kullanılmaz. 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.setGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension |
IStreamIn.setHwGainIStreamIn.setMicrophoneDirectionIStreamIn.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.initCheckIDevice.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
ModuleDebugparcelable 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ı kullanımı gerektiren belirli işlevlerin (örneğin, harici cihazların bağlantısı) HAL tarafından taklit edilmesini sağlar.Çerçeve veya VTS test kümeleri
sys.audio.restart.halsystem property'yi1olarak ayarladığında HAL hizmetlerinin yeniden başlatılması gerekir. Yeniden başlatma işlemiaudioserver.rcdosyası tarafından gerçekleştirilir. HAL'yi uygularkenaudioserver.rcdosyasında listelenen uygun HAL hizmeti adını kullanın. Android 14'te,vendor.audio-hal-aidladı özellikle HAL'ın AIDL sürümü için eklenir.
Efektler Donanım Soyutlama Katmanı
Tüm HIDL arayüzleri, android.hardware.audio.effect@N.M* paketinde yer alır. Burada N.M, Major.Minor sürümüdür. Tüm AIDL arayüzleri android.hardware.audio.effect paketindedir.
| 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 |
IFactory.queryEffects ile boş UUID parametresi |
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 desteği sonlandırılanlar |
EFFECT_CMD_SET_PARAM_COMMIT |
Effects AIDL HAL'de desteği sonlandı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 |
Kullanımdan kaldı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şlem AIBinder_dump tarafından işlenir. |
Ortak efekt parametrelerinin 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 |