Android audio codec power consumption
来源:互联网 发布:模特兼职知乎 编辑:程序博客网 时间:2024/04/30 16:57
Android audio codec power consumption
一、 Codec状态
1、Off Mode;
2、Normal Operation;
3、Standby。
状态转换:
1à2:从关闭模式到正常操作模式;
1à2à3:从关闭模式到standby模式,需要先从关闭模式到正常操作模式;
3à2:从standby模式到正常操作模式;
3à1:从standby模式到关闭模式;
二、 在android kernel内核中做power consumption的难点
在kernel/sound中,有soc_suspend()、soc_resume()来管理codec的power,在android进入suspend的时候,调用注册的soc_suspend(),使codec进入关闭状态;在android唤醒的时候,系统会调用注册的soc_resume()来使codec进入工作状态。
但是,在有Incall或者FM的时候,为了降低系统功耗,需要将整个系统进入deep-sleep状态,目前在Incall或者FM的时候,在应用程序中强制申请了wake lock,使得系统想进deep-sleep状态的时候,无法进入,因此功耗比较大。为了解决这种功耗大的问题,必须使系统能在有Incall或者FM的时候,也能顺利进入deep-sleep状态,关闭wolfson的电,最大限度地降低功耗,提高续航能力,那么就需要在Incall和FM的应用程序中释放出wake lock,使得系统想进deep-sleep状态的时候。
在系统进入deep-sleep状态的时候,系统会调用soc_suspend(),但是在kernel中要得到当前有没有Incall或者FM正在使用的情况,获取当前codec声音通道的使用状况非常困难。另外,对亮屏的时候,codec未使用的情况下,要使codec进入suspend,控制更困难。
为了更顺利的控制codec的power状态,把codec状态中的Noamal和standby控制放在ALSA中间层控制,因为在ALSA中间层,能够很方便地掌握当前声音通道的使用情况、有无PCM数据读写,因此在ALSA 中间层直接控制codec的Noamal和standby状态,在deep-sleep的kernel/sound中管理Off模式,两者相结合应该是比较合适的方案。
三、 Codec power状态控制方案
1、Incall、FM、ATV
在打开Incall、FM、ATV声音通道的时候,将wolfson调整为Normal状态,在关闭Incall、FM、ATV声音通道的时候,将wolfson调整为standby状态。
2、PCM
在打开playback声音通道的的时候,如果当前有Incall、FM、ATV,不改变wolfson的power状态,如果没有Incall、FM、ATV,则将wolfson
调整为standby状态,在向wolfson写数据之前先将wolfson的power调整到Normal状态,然后开始写PCM数据到wolfson,在写完PCM数据后,在执行drain函数过程中,如果没有Incall、FM、ATV,就将wolfson调整为standby状态。
在亮屏的时候,不使用wolfson时选择standby状态,因为standby状态转换到Normal的时候耗时较少(10ms<),从关闭到Normal的时候耗时要长一些(>32ms),有可能会影响实际音频效果,同时还需要考虑如何从standby到关闭状态的控制。Wolfson从Normal状态到完成关闭状态大概需要522ms。另外,选择standby还可以避免wolfson开电的声音,但是需要4mA左右的开销。
3、deep-sleep中管理Off模式
在ALSA中间层管理wolfson的Noamal和standby状态,在执行deep-sleep过程中,如果当前系统为standby模式,就可以关闭wolfson的电,进入Off模式,否则,wolfson不进入deep-sleep模式,直接返回,不影响系统其他部分进入deep-sleep模式,达到整个系统功耗降低的效果。
四、 方案需要完成的工作
1、 修改codec WM8993的驱动,提供直接控制power状态的接口,关闭soc_suspend()、soc_resume()功能,增加状态文件/proc/alsa/powerstate作为控制状态的特殊通道,android当前系统的状态文件/sys/power/state;
2、 在ALSA中间层通过特殊通道调用驱动中的power状态的控制接口
3、 修改ALSA中间层代码,做好状态控制逻辑的管理,如hardware下alsa_default.cpp文件中;
4、 Incall、FM的应用程序需要放开wake lock。
- Android audio codec power consumption
- Optimizing IO Power Consumption
- A. Power Consumption Calculation
- 【Topics Power】Reduce Power Consumption
- Audio Codec
- 10A - Power Consumption Calculation
- Tame your Android apps power consumption — optimize for battery life
- audio:audio codec 分类小结
- power consumption/capacity unit 耗电 /电池容量
- codefore 10A . Power Consumption Calculation
- Codeforces 10A-Power Consumption Calculation(模拟)
- CodeForces 10A Power Consumption Calculation
- CF 10A Power Consumption Calculation
- CodeForces 10A - Power Consumption Calculation
- cf 10a Power Consumption Calculation
- CodeForces 10A Power Consumption Calculation
- How to port new audio codec into Android
- Audio Codec介绍-1
- 第一篇博文
- 水果皮的妙用
- 跟我一起学MiniOA:第一章 1.3 JSF标签参考(连载)
- 继承体系中 destructor 的执行次序
- Modules, User Space and Kernel Space
- Android audio codec power consumption
- 在qtopia中添加应用_arm-qtopia(基于mini2440-Friendly)
- 跟我一起学MiniOA:第一章 1.4 Richfaces控件(连载)
- 孙鑫VC学习(第13课--文档与串行化)
- Excel列名与数字的相互转换
- UIImage应用与内存管理
- 银行业务调度系统
- 基于GPT和ZFS的FreeBSD安装
- MyEclipse的Web开发上传文件到服务器