从 Android 16 开始,AIDL 音频 HAL 接口完全支持可配置音频政策 (CAP)。
本页提供了必要的技术背景信息,以帮助合作伙伴和 SoC 供应商迁移其音频政策配置。
参数框架
CAP 的实现基于 Intel 参数框架。CAP 是在 Android 6 中引入的。参数框架 (PfW) 允许根据参数来描述系统。通过使用配置 XML 文件,PfW 可以使用插件将参数绑定到操作,并提供根据当前条件更改参数的规则。
HIDL 中的 CAP 结构
在 HIDL 中,CAP 的所有配置都在 XML 中指定。如需了解详情,请参阅参数框架和使用参数框架的配置。 XML 文件用于指定以下内容:
- 参数结构的说明(即 PfW 的音频网域的说明)
- 条件的定义
- 路由策略(输入和输出设备选择)的规则
- 卷表规范
借助 HIDL,Android 框架能够直接从供应商分区加载这些 XML 文件。之所以允许这样做,是因为已为这些 XML 文件定义了 XSD 架构(作为 HAL API 的一部分)。每个 HIDL HAL 主要版本都有一个对应的 XSD 架构。主要版本不需要向后兼容。
AIDL 中的 CAP 结构
随着向 AIDL 的过渡,HAL API 版本必须保持向后兼容(在 HIDL 方面,AIDL HAL 的每个版本都是“次要”更新)。XSD 架构不能再用作 HAL API 的一部分,因为没有既定的方法来定义对架构的向后兼容更新。因此,之前在 XML 文件中定义的配置现在需要由 HAL 使用 AIDL API 提供。为了实现这一点,CAP 配置的结构已转换为 AIDL,类似于 Android 15 的 AIDL 音频 HAL 中的音频政策配置 XML。
CAP 的数据结构已添加到常见的稳定版数据类型中,包括以下可序列化对象:
AudioHalCapConfiguration.aidl
AudioHalCapCriterionV2.aidl
AudioHalCapDomain.aidl
AudioHalCapParameter.aidl
AudioHalCapRule.aidl
CAP 配置的入口点位于 AudioHalEngineConfig.CapSpecificConfig
结构中。如需查看 CAP 数据结构的图表,请参阅 AudioHalCapConfiguration.aidl
中的注释。
AIDL HAL 的默认实现包含一个辅助类,该类可根据旧版 CAP XML 文件的内容填充 AIDL Parcelable,以简化合作伙伴的迁移。
迁移场景
合作伙伴可以根据产品是首次发布未使用过 CAP 的产品,还是迁移现有产品,考虑本部分中列出的选项。
新产品
对于开始使用 CAP 来实现音频政策的新产品,OEM 可以选择使用 XML 在供应商端存储 CAP 配置。
使用 XML 的好处在于,有一组脚本工具可帮助您根据高级描述生成配置。
如果 OEM 决定使用 XML 在供应商分区上存储 CAP 配置,建议使用 XML 解析器的默认实现将配置转换为 AIDL。
现有产品的更新
如果产品已使用 CAP 并因此具有 XML 配置,您可以继续将现有 CAP 与 AIDL 版本的 HAL 搭配使用。
在 CAP 配置的 HIDL 和 AIDL 版本中,产品策略的命名惯例有所不同。在 HIDL 中,内置(“旧版”)策略使用小写短名称,例如 media
;而在 AIDL 中,内置策略使用以 STRATEGY_
为前缀的全大写名称,例如 STRATEGY_MEDIA
。请参阅 CapProductStrategies.xml
中的内置策略列表。
同一文件为遵循 vx_10xx
命名模式(数字从 1000
到 1039
)的 OEM 特定策略定义了“预分配”ID。
旧版产品
如果依赖 CAP 的产品未更新其供应商分区并仍使用 HIDL,您可以将系统分区更新到 Android 16。该框架仍与旧版 CAP 配置兼容。
实现示例
为了帮助合作伙伴为其平台实现 CAP,AOSP 提供了一个“汽车”风格的 Cuttlefish 虚拟设备示例,该设备使用 CAP 和 AIDL HAL。特定于设备的配置位于 device/google/cuttlefish/shared/auto/audio/policy/engine 中,目标名称为 lunch
的 aosp_cf_x86_64_auto
。Android.bp
文件可用作生成全套 CAP 供应商文件的参考。