从 Android 16 开始,AIDL 音频 HAL 接口完全支持可配置音频政策 (CAP)。
本页面提供了必要的技术背景信息,以协助合作伙伴和 SoC 供应商迁移其音频政策配置。
参数框架
CAP 的实现基于 Intel 参数框架。CAP 是在 Android 6 中引入的。借助参数框架 (PfW),您可以使用参数来描述系统。通过使用配置 XML 文件,PfW 会使用插件将参数绑定到操作,并提供用于根据当前条件更改参数的规则。
HIDL 中的 CAP 结构
在 HIDL 中,CAP 的所有配置均在 XML 中指定。如需了解详情,请参阅参数框架和使用参数框架的配置。 XML 文件用于指定以下内容:
- 参数结构的说明(即 PfW 的音频领域的说明)
- 条件定义
- 路由策略规则(输入和输出设备选择)
- 卷表规范
借助 HIDL,Android 框架能够直接从供应商分区加载这些 XML 文件。之所以允许这样做,是因为在 HAL API 中为这些 XML 文件定义了 XSD 架构。HIDL HAL 的每个主要版本都有对应的 XSD 架构。主要版本不需要向后兼容。
AIDL 中的 CAP 结构
随着向 AIDL 的过渡,HAL API 版本必须保持向后兼容性(在 HIDL 术语中,AIDL HAL 的每个版本都是“次要”更新)。XSD 架构无法再用作 HAL API 的一部分,因为没有定义向后兼容的架构更新的既定方法。因此,HAL 现在需要使用 AIDL API 提供之前在 XML 文件中定义的配置。为此,CAP 配置的结构会转换为 AIDL,类似于 Android 15 的 AIDL 音频 HAL 中的音频政策配置 XML。
CAP 的数据结构已添加到常见的稳定版数据类型,其中包括以下 Parcelable:
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 与 HAL 的 AIDL 版本搭配使用。
产品策略的命名惯例在 CAP 配置的 HIDL 和 AIDL 版本中有所不同。在 HIDL 中,内置(“旧版”)策略使用小写缩写名称(例如 media
),而在 AIDL 中,内置策略使用以 STRATEGY_
开头的全大写名称(例如 STRATEGY_MEDIA
)。请参阅 CapProductStrategies.xml
中的内置策略列表。同一文件为 OEM 专用策略定义了“预分配”ID,这些 ID 遵循 vx_10xx
的命名模式,数字介于 1000
和 1039
之间。
旧版产品
如果依赖于 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 供应商文件的参考。