zoukankan      html  css  js  c++  java
  • 触发DAPM机制的时机

    概述

    DAPM机制的入口函数是 dapm_power_widgets。

    所谓dapm机制简单来说就是遍历声卡上所有标记为dirty的widget,根据widgets之间path实例的connect状态决定widget和源/目的 widget是否连通。
    找到连通的源/目的widget,把其标记为dirty后重复上述操作。直到找到完整音频路径同时路径上的widget上电。不在完整音频路径上的widget下电。

    完整音频路径就是起始端和结束端都是端点widget的路径。

    触发DAPM机制的四种情况

    1: 声卡初始化阶段,snd_soc_dapm_new_widgets函数遍历声卡上的所有widgets,创建和注册widget相关的kcontrols后,会触发扫描。
    snd_soc_instantiate_card-->
       snd_soc_dapm_new_widgets-->
         dapm_power_widgets

    2: 用户空间通过amix等应用程序配置widget相关的dapm kcontrols,会在kcontrol的put()回调函数里触发dapm扫描。

    snd_soc_dapm_mixer_update_power
    snd_soc_dapm_mixer_update_power-->
       soc_dapm_mixer_update_power-->
         dapm_power_widgets

    snd_soc_dapm_put_volsw
    snd_soc_dapm_put_volsw-->
       soc_dapm_mixer_update_power-->
         dapm_power_widgets

    snd_soc_dapm_mux_update_power
    snd_soc_dapm_mux_update_power-->
       soc_dapm_mux_update_power-->
         dapm_power_widgets

    snd_soc_dapm_put_enum_double
    snd_soc_dapm_put_enum_double-->
       soc_dapm_mux_update_power-->
         dapm_power_widgets

    snd_soc_dapm_mixer_update_power,snd_soc_dapm_mux_update_power。这两个函数是asoc core API,用在kcontrol自定义的put()回调函数里。
    snd_soc_dapm_put_volsw,snd_soc_dapm_put_enum_double。这两个函数是asoc core提供的默认put()回调函数。

    注意目前只能配置mux、mixer、switch widget类型的kcontrols。换句话就是用户空间只能通过mux、mixer、switch kcontrols配置音频路径。

    3: pcm设备文件打开或关闭,pcm core 发送stream event 给dapm core,调用snd_soc_dapm_stream_event()触发扫描。
    snd_soc_dapm_stream_event-->
       soc_dapm_stream_event-->
       dapm_power_widgets

    stream启动触发dapm扫描时如果没有得到完整音频路径的话,扫描就会失败,pcm设备文件打卡失败。

    4: 音频驱动程序在改变了某个widget并把它加入到dapm_dirty链表后,主动调用 snd_soc_dapm_sync或者snd_soc_dapm_sync_unlocked函数触发扫描操作。

  • 相关阅读:
    WPF Style和Template
    WPF自定义命令
    Vue-cli proxyTable 解决开发环境的跨域问题
    mongoose 获取某个存在的collecion 里的数据
    express+mongodb+mongoose简单入门
    服务器环境配置nginx / php / php-fpm(一)
    vue 循环前十条数据
    nodejs express的基本用法
    nodejs querystring
    nodejs fs.readFile
  • 原文地址:https://www.cnblogs.com/bobfly1984/p/13966890.html
Copyright © 2011-2022 走看看