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'deIConfig.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 örnekleriniIFactory.queryEffects
kullanarak, tüm efekt işlemlerini iseIFactory.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'deIModule
olarak yeniden adlandırıldı.IPrimaryDevice
, AIDL Audio HAL'de değiştirildi. Mevcut ses modu ve ekran rotasyonuyla ilgili güncellemeler herIModule
örneğine gönderilir. Bluetooth senkronize bağlantıya (BT SCO) ve Eller Serbest Profili'ne (HFP) ilişkin parametreler özel birIBluetooth
arabirimini kullanarak yönetilir. Özel birITelephony
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 (yaniIModule
arayüz örneği) artıkbluetooth
veyar_submix
gibi örnek adları için adları kullanılarak doğrudan Hizmet Yöneticisi'ne kaydedilir. Tek istisna,default
örnek adı altında kaydedilenprimary
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.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> <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 |
-
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:
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.HAL hizmetlerinin,
sys.audio.restart.hal
sistem özelliğinin değeri1
olarak ayarlandığında yeniden başlatılması gerekir. Yeniden başlatma işlemiaudioserver.rc
aracılığıyla gerçekleştirilir. HAL'i uygularkenaudioserver.rc
dosyasında listelenen uygun HAL hizmet adını kullanın. Android 14'tevendor.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 |