Начиная с Android 14, партнерам и поставщикам SoC рекомендуется заменить текущую реализацию HIDL HAL на реализацию AIDL HAL.
Для облегчения перехода с HIDL Audio HAL на AIDL Audio HAL на этой странице выделены некоторые ключевые различия. Здесь также показано соответствие интерфейсов AIDL и HIDL для Audio HAL.
Разница между реализациями AIDL и HIDL Audio HAL
Основные различия между структурой HIDL и структурой AIDL заключаются в следующем:
В AIDL Audio Core HAL интерфейс
IConfigпредставлен в качестве замены общесистемным параметрам в XML-файлах HIDL HAL. Фреймворк считывает эти параметры из Core HAL, а не из файла конфигурации поставщика. Например, список форматов объемного звука, доступных для управления пользователем, предоставляется методомIConfig.getSurroundSoundConfigв Core HAL.В AIDL Audio Effects HAL логика
effectProxy, определённая в XML-файлах HIDL Effects HAL, перенесена в аудиофреймворк. Аудиофреймворк запрашивает все экземпляры эффектов в системе с помощьюIFactory.queryEffects, а все обработки эффектов — с помощьюIFactory.queryProcessing.Чтобы избежать путаницы с использованием термина «устройство» для типов аудиоустройств,
IDeviceв HIDL Audio HAL переименован вIModuleв AIDL Audio HAL.Интерфейс AIDL Audio HAL заменяет
IPrimaryDevice. Фреймворк отправляет обновления текущего аудиорежима и поворота экрана каждому экземпляруIModule. Выделенный интерфейсIBluetoothобрабатывает параметры, связанные с ориентированным на синхронное соединение Bluetooth (BT SCO) и профилем Hands-Free (HFP). Выделенный интерфейсITelephonyпредоставляет элементы управления, специфичные для телефонии. Экземпляры обоих этих интерфейсов можно получить из основного экземпляра интерфейсаIModule. Подробнее см. в сравнительных таблицах по основным HAL и функциональным возможностям .IDevicesFactoryудалена из AIDL Audio HAL для предотвращения избыточности. Модули HAL (то есть экземпляры интерфейсаIModule) теперь регистрируются непосредственно в диспетчере служб, используя имена экземпляров модулей, например,bluetoothилиr_submix. Единственным исключением являетсяprimaryмодуль, который регистрируется под именем экземпляраdefault.
Сопоставление AIDL и HIDL Audio HAL
В таблицах в следующих разделах показано соответствие интерфейсов HIDL и AIDL Audio HAL. Подробнее о структуре каталогов см. в разделе «Audio HAL» .
Ядро HAL
Все интерфейсы HIDL находятся в пакете android.hardware.audio@NM , где NM обозначает версию Major.Minor . Все интерфейсы AIDL находятся в пакете android.hardware.audio.core .
| Интерфейсы API HIDL и файлы конфигурации | Интерфейсы API AIDL |
|---|---|
IDevicesFactory | Регистрация IModule в ServiceManager . |
IDevice | IModule |
IPrimaryDevice | ITelephonyIBluetooth |
IStreamIStreamInIStreamOut | StreamDescriptorIStreamInIStreamCommonIStreamOut |
audio_policy_configuration.xmlaudio_policy_engine_configuration.xml | IConfigIModule |
| Настраиваемые файлы аудиополитики | Используйте реализацию HIDL для Android 14. |
Аудиопорты, динамические профили, маршруты и патчи
В этой таблице элементы XML-файлов обозначены с помощью угловых скобок.
| Методы интерфейса API HIDL и элементы файлов конфигурации | Методы интерфейса API AIDL |
|---|---|
<attachedDevices><defaultOutputDevice><mixPorts><devicePorts> | IModule.getAudioPorts |
IDevice.getAudioPortIDevice.setConnectedState | IModule.connectExternalDeviceIModule.disconnectExternalDevice |
IStream.getSupportedProfiles | IModule.connectExternalDevice |
< routes > | IModule.getAudioRoutes |
IDevice.createAudioPatchIDevice.updateAudioPatchIDevice.releaseAudioPatchIStream.getDevicesIStream.setDevicesСпецификация устройства в IDevice.openInputStreamIDevice.openOutputStream | IModule.setAudioPatchIModule.setAudioPortConfigIModule.resetAudioPatch |
Конфигурации аудиопортов и потоки
| Методы интерфейса API HIDL | Методы интерфейса API AIDL |
|---|---|
IStream.getAudioPropertiesIStream.setAudioPropertiesIStreamIn.getAudioSource | IModule.getAudioPortConfigsIModule.setAudioPortConfig |
IDevice.openInputStreamIDevice.openOutputStreamIStreamIn.prepareForReadingIStreamOut.prepareForWritingIStream.createMmapBuffer | IModule.openInputStreamIModule.openOutputStream |
IStream.close | IStreamCommon.close |
IStreamIn.updateSinkMetadataIStreamOut.updateSourceMetadata | IStreamIn.updateMetadataIStreamOut.updateMetadata |
IStream.standby | StreamDescriptor.Command.standby |
IStream.pauseIStream.resume | StreamDescriptor.Command.pause.start |
IStream.startIStream.stop(Трансляции MMAP) | StreamDescriptor.Command.start или .burst.pause (вход) и/или .flush (выход) |
IStreamOut.drainIStreamOut.flush | StreamDescriptor.Command.drain.flush |
IStreamOut.setCallbackIStreamOut.clearCallback | IModule.openOutputStreamIStreamCommon.close |
IStreamOut.getPresentationPosition и IStreamIn.getCapturePositionIStreamOut.getLatencyIStream.getMmapPositionIStreamIn.getInputFramesLost | StreamDescriptor.Reply.observableStreamDescriptor.Reply.latencyMsStreamDescriptor.Reply.hardwareStreamDescriptor.Reply.xrunFrames |
IDevice.getInputBufferSizeIStreamOut.getLatencyIStream.getBufferSizeIStream.getFrameSizeIStream.getFrameCount | IModule.setAudioPatch , номинальная задержка и минимальный размер буфера являются частью структуры AudioPatch , возвращаемой HAL. Фактический размер буфера в кадрах, как и размер кадра в байтах, является частью структуры StreamDescriptor . Размер буфера в байтах можно рассчитать, умножив эти два числа. |
Подключение аудиоэффектов
| Методы интерфейса API HIDL | Методы интерфейса API AIDL |
|---|---|
IDevice.addDeviceEffectIDevice.removeDeviceEffect | IModule.addDeviceEffectIModule.removeDeviceEffect |
IStream.addEffectIStream.removeEffect | IStreamCommon.addEffectIStreamCommon.removeEffect |
Общесистемная конфигурация
Общесистемная конфигурация, ранее определённая в XML-файлах конфигурации аудиополитики (а именно, audio_policy_configuration.xml и audio_policy_engine_configuration.xml ), должна быть предоставлена через IConfig . Однако для упрощения перехода на AIDL поставщики по-прежнему могут использовать те же XML-файлы, которые они использовали ранее для настройки общесистемной конфигурации. Эталонная реализация IConfig содержит код, необходимый для представления информации из XML-файла с использованием типов данных AIDL, что упрощает преобразование из XML в AIDL.
| Элементы файла конфигурации HIDL | Методы интерфейса API AIDL |
|---|---|
<globalConfiguration><speaker_drc_enabled><call_screen_mode_supported><engine_library> | Разделено на два разных метода:ITelephony.getSupportedAudioModesIConfig.getEngineConfig |
<volumes> , ИЛИ<volumeGroups> , <ProductStrategies> | IConfig.getEngineConfig |
<surroundSound> | IConfig.getSurroundSoundConfig |
speaker_drc_enabledудалён из файла конфигурации, поскольку он не используется в системе. На всех устройствах DRC должен быть включён.
Функциональность, связанная с функциями
| Методы интерфейса API HIDL | API-интерфейс AIDL |
|---|---|
IDevice.setMasterVolumeIDevice.getMasterVolumeIDevice.setMicMuteIDevice.getMicMuteIDevice.setMasterMuteIDevice.getMasterMute | IModule.\* |
IPrimaryDevice.getTtyModeIPrimaryDevice.setTtyModeIPrimaryDevice.getHacEnabledIPrimaryDevice.setHacEnabledIPrimaryDevice.setVoiceVolume | ITelephony.TelecomConfig.\* |
IPrimaryDevice.setBtScoHeadsetDebugNameIPrimaryDevice.getBtScoNrecEnabledIPrimaryDevice.setBtScoNrecEnabledIPrimaryDevice.getBtScoWidebandEnabledIPrimaryDevice.setBtScoWidebandEnabled,IPrimaryDevice.getBtHfpEnabledIPrimaryDevice.setBtHfpEnabledIPrimaryDevice.setBtHfpSampleRateIPrimaryDevice.setBtHfpVolume | IBluetooth.ScoConfig.\*IBluetooth.HfpConfig.\* |
IPrimaryDevice.setModeIPrimaryDevice.updateRotation | ITelephony.switchAudioModeIModule.updateAudioModeIModule.updateScreenRotation |
IDevice.setScreenStateIDevice.getMicrophones | IModule.updateScreenStateIModule.getMicrophones |
IDevice.getHwAvSyncIStream.setHwAvSync | IModule.generateHwAvSyncIdIStreamCommon.updateHwAvSyncId |
IStreamIn.setGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension | IStreamIn.setHwGainIStreamIn.setMicrophoneDirectionIStreamIn.setMicrophoneFieldDimension |
IStreamOut.getDualMonoModeIStreamOut.setDualMonoModeIStreamOut.getPlaybackRateParametersIStreamOut.setPlaybackRateParametersIStreamOut.selectPresentationIStreamOut.getAudioDescriptionMixLevelIStreamOut.setAudioDescriptionMixLevelIStreamOut.setLatencyModeIStreamOut.getRecommendedLatencyModes | IStreamOut.\* |
IStreamOut.setEventCallbackIStreamOut.setLatencyModeCallback | IModule.openOutputStream (обратные вызовы объединены в IStreamOutEventCallback ) |
IDevice.get/setParametersIStream.get/setParameters | IModule.get/setVendorParametersIStreamCommon.get/setVendorParameters |
Устаревшие методы
| Методы интерфейса API HIDL | Комментарии |
|---|---|
IDevice.initCheckIDevice.close | Модуль HAL публикуется в ServiceManager только после успешной инициализации. С этого момента он считается постоянным и не может быть закрыт. |
IDevice.supportsAudioPatchesIStreamOut.supportsPauseAndResumeIStreamOut.supportsDrain | Поддержка исправлений, паузы, возобновления и слива обязательна. |
IStreamOut.getRenderPositionIStreamOut.getNextWriteTimestamp | Устаревший. |
Расширения поставщиков
В API HIDL расширения вендоров реализуются с помощью методов getParameters или setParameters из интерфейсов IDevice и IStream . Эти методы принимают произвольные строки. В API AIDL существуют соответствующие методы, такие как getVendorParameters или setVendorParameters , которые принимают произвольные экземпляры Parcelable , используя инкапсуляцию в ParcelableHolders .
Другие изменения
Другие общие изменения таковы:
Для улучшения тестируемости API HAL в версии AIDL мы добавили возможности отладки, используемые тестами VTS и доступные через пакет
ModuleDebug. Эти возможности предписывают HAL эмулировать определённую функциональность (например, подключение внешних устройств), которая в противном случае потребовала бы ручного вмешательства и использования внешнего тестового оборудования.Когда фреймворк или тест VTS устанавливает системное свойство
sys.audio.restart.halв1, службы HAL должны перезапуститься. Перезапуск выполняется в файлеaudioserver.rc. При реализации HAL используйте соответствующее имя службы HAL, указанное в файлеaudioserver.rc. В Android 14 имяvendor.audio-hal-aidlдобавлено специально для версии HAL AIDL.
Эффекты HAL
Все интерфейсы HIDL находятся в пакете android.hardware.audio.effect@NM* , где NM — версия Major.Minor . Все интерфейсы AIDL находятся в пакете android.hardware.audio.effect .
| Интерфейсы API HIDL и файлы конфигурации | Интерфейсы API AIDL |
|---|---|
IEffectsFactory | IFactory |
IEffect | IEffect |
audio_effects.xml | IEffect |
Фабрика эффектов
| Интерфейсы API HIDL (android.hardware.audio.effect@XX) | Интерфейсы API AIDL (android.hardware.audio.effect) |
|---|---|
IEffectsFactory.getAllDescriptors | IFactory.queryEffects с нулевым параметром UUID |
IEffectsFactory.getDescriptor | IFactory.queryEffects с параметром UUID |
IEffectsFactory.createEffect | IFactory.createEffect |
audio_effects.xml | IFactory.queryProcessingIFactory.queryEffects |
Интерфейсы эффектов
| Интерфейсы API HIDL (android.hardware.audio.effect@XX) | Интерфейсы API AIDL (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 ,IEffect.setParameter илиIEffect.getParameter на основе типа устаревшей команды HIDL |
| Н/Д | IEffect.getState |
IEffect.setParameter | IEffect.setParameter |
IEffect.getParameter | IEffect.getParameter |
Команды эффектов
| Интерфейсы API HIDL (android.hardware.audio.effect@XX) | Интерфейсы API AIDL (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 | Устаревшее в Effects AIDL HAL |
EFFECT_CMD_SET_PARAM_COMMIT | Устаревшее в Effects AIDL HAL |
EFFECT_CMD_SET_CONFIGEFFECT_CMD_SET_PARAMEFFECT_CMD_SET_DEVICEEFFECT_CMD_SET_VOLUMEEFFECT_CMD_SET_AUDIO_MODEEFFECT_CMD_SET_CONFIG_REVERSEEFFECT_CMD_SET_INPUT_DEVICEEFFECT_CMD_SET_FEATURE_CONFIGEFFECT_CMD_SET_AUDIO_SOURCE | IEffect.setParameter |
EFFECT_CMD_GET_PARAMEFFECT_CMD_GET_CONFIGEFFECT_CMD_GET_CONFIG_REVERSEEFFECT_CMD_GET_FEATURE_SUPPORTED_CONFIGSEFFECT_CMD_GET_FEATURE_CONFIGVISUALIZER_CMD_MEASUREEFFECT_CMD_FIRST_PROPRIETARY(то же самое, что и VISUALIZER_CMD_CAPTURE ) | IEffect.getParameter |
EFFECT_CMD_OFFLOAD | Устарело. В AIDL переключение режимов разгрузки и без разгрузки осуществляется в фреймворке. |
EFFECT_CMD_DUMP | Обрабатывается встроенной транзакцией-связкой AIBinder_dump . |
Определение параметров общего эффекта
| Определение HIDL (android.hardware.audio.effect@XX) | Определение AIDL |
|---|---|
Types.hal | Flags.aidlParameter.aidl |
Определение специфических эффектов
| Интерфейсы API HIDL (android.hardware.audio.effect@XX) | Интерфейсы API AIDL (android.hardware.audio.effect) |
|---|---|
I $EffectType$ .hal | $EffectType$ .aidl |