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

Android 14'ten başlayarak, iş ortakları ve SoC satıcılarının mevcut HIDL HAL uygulamasını bir AIDL HAL uygulamasıyla değiştirmeleri teşvik edilmektedir.

HIDL Audio HAL'den AIDL Audio HAL'e sorunsuz geçişi kolaylaştırmak için bazı temel farklılıklar bu sayfada vurgulanmıştır. Bu sayfa aynı zamanda Ses HAL'i için AIDL ve HIDL arayüzleri arasındaki eşlemeyi de gösterir.

AIDL ve HIDL Audio HAL uygulaması arasındaki fark

HIDL yapısı ile AIDL yapısı arasındaki temel farklar aşağıdaki gibidir:

  • AIDL Audio Core HAL'de , IConfig arayüzü, HIDL HAL'deki XML dosyalarındaki sistem çapındaki parametrelerin yerine geçecek şekilde tanıtıldı. Çerçeve bu parametreleri satıcının yapılandırma dosyası yerine Çekirdek HAL'den okur. Örnek olarak, kullanıcı kontrolü için ortaya çıkan surround formatlarının listesi Core HAL'deki IConfig.getSurroundSoundConfig yöntemi tarafından sağlanır.

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

  • Ses cihazı türleri için cihaz teriminin kullanımıyla ilgili karışıklığı önlemek için, HIDL Audio HAL'deki IDevice , AIDL Audio HAL'deki IModule olarak yeniden adlandırılmıştır.

  • IPrimaryDevice AIDL Audio HAL'de değiştirildi. Geçerli ses modu ve ekran döndürmeyle ilgili güncellemeler her IModule örneğine gönderilir. Bluetooth senkronize bağlantı yönelimli (BT SCO) ve Eller Serbest Profili (HFP) ile ilgili parametreler, özel bir IBluetooth arayüzü tarafından yönetilir. Özel bir ITelephony arayüzü telefona özel kontroller sağlar. Bu arayüzlerin her ikisinin de örnekleri, IModule arayüzünün birincil örneğinden alınabilir. Daha fazla bilgi için Çekirdek HAL ve Özellik ile ilgili işlevsellik hakkındaki karşılaştırma tablolarına bakın.

  • Yedeklemeyi önlemek için AIDL Audio HAL'de IDevicesFactory kaldırıldı. HAL modülleri (yani IModule arabirim örnekleri) artık bluetooth veya r_submix gibi örnek adları kullanılarak doğrudan Hizmet Yöneticisine kaydedilmektedir. Bunun tek istisnası, default örnek adı altında kaydedilen primary modüldür.

AIDL ve HIDL Ses HAL eşlemesi

Aşağıdaki bölümlerdeki tablolar HIDL ve AIDL Audio HAL arayüzleri arasındaki eşlemeyi göstermektedir. Dizin yapısı hakkında daha fazla bilgi için Ses HAL README dosyasına bakın.

Çekirdek HAL

Tüm HIDL arayüzleri android.hardware.audio@NM paketi içerisindedir; burada NM Major.Minor sürümünü belirtir. Tüm AIDL arayüzleri android.hardware.audio.core paketinin içindedir.

HIDL API arayüzleri ve konfigürasyon dosyaları AIDL API arayüzleri
IDevicesFactory IModule ServiceManager 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 belirtilmiştir.

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 ö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 bir parçasıdır. Çerçevelerdeki gerçek ara bellek 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 çapında konfigürasyon

Daha önce ses politikası XML yapılandırma dosyalarında (yani, audio_policy_configuration.xml ve audio_policy_engine_configuration.xml ) tanımlanan sistem çapında yapılandırma, IConfig aracılığıyla sağlanmalıdır. Ancak AIDL'ye geçişi kolaylaştırmak için satıcılar hâlâ daha önce sistem çapında yapılandırmayı ayarlamak için kullandıkları XML dosyalarını kullanma seçeneğine sahiptir. IConfig referans uygulaması, XML'den AIDL'ye dönüşümü kolaylaştıran, AIDL veri türlerini kullanarak XML dosyasındaki bilgileri temsil etmek için gerekli kodu içerir.

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ılmıştır:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes> , VEYA
<volumeGroups> , <ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. speaker_drc_enabled , bu yapılandırma öğesi sistem içinde kullanılmadığından yapılandırma dosyasından kaldırıldı. Tüm cihazlarda DRC etkin olmalıdır.

Özelliklere ilişkin işlevsellik

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 ile 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ü kendisini yalnızca başarılı başlatma durumunda ServiceManager ile yayınlar. Bu noktada kalıcı olduğu 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
Modası geçmiş.

Satıcı 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çindeki kapsüllemeyi kullanarak rastgele Parcelable örnekleri alan karşılık gelen yöntemler vardır.

Diğer değişiklikler

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

  1. HAL API'lerinin test edilebilirliğini geliştirmek için AIDL sürümünde, VTS testleri tarafından kullanılan ve ModuleDebug parsellenebiliri aracılığıyla kullanılabilen hata ayıklama seçeneklerini sunuyoruz. Bu seçenekler HAL'e, aksi takdirde manuel müdahale ve harici test ekipmanının kullanılmasını gerektiren belirli işlevleri (örneğin, harici cihazların bağlantısı) taklit etmesi talimatını verir.

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

Efektler HAL

Tüm HIDL arayüzleri android.hardware.audio.effect@NM* * paketi içerisindedir; burada NM , Major.Minor sürümüdür. Tüm AIDL arayüzleri android.hardware.audio.effect paketinin içindedir.

HIDL API arayüzleri ve konfigürasyon dosyaları AIDL API arayüzleri
IEffectsFactory IFactory
IEffect IEffect
audio_effects.xml IEffect

Efekt Fabrikası

HIDL API arayüzleri
(android.hardware.audio. effect@XX)
AIDL API arayüzleri
(android.hardware.audio.efect)
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@XX)
AIDL API arayüzleri
(android.hardware.audio.efect)
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 eşleyin,
IEffect.setParameter veya
Eski HIDL komutunun türüne dayalı IEffect.getParameter
Yok IEffect.getState
IEffect.setParameter IEffect.setParameter
IEffect.getParameter IEffect.getParameter

Efekt Komutları

HIDL API arayüzleri
(android.hardware.audio. effect@XX)
AIDL API arayüzleri
(android.hardware.audio.efect)
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ı çerçevede ele alınır.
EFFECT_CMD_DUMP Yerleşik bağlayıcı işlemi AIBinder_dump tarafından işlenir.

Ortak Etki parametreleri tanımı

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

Spesifik Efekt tanımı

HIDL API arayüzleri
(android.hardware.audio. effect@XX)
AIDL API arayüzleri
(android.hardware.audio.efect)
I $EffectType$ .hal $EffectType$ .aidl