AIDL 音频 HAL
本文最后更新于 2024年5月2日 晚上
从 Android 14 开始,使用稳定的 AIDL 定义音频 HAL 接口。建议合作伙伴和 SoC 供应商重新实现其音频 HAL 以提供 AIDL 接口。
扩展 libaudiohal
库可以增加对 AIDL HAL 的框架支持。使用 AIDL 实现时,音频政策配置规范会移至 AIDL HAL。进行此更改后,音频政策管理中心 (APM) 会从 HAL 获取配置,而不是从供应商提供的 XML 文件中使用配置。
音频 AIDL HAL API
本部分将介绍适用于 AIDL 的核心 HAL、音效和通用 HAL API。
在实现与内核驱动程序进行交互的新版音频 HAL 时,请参考 /hardware/interfaces/audio/aidl/default/
中的 AIDL API 的默认实现。
如需了解 AIDL 的音频 HAL 目录结构,请参阅音频 HAL 自述文件。
Core HAL
部分使用 AIDL 的 Core HAL 关键接口如下所示:
IModule.aidl
是 API 的入口点。- 音频流是单向的,AudioFlinger 使用音频流通过
IStreamOut.aidl
和IStreamIn.aidl
向 HAL 发送音频或从 HAL 接收音频。 ITelephony.aidl
提供了特定于电话功能的控件。IBluetooth.aidl
提供 HIDL API 中IPrimaryModule
的 BT SCO 和 HFP 控件。IConfig.aidl
提供系统级配置参数。ISoundDose.aidl
提供音量支持。如需了解详情,请参阅声音剂量。- 最新版本的 Core HAL API(开发中)位于
/hardware/interfaces/audio/aidl/android/hardware/audio/core/
。 - Core HAL API 的最新版本(已发布)位于
/hardware/interfaces/audio/aidl/aidl_api/android.hardware.audio.core/
。
Effects HAL
使用 AIDL 的 Effects HAL 的一些关键接口如下所示:
IFactory.aidl
是 API 的入口点。Descriptor.aidl
包含效果实现的所有功能和属性。Capability.aidl
定义了在运行时不会变化的效果功能。Parameter.aidl
用于定义效果实例支持的所有参数。IEffect.aidl
用于配置和控制特定的效果实例。- 特定效果的 Parcelable,以该效果命名。
- 最新版本的 Effects HAL API(开发中)位于
/hardware/interfaces/audio/aidl/android/hardware/audio/effect/
。 - Effects HAL API 的最新版本(已发布)位于
/hardware/interfaces/audio/aidl/aidl_api/android.hardware.audio.effect
。
如需了解详情,请参阅音效。
Common HAL
各种 HAL(如 BT HAL、核心 HAL 和音效 HAL)共用的数据结构和接口位于通用 HAL 中。
- 通用 AIDL HAL 的最新版本(开发中)位于
/hardware/interfaces/audio/aidl/android/hardware/audio/common/
。 - 通用 HAL API 的最新版本(已发布)位于
/hardware/interfaces/audio/aidl/aidl_api/android.hardware.audio.common/current/android/hardware/audio/common/
。
常见的稳定版数据类型
HAL 和框架都使用稳定的数据结构定义。
- 稳定数据类型的最新版本(开发中)位于
/system/hardware/interfaces/media/aidl/android/media/audio/common/
。 - 稳定数据类型的最新版本(已发布)位于
/system/hardware/interfaces/media/aidl_api/android.media.audio.common.types/
。
测试 Audio AIDL HAL API
我们为 AIDL 接口提供了新的 VTS 测试。
新版 HAL 没有任何变化可能会影响安全性。
转载自Android官网,原文地址: https://source.android.com/docs/core/audio/aidl-implement?hl=zh-cn