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'dekiIConfig.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 veIFactory.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'dekiIModule
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 herIModule
örneğine gönderilir. Bluetooth senkronize bağlantı yönelimli (BT SCO) ve Eller Serbest Profili (HFP) ile ilgili parametreler, özel birIBluetooth
arayüzü tarafından yönetilir. Özel birITelephony
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 (yaniIModule
arabirim örnekleri) artıkbluetooth
veyar_submix
gibi örnek adları kullanılarak doğrudan Hizmet Yöneticisine kaydedilmektedir. Bunun tek istisnası,default
örnek adı altında kaydedilenprimary
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.connectExternalDevice IModule.disconnectExternalDevice |
IStream.getSupportedProfiles | IModule.connectExternalDevice |
< routes > | IModule.getAudioRoutes |
IDevice.createAudioPatch IDevice.updateAudioPatch IDevice.releaseAudioPatch IStream.getDevices IStream.setDevices IDevice.openInputStream cihazın özellikleriIDevice.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> <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 |
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:
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.sys.audio.restart.hal
sistem özelliğinin değeri1
olarak ayarlandığında HAL hizmetlerinin yeniden başlatılması gerekir. Yeniden başlatmaaudioserver.rc
aracılığıyla gerçekleştirilir. HAL'yi uygularkenaudioserver.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 veyaEski 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 |