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

Android 14'ten itibaren iş ortaklarının ve SoC tedarikçi firmalarının mevcut HIDL HAL uygulamasını bir AIDL HAL uygulamasıyla değiştirmeleri önerilir.

HIDL Audio HAL'den AIDL Audio HAL'e sorunsuz bir geçiş sağlamak için bu sayfada temel farklılıklardan bazıları vurgulanmıştır. Bu sayfada, Audio HAL için AIDL ve HIDL arayüzleri arasındaki eşleme de gösterilir.

AIDL ile 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 sunulmuştur. Çerçeve, bu parametreleri tedarikçi firma yapılandırma dosyası yerine Core HAL'den okur. Örneğin, kullanıcı kontrolü için gösterilen surround biçimlerinin listesi, Temel HAL'de IConfig.getSurroundSoundConfig yöntemi tarafından sağlanmaktadır.

    AIDL Ses Efektleri HAL'de, HIDL Efektler HAL'deki XML dosyalarında tanımlanan effectProxy mantığı ses çerçevesine taşınır. Ses çerçevesi, sistemdeki tüm efekt örneklerini IFactory.queryEffects kullanarak, tüm efekt işlemlerini ise IFactory.queryProcessing kullanarak sorgular.

  • Ses cihazı türleri için cihaz terimi kullanımından kaynaklanan karışıklığı önlemek amacıyla HIDL Audio HAL'deki IDevice, AIDL Audio HAL'de IModule olarak yeniden adlandırıldı.

  • IPrimaryDevice, AIDL Audio HAL'de değiştirildi. Mevcut ses modu ve ekran rotasyonuyla ilgili güncellemeler her IModule örneğine gönderilir. Bluetooth senkronize bağlantıya (BT SCO) ve Eller Serbest Profili'ne (HFP) ilişkin parametreler özel bir IBluetootharabirimini kullanarak yönetilir. Özel bir ITelephony arayüzü, telefon görüşmelerine özgü denetimler sağlar. Bu arayüzlerin her ikisinin de örnekleri, IModule arayüzünün birincil örneğinden alınabilir. Daha fazla bilgi için Core HAL ve Özellikle ilgili işlevler ile ilgili karşılaştırma tablolarına bakın.

  • Gereksiz laf kalabalığından kaçınmak için IDevicesFactory, AIDL Audio HAL'den kaldırıldı. HAL modülleri (yani IModule arayüz örneği) artık bluetooth veya r_submix gibi örnek adları için adları kullanılarak doğrudan Hizmet Yöneticisi'ne kaydedilir. Tek istisna, default örnek adı altında kaydedilen primary modülüdür.

AIDL ve HIDL ses HAL 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 README dosyasını inceleyin.

Core HAL

Tüm HIDL arayüzleri android.hardware.audio@N.M paketindedir. Burada N.M, Major.Minor sürümünü belirtir. 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'a 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 açılı ayraçlar kullanılarak 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.getAudioPort
IModule.connectExternalDevice
IModule.disconnectExternalDevice
IStream.getSupportedProfiles IModule.connectExternalDevice
<routes> IModule.getAudioRoutes
IDevice.createAudioPatch
IDevice.updateAudioPatch
IDevice.releaseAudioPatch
IStream.getDevices
IStream.setDevices
IDevice.openInputStream'deki cihazın özellikleri
IDevice.openOutputStream
IModule.setAudioPatch
IModule.setAudioPortConfig
IModule.resetAudioPatch

Ses bağlantı noktası yapılandırmaları ve akışları

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
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 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 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ı çarpılarak 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ırma ayarlamak için daha önce kullandıkları XML dosyalarını kullanmaya devam edebilir. IConfig için referans uygulama, XML dosyasından alınan 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>
Ayrılan yöntemler iki farklı yöntemle yapılabilir:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes> VEYA
<volumeGroups>, <ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. speaker_drc_enabled, sistemde kullanılmadığı için yapılandırma dosyasından kaldırılır. Tüm cihazlarda DRC etkinleştirilmiş olmalıdır.<ahref="#fnref1" rev="footnote"> </ahref="#fnref1">

Özellikle 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 olarak 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ı bir başlatma işleminde kendisini ServiceManager ile yayınlar. Bu noktada, kalıcı olarak kabul edilir ve kapatılamaz.
IDevice.supportsAudioPatches
IStreamOut.supportsPauseAndResume
IStreamOut.supportsDrain
Yama, duraklatma, devam ettirme ve boşaltma için destek zorunludur.
IStreamOut.getRenderPosition
IStreamOut.getNextWriteTimestamp
Eski.

Satıcı uzantıları

HIDL API'de tedarikçi 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, ParcelableHolders içinde kapsülleme kullanarak rastgele Parcelable örnekleri alan getVendorParameters veya setVendorParameters gibi karşılık gelen yöntemler vardır.

Diğer değişiklikler

Diğer genel değişiklikler şunlardır:

  1. HAL API'lerinin test edilebilirliğini iyileştirmek için AIDL sürümünde, VTS testleri tarafından kullanılan ve ModuleDebug parcelable aracılığıyla kullanılabilen hata ayıklama seçeneklerini kullanıma sunuyoruz. Bu seçenekler, HAL'e belirli işlevleri (ör. harici cihazların bağlanması) taklit etmesini talimatlandırır. Aksi takdirde manuel müdahale ve harici test ekipmanlarının kullanılması gerekir.

  2. HAL hizmetlerinin, sys.audio.restart.hal sistem özelliğinin değeri 1 olarak ayarlandığında yeniden başlatılması gerekir. Yeniden başlatma işlemi audioserver.rc aracılığıyla gerçekleştirilir. HAL'i uygularken audioserver.rc dosyasında listelenen uygun HAL hizmet adını kullanın. Android 14'te vendor.audio-hal-aidl adı, HAL'ın AIDL sürümü için özel olarak eklenir.

Efektler HAL

Tüm HIDL arayüzleri android.hardware.audio.effect@N.M* paketindedir. Burada N.M, Major.Minor sürümüdür. 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

Efekt Fabrikası

HIDL API arayüzleri
(android.hardware.audio.effect@X.X)
AIDL API arayüzleri
(android.hardware.audio.effect)
IEffectsFactory.getAllDescriptors Boş UUID parametresi içeren IFactory.queryEffects
IEffectsFactory.getDescriptor IFactory.queryEffects with UUID parametresi
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şleme
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 Efektler AIDL HAL'de kullanımdan kaldırıldı
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 Desteği sonlandırıldı.
AIDL'de, devre dışı bırakma ve devre dışı bırakmama modu geçişleri temel çerçevede ele alınır.
EFFECT_CMD_DUMP Yerleşik bağlayıcı işlemi AIBinder_dump tarafından yönetilir.

Ortak etki parametreleri tanımı

HIDL tanımı
(android.hardware.audio.effect@X.X)
AIDL tanımı
Types.hal Flags.aidl
Parameter.aidl

Belirli Etkiler 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