Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15490095
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: LINUX

2009-11-16 16:42:39

static int snd_pcm_hw_param_mask(struct snd_pcm_substream *pcm,
                 struct snd_pcm_hw_params *params,
                 snd_pcm_hw_param_t var,
                 const struct snd_mask *val)
{
    int changed = _snd_pcm_hw_param_mask(params, var, val);
    if (changed < 0)
        return changed;
    if (params->rmask) {
        // 如果添加了新的mask->bits[]位,
        // 那么params->rmask相应var位将被置位,进而提示是该var引发了此次改变,
        // 执行如下函数,进一步执行回掉处理函数,让
        // 新的bit参数对audio系统生效[luther.gliethttp]
        int err = snd_pcm_hw_refine(pcm, params); 《浅析alsa声卡驱动snd_pcm_hw_refine函数》
        if (err < 0)
            return err;
    }
    return 0;
}

static int _snd_pcm_hw_param_mask(struct snd_pcm_hw_params *params,
                  snd_pcm_hw_param_t var,
                  const struct snd_mask *val)
{
    int changed;
    changed = snd_mask_refine(hw_param_mask(params, var), val); // 进行交集计算
    if (changed) {
        params->cmask |= 1 << var;
        params->rmask |= 1 << var; // 标识var发生改变
    }
    return changed;
}
阅读(1435) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~