總覽
訊號處理介面可供音訊複合驅動程式使用。
這個介面 SignalProcessing
是由 Composite
通訊協定用於提供的 FIDL 通訊協定
以及音訊訊號處理功能
SignalProcessing
通訊協定是用於控制訊號處理硬體及其
拓撲我們將處理元素 (PE) 定義為提供的音訊資料處理邏輯單元
我們將拓撲定義為管道中 PE 的安排方式,
所有控制項
SignalProcessing
通訊協定可讓硬體廠商以穩定版實作驅動程式
應用程式二進位檔介面 (ABI),並讓系統整合商設定驅動程式以執行
在執行階段使用這些介面,視系統或產品需求而定
儲存空間設定
SignalProcessing
通訊協定構成 Reader
信號處理通訊協定。信號處理
只會擷取資訊的方法包含在 Reader
通訊協定中,其他的方法包含在
SignalProcessing
通訊協定本身。這個區隔可讓這個介面的用戶端
如果要求提供唯讀,Reader
會將信號處理通訊協定加入自己的通訊協定
功能子集
SignalProcessing
通訊協定和相關定義包含在
fuchsia.hardware.audio.signalprocessing
FIDL 程式庫。
拓撲
每個驅動程式庫都有專屬的拓撲。驅動程式可從應用程式拓撲中提取
視特定設定或產品的需求時,由其他驅動程式公開。請注意
但不一定要向應用程式公開拓撲,尤其是 audio_core
。
注意:
- 拓撲並不是用來完整說明音訊管道狀態/格式/設定 每一位產品專家的實際經驗目的在於說明用戶端可以變更/重新排列的項目 可依知識、設定 (例如來自中繼資料) 和特定商業邏輯執行。
- 提供
Composite
通訊協定的音訊驅動程式使用的拓撲必須包含ENDPOINT
為驅動程式庫支援的環形緩衝區和 DAI 互連網路提供 ID。
處理元素
PE (在 fuchsia.hardware.audio.signalprocessing
FIDL 程式庫中定義為 Element
)
應由特定驅動程式庫管理的硬體提供功能 (
模擬軟體和其他驅動程式庫功能)。管道是由一或多位 PE 組成
且拓撲是由一或多個管道組成
我們將伺服器視為提供信號處理通訊協定的驅動程式庫。
我們稱客戶為功能的使用者,例如使用 audio_core
之類的應用程式。
基本作業
用戶端必須負責要求,並設定任何信號處理功能。
伺服器回覆客戶的 GetElements
提供 PE 後,用戶端
發出 WatchElement
呼叫 (請參閱「懸掛取得模式」),以擷取
以便視需要動態控制 PE 參數,例如 PE 狀態和 SetElementState
。適用對象
執行個體,如要擷取 type
GAIN
中 PE 的 gain
,用戶端問題
WatchElement
呼叫,用於擷取初始狀態 (驅動程式庫會回覆
第一個 WatchElement
),以及後續接收更新的通知
移至包含 gain
的 ElementState
。同樣地,擷取 PE 狀態
type
EQUALIZER
的 bands_state
由多個錶帶組成,用戶端會
發出 WatchElement
,以便擷取初始狀態 (驅動程式庫會回覆
第一個 WatchElement
),包括用於以下執行個體的 frequency
欄位:frequency
每個錶帶
伺服器透過回覆用戶端的 GetElements
提供 PE 後,用戶端
可能會使用 GetTopologies
方法要求可用的拓撲。如果有多個拓撲
GetTopologies
傳回的,則 SetTopology
可用於挑選要使用的拓撲。
GetElements
GetElements
可讓您視需要取得所有 PE 的清單。舉例來說,這個方法
由用戶端在抽象的硬體轉碼器上呼叫。已知產品專家清單上
用戶端可能會根據 PE 類型公開的參數來設定 PE。
SetElementState
SetElementState
可讓用戶端使用
GetElements
。不同類型的 PE 可能會向用戶端公開不同的狀態,
SetElementState
參數 state
的類型會因 PE 類型而異。
WatchElement
WatchElement
可讓用戶端使用
GetElements
。不同類型的 PE 可能會向用戶端公開不同的狀態,
WatchElement
參數 state
的類型會因 PE 類型而異。
產品專家的 state
由用戶端透過呼叫
SetElement
,或者呼叫 SetElement
不同 PE,或完全獨立於用戶端 (例如插頭偵測變更) 之外。
GetTopologies
GetTopologies
可讓您視需要取得拓撲清單。舉例來說,
由用戶端在抽象的硬體轉碼器上呼叫。確認拓撲清單後
用戶端則可能會將伺服器設為使用特定拓撲。
SetTopology
SetTopology
可讓用戶端控制伺服器使用的拓撲。僅限 1 個
您隨時可以選取拓撲
處理元素類型
GetElements
傳回的 PE 支援多種信號處理
由產品專家類型和參數定義PE 類型定義了標準信號處理方式 (例如 GAIN
、
DELAY
、EQUALIZER
等)、供應商專屬的信號處理 (VENDOR_SPECIFIC
例如,不是
SignalProcessing
通訊協定中定義的) 和 CONNECTION_POINT
/ENDPOINT
,用來建構
多管道拓撲 (允許管道開始、結束、轉送及混合定義,請參閱
請參閱下方的連線點和端點})。
每位 PE 可能會有一或多個輸入內容,以及一或多個輸出管道。對於轉送和 因為 PE 可能會提供不同的輸出管道和輸入管道的數量。
PE 可能會變更各個管道的資料 (也就是處理的信號)。例如
表示管道中有 AGL
類型的單一 PE,其中包含 ENDPOINT
類型的
DAI_INTERCONNECT
,DaiFormat
number_of_channels
設為 2,然後 AGL (自動增益)
限制) 可呼叫 SetElementState
來啟用或停用 2 個管道
state
enable
設為 true 或 false (假設已設定 AGL Element
s can_disable
設為 true)。
如果不包含不同 PE 類型中的選填欄位,請輸入處理狀態
則不會變更特定欄位的相關元素。舉例來說
SetElement
中的 EqualizerBandState
不包含選用的 frequency
,然後
等化器的頻帶頻率狀態未變更。
供應商專屬資料
ElementState
vendor_specific_data
是可為任何
來處理元素如此一來,處理元素就能指定要傳送
至 SetElementState
的駕駛人,或直接在
WatchElementState
。
VENDOR_SPECIFIC
類型的處理元素除了可用於任何類型的不透明資料外,還可以允許
這些驅動程式會指定未在 SignalProcessing
通訊協定中定義的類型,例如
非標準或不適合使用的標準參數
目標供應商VENDOR_SPECIFIC
類型的處理元素未指定任何
TypeSpecificElement
參數,而是可能會指定傳送或接收的不透明資料。
使用 ElementState
vendor_specific_data
參數和任何其他相同
處理元素類型
拓撲
GetTopologies
傳回的拓撲支援對
GetElements
。「GetTopologies
」可以宣傳一或多個拓撲。
一個拓撲
如果廣告有一個拓撲,例如 GetTopologies
會傳回含有一個元素的向量,那麼所有 PE 就會
屬於這個明確的單一管道的一部分在這個情況下,順序明確。舉例來說
GetElements
會傳回 2 位 PE:
Element
:id = 1,類型 =AUTOMATIC_GAIN_LIMITER
(AGL)Element
:id = 2,類型 =EQUALIZER
(EQ)
GetTopologies
傳回的 Topology
元素會列出 id
和
processing_elements_edge_pairs
向量明確地宣傳信號處理的順序
執行此範例:
Topology
:id = 1,processing_elements_edge_pairs
= 含有一個元素的向量processing_element_id_from
= 1,processing_element_id_to
= 2。
這會透過一個管道通告這個拓撲:
+-------+ +-------+
Input signal -> | AGL | -> + EQ | -> Output signal
+-------+ +-------+
在這個拓撲中,其開頭為 (輸入信號會輸入至管道) 和結尾
管道 (輸出訊號是來自管道的輸出) 是隱含的。可以製作
對類型為 ENDPOINT
的 PE 明確定義 (請參閱下方端點)。
如果只宣傳一個拓撲,則內容僅提供參考資訊,因為客戶無法 變更一個拓撲的用法
多個拓撲
如果宣傳多個拓撲,例如 GetTopologies
會傳回包含多個元素的向量,
PE 可以用於多種設定,如拓撲每個拓撲都會明確列出
一些產品專家及其順序 (在這個案例中,順序為明確的排序)。排列方式
依產品專家排序會定義管道。
只列出 PE 支援的具體安排和順序,伺服器限制了 都是有效的管道組合
舉例來說,如果 GetElements
傳回 6 個 PE:
Element
:id = 1,類型 =AUTOMATIC_GAIN_LIMITER
(AGL)Element
:id = 2,類型 =EQUALIZER
(EQ)Element
:ID = 3,類型 =SAMPLE_RATE_CONVERSION
(SRC)Element
:ID = 4,類型 =GAIN
Element
:id = 5,類型 =DYNAMIC_RANGE_COMPRESSION
(DRC1)Element
:id = 6,類型 =DYNAMIC_RANGE_COMPRESSION
(DRC2) 參數與 DRC1 參數。
GetTopologies
傳回的 Topology
元素會列出 id
和
每個拓撲的 processing_elements_edge_pairs
,在本例中如下:
Topology
:ID = 1,processing_elements_edge_pairs
= *handle_element_id_from= 3 and
processing_element_id_to= 2. *. processing_element_id_from
= 2,processing_element_id_to
= 4。 *Process_element_id_from= 4 and
processing_element_id_to= 5. *. processing_element_id_from
= 5,processing_element_id_to
= 1。Topology
:id = 2、processing_elements_edge_pairs
= *handle_element_id_from= 2 and
processing_element_id_to= 4. *. processing_element_id_from
= 4,processing_element_id_to
= 6。
這會公告兩個拓撲,且每個拓撲各有一個管道:
+-------+ +-------+ +-------+ +-------+ +-------+
Input signal -> | SRC | -> + EQ | -> + GAIN | -> + DRC1 | -> + AGL | -> Output signal
+-------+ +-------+ +-------+ +-------+ +-------+
+-------+ +-------+ +-------+
Input signal -> | EQ | -> + GAIN | -> + DRC2 | -> Output signal
+-------+ +-------+ +-------+
連接點
CONNECTION_POINT
類型的 PE 允許:
- 在單一管道中混合使用多個管道。
- 混合來自不同管道的多個頻道。
- 重複頻道。
- 將單一管道擴展成多個管道管道 (散佈)。
端點
ENDPOINT
類型的 PE 是選擇性的 (即使在使用 CONNECTION_POINT
的情況下),
透過明確的起始輸入和結尾輸出內容完成管道結構。不過,
提供 Composite
通訊協定的驅動程式,所有支援的環形緩衝區或 DAI 互連網路都必須
列為 ENDPOINT
,類型為 RING_BUFFER
和 DAI_INTERCONNECT
,並由 GetElements
傳回。
Composite
通訊協定 API 需要端點 PE ID,才能識別環形緩衝區和 DAI
以及內插設定
如果沒有指定 ENDPOINT
,表示沒有邊緣的 PE 會是輸入值,而且 PE 沒有
輸出邊緣即為輸出內容舉例來說
上述的多個拓撲包含兩個拓撲,且每個拓撲都有一個
拓撲 ID 1 中的單一管道以 PE ID 3 為開頭,結尾是 PE ID 1,
拓撲 ID 2 的單一管道以 PE id 2 開頭,結尾是 PE ID 6。