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

Android 14'ten itibaren, iş ortakları ve SoC tedarikçileri Mevcut HIDL HAL uygulamasının bir AIDL HAL ile değiştirilmesi önerilir. hakkında bilgi edindiniz.

HIDL Audio HAL'den sorunsuz bir geçiş sağlamak için AIDL Audio HAL'ye ek olarak, önemli farklılıklardan bazıları bu sayfada vurgulanmıştır. Bu sayfada ayrıca Ses HAL'si.

AIDL ve HIDL Audio HAL uygulaması arasındaki fark

HIDL yapısı ve AIDL yapısı arasındaki temel farklar şunlardır: şöyle olur:

  • AIDL Audio Core HAL'de, IConfig arayüzü, sistem genelindeki arayüzlerin yerini alacak parametrelerine sahip olacaktır. Çerçeve bu parametreleri, tedarikçi firma yapılandırma dosyası yerine Core HAL'den alır. Örneğin, kullanıcı denetimi amacıyla gösterilen surround biçimlerin listesi. sağlayan IConfig.getSurroundSoundConfig yöntemini kullanabilirsiniz.

    AIDL Audio Effects HAL'de, HIDL Efektleri HAL'deki XML dosyalarında tanımlanan effectProxy mantığı ses çerçevesi var. Ses çerçevesi, IFactory.queryEffects kullanan bir sistem ve bunu kullanan tüm efekt işlemleri IFactory.queryProcessing.

  • Ses sistemi türleri için cihaz teriminin kullanılmasıyla ilgili 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ştirilmiştir. Mevcut sesle ilgili güncellemeler mod ve ekran döndürme her IModule örneğine gönderilir. Parametreler Bluetooth eşzamanlı bağlantı yönlü (BT SCO) ve Eller Serbest ile ilgili Profil (HFP), özel bir IBluetooth tarafından yönetilir kullanır. Özel bir ITelephony arayüzü telefona özgü özellikler sunar kontrol eder. Bu her iki arayüzün örnekleri şuradan alınabilir: IModule arayüzünün birincil örneği. Karşılaştırma tablolarına şu adresten ulaşabilirsiniz: Core HAL ve Özellikle ilgili işlevler konulu videomuzu izleyin.

  • IDevicesFactory, fazlalığı önlemek için AIDL Ses HAL'sinden kaldırıldı. HAL modüller (yani IModule arayüz örneği) artık doğrudan kaydedildi ve bluetooth veya r_submix. Bunun tek istisnası primary modülüdür. şu örnek adı altında kaydedilir: default.

AIDL ve HIDL Audio HAL eşlemesi

Aşağıdaki bölümlerde yer alan tablolarda, HIDL ile AIDL arasındaki eşleşme gösterilmektedir Ses HAL arayüzleri. Görüntüleyin Ses HAL README dosyası inceleyebilirsiniz.

Temel HAL

Tüm HIDL arayüzleri android.hardware.audio@N.M paketindedir. N.M, Major.Minor sürümünü gösterir. Tüm AIDL arayüzleri, android.hardware.audio.core paketi.

HIDL API arayüzleri ve yapılandırma dosyaları AIDL API arayüzleri
IDevicesFactory IModule alanının ServiceManager üzerinden kaydı.
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'te 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 belirlenir.

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 ülkesindeki cihazın teknik ö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 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 boyutları, HAL tarafından döndürülen AudioPatch yapısının bir parçasıdır. Çerçevelerdeki gerçek arabellek boyutu, StreamDescriptor öğesinin bir parçasıdır birlikte çalışır. Bayt cinsinden arabellek boyutu şu olabilir: toplayarak hesaplanır.

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'inde tanımlanan sistem genelinde yapılandırma yapılandırma dosyalarını (yani audio_policy_configuration.xml ve audio_policy_engine_configuration.xml) IConfig aracılığıyla sağlanmalıdır. Ancak AIDL'ye geçişi kolaylaştırmak için tedarikçiler AIDL'ye geçişi kolaylaştırmak için daha önce sistem genelinde yapılandırmayı ayarlamak için kullandıkları XML dosyalarının aynısını kullanabilirler. İlgili içeriği oluşturmak için kullanılan IConfig içindeki referans uygulaması, AIDL veri türlerini kullanarak XML dosyasındaki bilgileri temsil eder. 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>1

<call_screen_mode_supported>
<engine_library>
Bu yöntemler iki yönteme ayrılır: ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes> veya <volumeGroups>
<ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. speaker_drc_enabled, yapılandırma dosyasından şu şekilde kaldırıldı: Bu yapılandırma öğesi sistem içinde kullanılmaz. Tüm cihazlar DRC etkinleştirildi.<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 çağırmalar IStreamOutEventCallback)
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 aşağıdaki durumlarda ServiceManager ile kendini yayınlar: başlatma işleminin başarılı olduğunu gösterir. Bu durumda 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ı, getParameters veya IDevice ve IStream arayüzlerinden setParameters yöntem. Bu yöntemleri rastgele dizeleri kabul eder. AIDL API'sinde getVendorParameters gibi karşılık gelen yöntemler vardır veya setVendorParameters ile rastgele Parcelable örneklerini ParcelableHolders içine alma.

Diğer değişiklikler

Diğer genel değişiklikler aşağıdaki gibidir:

  1. HAL API'lerinin test edilebilirliğini iyileştirmek için AIDL sürümünde VTS testleri tarafından kullanılan ve mevcut hata ayıklama seçeneklerini tanıtın ModuleDebug ayrıştırılabilir. Bu seçenekler, HAL'ye Belirli işlevlerin (örneğin, harici cihazların bağlantısı) taklit edilmesi, Aksi takdirde manuel müdahale ve harici test kullanılmasını gerektirir. sahip olursunuz.

  2. HAL hizmetlerinin, sistem özelliğinin değeri gerçekleştiğinde yeniden başlatılması gerekir sys.audio.restart.hal, 1 olarak ayarlandı. Yeniden başlatma, audioserver.rc. HAL'yi uygularken audioserver.rc dosyası. Android 14'te bu ad vendor.audio-hal-aidl özellikle HAL.

Efekt HAL'si

Tüm HIDL arayüzleri android.hardware.audio.effect@N.M* içindedir paketi (burada N.M, Major.Minor sürümüdür). Tüm AIDL arayüzleri android.hardware.audio.effect paketinde satın alın.

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 parametresiyle IFactory.queryEffects
IEffectsFactory.getDescriptor UUID parametresiyle IFactory.queryEffects
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 IEffect.command hedefine harita,
IEffect.setParameter veya Eski HIDL türüne göre
IEffect.getParameter komut
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 Efektler 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 Kullanımdan kaldırıldı.
AIDL'de boşaltma ve boşaltma olmayan mod anahtarları bahsedeceğim.
EFFECT_CMD_DUMP Yerleşik bağlayıcı işlemi (AIBinder_dump) tarafından yönetilir.

Yaygın Etki 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