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 名称。