音訊驅動程式架構

在 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 的驅動程式可使用具有單一 Ring 緩衝區的音訊複合進行實作。

  1. 轉碼器:用於以單一 DAI 擷取硬體轉碼器。先前會使用 Codec API 的驅動程式可透過音訊複合搭配一個 DAI,可以不使用 Ring 緩衝區。

  2. DAI:用於以一個 Ring 緩衝區和一個 DAI 提取 SoC 硬體。先前使用 DAI API 的驅動程式可使用音訊複合搭配一個 DAI 和一個鈴聲緩衝區進行實作。