Audio Graph Manager (AGM)
AGM 提供接口,以允许基于 TinyALSA 的混音器控制和 PCM/压缩插件进行交互,从而实现各种音频使用案例。AGM 作为 PulseAudio 服务的一部分在用户空间运行。
AGM 为混音器插件和 PCM/压缩 API 提供 API 以设置音频使用案例。它维护多个 ALSA 客户端来设置使用案例。AGM 还处理前端与后端连接的管理。
以下图表以高层次展示 AGM 模块。
对象 | 描述 |
---|---|
Session | 会话对象表示音频播放或捕获会话。当调用特定于会话的混音器控制或 API 时创建。其职责包括为 TinyALSA 插件提供配置流的 API,并管理图形和设备对象的状态转换。 |
Graph | 图形对象表示音频使用案例。它与 GSL 交互以打开、管理和关闭图形。其职责包括提供图形创建的 API、管理图形,以及配置流和设备端点。 |
Device | 设备对象表示 ALSA 声卡中的 ALSA 设备。它枚举可用的音频接口,并提供设备 API 以过渡设备状态。 |
AudioReach Graph Service (ARGS)
AudioReach 图形服务 (ARGS) 由图形服务层 (GSL)、通用数据包路由器 (GPR) 和 ACDB 管理层 (AML) 组成。它处理图形的初始化和创建,以及用于向 SPF 发送一系列命令的数据包的创建。
组件 | 描述 |
---|---|
GSL | 图形服务层 (GSL) 是一个管理图形、子图、缓冲区和配置的软件驱动程序。GSL 通过图形关键向量 (GKV) 加载和初始化图形。它处理数据命令和 SPF 模块的校准。 |
GPR | 通用数据包路由器 (GPR) 在 SPF 和图形服务库之间路由音频消息数据包。它处理构建音频图形和处理音频的命令。 |
AML | AML 提供获取/设置 API 以检索和调整音频校准数据库 (ACDB) 文件中的数据。它为音频驱动程序及其组件如何使用校准数据提供数据抽象和组织。 |
Signal Processing Framework (SPF)
信号处理框架 (SPF) 在 LPAI 子系统中运行,负责执行音频数据处理。
以下图表提供了 SPF 中使用的功能模块的高层次概述。
组件 | 描述 |
---|---|
音频处理管理器 (APM) | APM 负责在信号处理框架 (SPF) 中设置和管理使用案例图形。它向图形管理库和 APM 客户端提供标准 API,以设置和配置音频使用案例。 |
模块 | 模块是 SPF 中可寻址的功能。它负责在 LPAI 子系统内执行实时音频处理。 |
容器 | 容器是一个框架实现,帮助在同一软件线程中同时执行一组数据处理模块。每个容器实例在其自己的软件线程中运行。 |
Realization of audio use cases
每个音频使用案例表示为一个图形,由特定类型的子图组成。每个子图由一个或多个功能软件块(称为模块)组成,这些模块执行特定功能。
音频图概念和术语
用语 | 描述 |
---|---|
使用案例 | 从源端点到接收端点的模块图形,满足产品定义的使用案例。 |
图形 | 一组一个或多个连接在一起的子图的逻辑解释,用于实现特定使用案例。 |
子图 | 一组连接在一起并作为单个实体进行操作的模块的逻辑抽象。 |
容器 | 允许系统设计者在单个软件线程中将音频处理模块分组并执行的对象。 |
模块 | 信号处理框架内的最小独立处理单元。 |
键值 (KV) 对 | 键向量中单个键及其相关值。例如,键可以是声音设备,值可以是耳机、扬声器或其他某种声音设备。 |
键向量 | 通过一组 KV 对唯一标识一个图形或子图。所有 KV 对定义在:build-qcom-wayland/workspace/sources/mm-audio-headers/proprietary/mm-audio-headers/acdbdata/kvh2xml.h |
图形键向量 (GKV) | GKV 是一个唯一标识符,用于检索由多个 KV 对表示的图形。当从 QACT UI 画布创建子图时,图形或系统设计者将一组唯一的 和 关联在一起。 |
校准键向量 (CKV) | CKV 是一个唯一标识符,用于检索由多个 KV 对表示的校准数据。图形或系统设计者在存储校准数据时将一组唯一的 和 关联在一起。 |
标签和标签键向量 (TKV) | 标签是一个标识符,用于设置一个或多个模块的运行时参数。它允许在运行时更新图形内的模块配置(例如,启用/禁用回声消除或均衡等功能)。 |
Graph segments
音频使用案例由以下段组成。前端通常表示流和流处理(StreamPP)子图,而后端表示 PSPD、设备处理(DevicePP)和设备子图。
组件 | 描述 |
---|---|
流 | 提供数据读/写接口,并在数据被压缩时执行解码和编码。 |
流处理 (StreamPP) | 包含基于流的处理模块(例如,均衡器)。 |
每流每设备 (PSPD) | 包含一个模块,将流媒体格式转换为设备媒体格式。 |
设备处理 (DevicePP) | 包含用于声音设备调优的处理模块。 |
设备 | 硬件端点,例如 CodecDMA (Soundwire)、I2S 或 TDM 接口。 |
一旦前端通过路由混音控制与后端连接,完整的 GKV 就通过连接子图 GKV 和通过混音控制分配的 CKV 进行拼接。当打开前端 PCM 或压缩设备时,AGM 会调用 GSL API,使用拼接的 GKV 和 CKV 来设置 SPF 中的图形并应用校准。与此同时,AGM 打开与连接的后端相对应的内核 PCM 设备,以开始音频外设设置。
示例音频图
以下图表展示了一个播放场景的示例音频图。
在此图中:
- 流子图由一个写入共享内存端点、PCM 解码器和 PCM 转换器组成。客户端将 PCM 样本传递给写入共享内存端点。
- 如果需要转换,PCM 转换器会将 PCM 样本转换为流特定后处理模块支持的格式。
- 流子图的输出被输入到流设备子图中,该子图包含媒体格式转换器 (MFC)。MFC 将流子图 PCM 转换为设备子图 PCM 格式。
- 转换后,流设备子图的输出被输入到设备 PP 子图中进行设备特定的后处理。子图的开头放置了一个混音器,以混合输入流。
- 设备PP 子图的输出随后被输入到设备子图中,该子图包含如 I2S 驱动程序等硬件端点模块。
以下是该示例图的 GKV:
GKV1: <StreamRX1 KVs, StreamRX2 PP KVs, StreamRX1DeviceRX KVs, DeviceRX PP KVs, DeviceRX KVs>
GKV2: <StreamRX2 KVs, StreamRX2 PP KVs, StreamRX2DeviceRX KVs, DeviceRX PP KVs, DeviceRX KVs>
音频校准数据库 (ACDB)
ACDB 是一个位于应用处理器上的静态数据库。它包含 LPAI 的所有调优/校准参数。各种使用案例的不同音频模块的校准数据以可使用名为 QACT 的 PC 工具编辑的 *.acdb 文件格式组织,并放置在设备文件系统的 /etc/acdbdata/ 文件夹中。在使用案例初始化或设备切换期间,AML 会使用给定的 GKV 查询 ACDB 数据库,并将设备校准数据推送到 SPF。