Сравнение AIDL и HIDL Audio HAL

Начиная с Android 14, партнерам и производителям SoC рекомендуется заменить текущую реализацию HIDL HAL на реализацию AIDL HAL.

Для обеспечения плавного перехода от HIDL Audio HAL к AIDL Audio HAL на этой странице выделены некоторые ключевые различия. На этой странице также показано соответствие между интерфейсами AIDL и HIDL для Audio HAL.

Разница между реализациями Audio HAL в AIDL и HIDL

Основные различия между структурой 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 .

  • Во избежание путаницы с использованием термина «устройство» для обозначения типов аудиоустройств, в HIDL Audio HAL IDevice переименован в IModule в AIDL Audio HAL.

  • Интерфейс AIDL Audio HAL заменяет IPrimaryDevice . Этот фреймворк отправляет обновления о текущем режиме звука и повороте экрана каждому экземпляру IModule . Специальный интерфейс IBluetooth обрабатывает параметры, связанные с синхронным соединением Bluetooth (BT SCO) и профилем громкой связи (HFP). Специальный интерфейс ITelephony предоставляет элементы управления, специфичные для телефонии. Вы можете получить экземпляры обоих этих интерфейсов из основного экземпляра интерфейса IModule . Дополнительную информацию см. в сравнительных таблицах по Core HAL и функциональности, связанной с функциями .

  • В AIDL Audio HAL удалена IDevicesFactory во избежание избыточности. Модули HAL (то есть экземпляры интерфейса IModule ) теперь регистрируются непосредственно в Service Manager с использованием имен экземпляров модулей, таких как bluetooth или r_submix . Единственное исключение — primary модуль, который регистрируется под именем экземпляра default .

Сопоставление AIDL и HIDL Audio HAL

В таблицах в следующих разделах показано соответствие между интерфейсами HIDL и AIDL Audio HAL. Дополнительную информацию о структуре каталогов см. в разделе Audio HAL .

Core HAL

Все интерфейсы HIDL находятся в пакете android.hardware.audio@NM , где NM обозначает Major.Minor версию. Все интерфейсы AIDL находятся в пакете android.hardware.audio.core .

Интерфейсы API HIDL и файлы конфигурации Интерфейсы 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.getAudioPort
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
StreamDescriptor.Command.pause
.start
IStream.start
IStream.stop
(MMAP-потоки)
StreamDescriptor.Command.start или .burst
.pause (вход) и/или .flush (выход)
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> 1

<call_screen_mode_supported>
<engine_library>
Разделено на два разных метода:
ITelephony.getSupportedAudioModes
IConfig.getEngineConfig
<volumes> , ИЛИ
<volumeGroups> , <ProductStrategies>
IConfig.getEngineConfig
<surroundSound> IConfig.getSurroundSoundConfig

  1. Параметр 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
Устаревший.

Расширения поставщика

В 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.queryProcessing
IFactory.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 Устарело в разделе «Влияние» AIDL HAL
EFFECT_CMD_SET_PARAM_COMMIT Устарело в разделе «Влияние» 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

Определение специфических эффектов

Интерфейсы API HIDL
(android.hardware.audio.effect@XX)
Интерфейсы API AIDL
(android.hardware.audio.effect)
I $EffectType$ .hal $EffectType$ .aidl