在 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 |
+-----------------+ +-----------------+ +-----------------+
已淘汰的介面
已淘汰的介麵包括:
- StreamConfig:透過 audio_core 和 audio-driver-ctl 擷取或轉譯音訊。前者是音訊系統核心 (提供軟體混合、轉送等) 的第 1 版,後者則用於測試及啟動新平台。
先前使用 StreamConfig API 的驅動程式可使用具有單一 Ring 緩衝區的音訊複合進行實作。
轉碼器:用於以單一 DAI 擷取硬體轉碼器。先前會使用 Codec API 的驅動程式可透過音訊複合搭配一個 DAI,可以不使用 Ring 緩衝區。
DAI:用於以一個 Ring 緩衝區和一個 DAI 提取 SoC 硬體。先前使用 DAI API 的驅動程式可使用音訊複合搭配一個 DAI 和一個鈴聲緩衝區進行實作。