Начиная с 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.IPrimaryDevice
заменяется в AIDL Audio HAL. Обновления о текущем аудиорежиме и повороте экрана отправляются каждому экземпляруIModule
. Параметры, связанные с синхронным соединением Bluetooth (BT SCO) и профилем громкой связи (HFP), обрабатываются специальным интерфейсомIBluetooth
. Специальный интерфейсITelephony
обеспечивает элементы управления, специфичные для телефонии. Экземпляры обоих этих интерфейсов можно получить из основного экземпляра интерфейсаIModule
. Дополнительные сведения см. в сравнительных таблицах базового HAL и функциональных возможностей .IDevicesFactory
удален из AIDL Audio HAL, чтобы избежать избыточности. Модули HAL (то есть экземпляры интерфейсаIModule
) теперь регистрируются непосредственно в Service Manager, используя их имена в качестве имен экземпляров, напримерbluetooth
илиr_submix
. Единственным исключением являетсяprimary
модуль, который регистрируется под именем экземпляраdefault
.
Сопоставление AIDL и HIDL Audio HAL
В таблицах в следующих разделах показано сопоставление между интерфейсами HIDL и AIDL Audio HAL. Дополнительную информацию о структуре каталогов см. в файле Audio HAL README .
Базовый HAL
Все интерфейсы HIDL находятся в пакете android.hardware.audio@NM
, где NM
обозначает версию Major.Minor . Все интерфейсы AIDL находятся в пакете android.hardware.audio.core
.
Интерфейсы HIDL API и файлы конфигурации | API-интерфейсы AIDL |
---|---|
IDevicesFactory | Регистрация IModule в ServiceManager . |
IDevice | IModule |
IPrimaryDevice | ITelephony IBluetooth |
IStream IStreamIn IStreamOut | StreamDescriptor IStreamIn IStreamCommon IStreamOut |
audio_policy_configuration.xml audio_policy_engine_configuration.xml | IConfig IModule |
Настраиваемые файлы аудиополитики | Используйте реализацию HIDL для Android 14. |
Аудиопорты, динамические профили, маршруты и патчи
В этой таблице элементы XML-файлов обозначаются угловыми скобками.
Методы интерфейса HIDL API и элементы файлов конфигурации | Методы интерфейса AIDL API |
---|---|
<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 IDevice.openOutputStream | IModule.setAudioPatch IModule.setAudioPortConfig IModule.resetAudioPatch |
Конфигурации аудиопортов и потоки
Методы интерфейса HIDL API | Методы интерфейса AIDL API |
---|---|
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 , номинальная задержка и минимальный размер буфера являются частью структуры AudioPatch , возвращаемой HAL. Фактический размер буфера в кадрах является частью структуры StreamDescriptor вместе с размером кадра в байтах. Размер буфера в байтах можно рассчитать, умножив эти два числа. |
Подключение аудиоэффектов
Методы интерфейса HIDL API | Методы интерфейса AIDL API |
---|---|
IDevice.addDeviceEffect IDevice.removeDeviceEffect | IModule.addDeviceEffect IModule.removeDeviceEffect |
IStream.addEffect IStream.removeEffect | IStreamCommon.addEffect IStreamCommon.removeEffect |
Общесистемная конфигурация
Общесистемная конфигурация, которая была ранее определена в XML-файлах конфигурации политики аудио (а именно, audio_policy_configuration.xml
и audio_policy_engine_configuration.xml
), должна быть предоставлена через IConfig
. Однако, чтобы облегчить переход на AIDL, поставщики по-прежнему имеют возможность использовать те же XML-файлы, которые они ранее использовали для настройки общесистемной конфигурации. Эталонная реализация IConfig
содержит код, необходимый для представления информации из файла XML с использованием типов данных AIDL, что облегчает преобразование из XML в AIDL.
Элементы файла конфигурации HIDL | Методы интерфейса AIDL API |
---|---|
<globalConfiguration> <speaker_drc_enabled> <call_screen_mode_supported> <engine_library> | Разделено на два разных метода:ITelephony.getSupportedAudioModes IConfig.getEngineConfig |
<volumes> , ИЛИ<volumeGroups> , <ProductStrategies> | IConfig.getEngineConfig |
<surroundSound> | IConfig.getSurroundSoundConfig |
speaker_drc_enabled
удален из файла конфигурации, поскольку этот элемент конфигурации не используется в системе. На всех устройствах должно быть включено DRC.
Функциональность, связанная с функциями
Методы интерфейса HIDL API | API-интерфейс AIDL |
---|---|
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 (обратные вызовы объединены в IStreamOutEventCallback ) |
IDevice.get/setParameters IStream.get/setParameters | IModule.get/setVendorParameters IStreamCommon.get/setVendorParameters |
Устаревшие методы
Методы интерфейса HIDL API | Комментарии |
---|---|
IDevice.initCheck IDevice.close | Модуль HAL публикуется с помощью ServiceManager только при успешной инициализации. В этот момент он считается постоянным и не может быть закрыт. |
IDevice.supportsAudioPatches IStreamOut.supportsPauseAndResume IStreamOut.supportsDrain | Поддержка патчей, паузы, возобновления и слива обязательна. |
IStreamOut.getRenderPosition IStreamOut.getNextWriteTimestamp | Устаревший. |
Расширения поставщиков
В HIDL API расширения поставщиков реализуются с помощью методов getParameters
или setParameters
из интерфейсов IDevice
и IStream
. Эти методы принимают произвольные строки. В AIDL API есть соответствующие методы, такие как getVendorParameters
или setVendorParameters
, которые принимают произвольные экземпляры Parcelable
с помощью инкапсуляции внутри ParcelableHolders
.
Другие изменения
Другие общие изменения заключаются в следующем:
Чтобы улучшить тестируемость API-интерфейсов HAL, в версии AIDL мы вводим параметры отладки, которые используются тестами VTS и доступны через пакет
ModuleDebug
. Эти параметры предписывают HAL эмулировать определенные функции (например, подключение внешних устройств), которые в противном случае требуют ручного вмешательства и использования внешнего испытательного оборудования.Службы HAL необходимо перезапустить, когда для значения системного свойства
sys.audio.restart.hal
установлено значение1
. Перезапуск осуществляется черезaudioserver.rc
. При реализации HAL используйте соответствующее имя службы HAL, указанное в файлеaudioserver.rc
. В Android 14vendor.audio-hal-aidl
добавлено специально для AIDL-версии HAL.
Эффекты ХАЛ
Все интерфейсы HIDL находятся в пакете android.hardware.audio.effect@NM*
, где NM
— это версия Major.Minor . Все интерфейсы AIDL находятся в пакете android.hardware.audio.effect
.
Интерфейсы и файлы конфигурации HIDL API | API-интерфейсы AIDL |
---|---|
IEffectsFactory | IFactory |
IEffect | IEffect |
audio_effects.xml | IEffect |
Фабрика эффектов
HIDL API-интерфейсы (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.queryProcessing IFactory.queryEffects |
Интерфейсы эффектов
HIDL API-интерфейсы (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 |
Команды эффектов
HIDL API-интерфейсы (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_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 ) | IEffect.getParameter |
EFFECT_CMD_OFFLOAD | Устарело. В AIDL переключение режимов с разгрузкой и без нее обрабатывается в рамках платформы. |
EFFECT_CMD_DUMP | Обрабатывается встроенной транзакцией связывания AIBinder_dump . |
Определение параметров общего эффекта
HIDL-определение (android.hardware.audio.effect@XX) | Определение AIDL |
---|---|
Types.hal | Flags.aidl Parameter.aidl |
Определение конкретных эффектов
HIDL API-интерфейсы (android.hardware.audio.effect@XX) | API-интерфейсы AIDL (android.hardware.audio.effect) |
---|---|
I $EffectType$ .hal | $EffectType$ .aidl |