ALSA Jack 控制

為什麼我們需要 Jack kcontrols

ALSA 使用 kcontrols 將音訊控制(開關、音量、Mux 等)匯出到使用者空間。這意味著使用者空間應用程式(如 pulseaudio)可以在沒有插入耳機時關閉耳機並開啟揚聲器。

舊的 ALSA jack 程式碼僅為每個註冊的 jack 建立輸入裝置。這些 jack 輸入裝置無法被以非 root 身份執行的使用者空間裝置讀取。

新的 jack 程式碼為每個 jack 建立嵌入式 jack kcontrols,任何程序都可以讀取。

這可以與 UCM 結合使用,以允許使用者空間根據 jack 的插入或移除事件更智慧地路由音訊。

Jack Kcontrol 內部結構

每個 jack 都有一個 kcontrol 列表,以便我們可以建立一個 kcontrol 並將其附加到 jack,在 jack 建立階段。 我們也可以在需要時隨時將 kcontrol 新增到現有 jack。

當 Jack 被釋放時,這些 kcontrols 將自動被釋放。

如何使用 jack kcontrols

為了保持相容性,snd_jack_new() 已被修改,添加了兩個引數

initial_kctl

如果為真,則建立一個 kcontrol 並將其新增到 jack 列表。

phantom_jack

不要為 phantom jacks 建立輸入裝置。

HDA jacks 可以將 phantom_jack 設定為 true 以建立 phantom jack,並將 initial_kctl 設定為 true 以建立具有正確 id 的初始 kcontrol。

ASoC jacks 應該將 initial_kctl 設定為 false。引腳名稱將被分配為 jack kcontrol 名稱。