音频驱动程序架构

在 Fuchsia 中,您可以通过多种方式为驱动程序构建架构,具体取决于使用的驱动程序数量、通信方式及其职责。音频驱动程序的责任由提供给驱动程序客户端的接口决定,客户端可以是驱动程序设施的其他驱动程序或应用用户。

定义

术语 定义
硬件编解码器 一种真实或虚拟设备,用于对数字/模拟信号与模拟/数字之间的信号进行编码/解码,包括所有组合,例如数字到数字。示例编解码器包括 DAC 放大器组合和 ADC 转换器。
控制器或引擎 用于管理音频信号的系统的硬件部分,例如 SOC 的音频子系统。
DAI 数字音频接口。音频硬件之间的接口,例如控制器与编解码器之间的 TDM 或 PDM 链路。
环形缓冲区 对用于数据传输的共享内存区域(在主内存中)进行抽象化管理;此共享内存区域由 VMO 对象提供。

音频接口

音频驱动程序的应用/客户端用户使用的 API 是音频复合接口。此 API 允许应用访问驱动程序公开的音频硬件功能。它允许驱动程序公开各种类型硬件的功能,包括具有一个或多个 DAI 的硬件编解码器、具有环形缓冲区和 DAI 的控制器,以及音频信号处理 API 所允许的处理元素的任意组合。

音频硬件的一个常见分块是具有一个音频引擎,用于配置与音频硬件编解码器进行通信的 DAI。在此拆分中,我们可以为音频引擎提供一个驱动程序,并为编解码器提供一个驱动程序。这两个驱动程序都可以使用音频复合接口提供其相关功能。编解码器驱动程序将公开一个或多个 DAI 互连接口,音频引擎驱动程序将配置音频引擎硬件,包括连接到一个或多个编解码器驱动程序的 DAI 或 DAI。

这些驱动程序的客户端应配置所有驱动程序。此架构在具有两个不同编解码器物理连接到引擎的系统中的应用示例,例如,对 SoC 的音频子系统进行抽象化处理。

                           +-----------------+
                +----------+     Client      +----------+
                |          +-----------------+          |
                |                   |                   |
          Composite API       Composite API      Composite API
                |                   |                   |
       +-----------------+ +-----------------+ +-----------------+
       | audio subsystem | |     Codec 1     | |     Codec 2     |
       +-----------------+ +-----------------+ +-----------------+

已废弃的接口

已废弃的接口包括:

  1. StreamConfig:用于通过 audio_coreaudio-driver-ctl 捕获或呈现音频。前者是第 1 版音频系统核心(提供软件混音、路由等),后者是用于测试和启动新平台的实用程序。

以前使用 StreamConfig API 的驱动程序可以通过具有一个环形缓冲区的音频复合实现。

  1. 编解码器:用于通过一个 DAI 抽象硬件编解码器。以前使用 Codec API 的驱动程序可以使用具有一个 DAI 但没有环形缓冲区的音频复合来实现。

  2. DAI:用于通过一个环形缓冲区和一个 DAI 来抽象 SoC 硬件。以前使用 DAI API 的驱动程序可以使用具有一个 DAI 和一个环形缓冲区的音频复合来实现。