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) |