- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1.ALSA声卡驱动中的DAPM详解之一:kcontrol
DAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态下。DAPM对用户空间的应用程序来说是透明的,所有与电源相关的开关都在ASoc core中完成。用户空间的应用程序无需对代码做出修改,也无需重新编译,DAPM根据当前激活的音频流(playback/capture)和声卡中的mixer等的配置来决定那些音频控件的电源开关被打开或关闭。
/*****************************************************************************************************/声明:本博内容均由/droidphone原创,转载请注明出处,谢谢!/*****************************************************************************************************/
DAPM控件是由普通的soc音频控件演变而来的,所以本章的内容我们先从普通的soc音频控件开始。
snd_kcontrol_new结
在正式讨论DAPM之前,我们需要先搞清楚ASoc中的一个重要的概念:kcontrol,不熟悉的读者需要浏览一下我之前的文章:Linux ALSA声卡驱动之四:Control设备的创建。通常,一个kcontrol代表着一个mixer(混音器),或者是一个mux(多路开关),又或者是一个音量控制器等等。 从上述文章中我们知道,定义一个kcontrol主要就是定义一个snd_kcontrol_new结构,为了方便讨论,这里再次给出它的定义:
[cpp]?view plaincopy
struct?snd_kcontrol_new?{??
????????snd_ctl_elem_iface_t?iface;?????/*?interface?identifier?*/??
????????unsigned?int?device;????????????/*?device/client?number?*/??
????????unsigned?int?subdevice;?????????/*?subdevice?(substream)?number?*/??
????????const?unsigned?char?*name;??????/*?ASCII?name?of?item?*/??
????????unsigned?int?index;?????????????/*?index?of?item?*/??
????????unsigned?int?access;????????????/*?access?rights?*/??
????????unsigned?int?count;?????????????/*?count?of?same?elements?*/??
????????snd_kcontrol_info_t?*info;??
????????snd_kcontrol_get_t?*get;??
????????snd_kcontrol_put_t?*put;??
????????union?{??
????????????????snd_kcontrol_tlv_rw_t?*c;??
????????????????const?unsigned?int?*p;??
????????}?tlv;??
????????unsigned?long?private_value;??
};??
回到Linux ALSA声卡驱动之四:Control设备的创建中,我们知道,对于每个控件,我们需要定义一个和他对应的snd_kcontrol_new结构,这些snd_kcontrol_new结构会在声卡的初始化阶段,通过snd_soc_add_codec_controls函数注册到系统中,用户空间就可以通过amixer或alsamixer等工具查看和设定这些控件的状态。
snd_kcontrol_new结构中,几个主要的字段是get,put,private_value,get回调函数用于获取该控件当前的状态值,而put回调函数则用于设置控件的状态值,而private_value字段则根据不同的控件类型有不同的意义,比如对于普通的控件,private_value字段可以用来定义该控件所对应的寄存器的地址以及对应的控制位在寄存器中的位置信息。值得庆幸的是,ASoc系统已经为我们准备了大量的宏定
您可能关注的文档
- (9-1)电阻定律欧姆定律焦耳定律及电功率(教师版)精要.doc
- (2012-2013年)CSSCI目录即中文社会科学引文索引来源期刊精要.doc
- (2015年1月22日)南京市、盐城市2015届高三年级第一次模拟考试语文试题精要.doc
- (A)资格审查表及附件精要.doc
- (submit)啁啾高斯脉冲在位相奇点附近的光谱异变精要.doc
- (必修二)世界资本主义经济政策的调整精要.doc
- (初稿)近期网格化平台建设工作方案2精要.doc
- (定稿)电子科技大学2010年《自动控制原理》考研试题答案与详解(一个手画图)精要.doc
- (房地产公司绩效考核)珠江投资绩效管理体系实施细则(很实用)精要.doc
- (鼓舞飞扬)户外体验课活动设计课前准备课堂实施课后总结精要.doc
文档评论(0)