Android audio codec power consumption

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。

 

时间: 2024-10-26 04:38:34

Android audio codec power consumption的相关文章

RTP Payload Format for Opus Speech and Audio Codec

[Docs] [txt|pdf] [Tracker] [WG] [Email] [Diff1] [Diff2] [Nits] Versions: (draft-spittka-payload-rtp-opus) 00 01 02 03 04 05 06 07 08 09 10 11 RFC 7587 Network Working Group J. Spittka Internet-Draft Intended status: Standards Track K. Vos Expires: Ja

如何在Android平板电脑POWER按钮菜单中添加休眠功能

1.修改/frameworks/base/core/res/res/values/strings.xml 在此声明几个变量: <!-- 新增的屏幕休眠的item  --> <string name="global_action_sleep">Sleep</string> <!-- 新增sleep字符串 --> <string name="sleep">Sleep</string> <!--

android 添加按(power键)电源键结束通话(挂断电话)_Android

首先我们发现现在我们所用的android智能手机大部分都有当你在打电话时按power键来挂断电话,一般都是在设置中. 我主要是在原生源码中添加这一功能,主要用于学习....先看一张图:  看到那个按电源键挂断电话吧,那就是我所添加的,本来原生源码中是没有这一栏的..... 大概思路: 首先我先添加这一个checkboxPreference,然后将是否选择这一功能的值(0和1)存到data/data/com.android.providers.settings /databases/setting

android 添加按(power键)电源键结束通话(挂断电话)

首先我们发现现在我们所用的android智能手机大部分都有当你在打电话时按power键来挂断电话,一般都是在设置中. 我主要是在原生源码中添加这一功能,主要用于学习....先看一张图:   看到那个按电源键挂断电话吧,那就是我所添加的,本来原生源码中是没有这一栏的..... 大概思路: 首先我先添加这一个checkboxPreference,然后将是否选择这一功能的值(0和1)存到data/data/com.android.providers.settings /databases/settin

Power Profiles for Android

Power Profiles for Android  IN THIS DOCUMENT Battery Usage Statistics Power Profile Values Computing power consumption for individual components Controlling and Measuring System Suspend State Controlling and Measuring CPU Speeds Measuring Screen Powe

Android支持的媒体格式

作为一个应用程序的开发者,你可以免费使用在Android设备上有效的任何格式的媒体编解码器,包括由Android平台和设备特殊提供的编解码器.但是,最好的做法是使用设备无关的媒体编码配置文件. 网络协议 以下是音视频播放所支持的网络协议: 1. RTSP(RTP.SDP) 2. HTTP/HTTPS实时流 3. HTTP/HTTPS Live Streaming草案协议: 只针对MPEG-2 TS流媒体媒体文件; 协议版本3(Android4.0以上) 协议版本2(Android3.x) And

Android 6.0 Changes

Android 6.0 变化   Android 6.0 Changes In this document 运行时权限Runtime Permissions Doze and App Standby 阿帕奇 HTTPClient 移除 Apache HTTP Client Removal OpenSSL 的分支 BoringSSL BoringSSL 访问硬件标识 Access to Hardware Identifiers 通知 Notifications 音频管理变化 AudioManage

android智能手机项目开发小结

 android智能手机开发项目小结        从上周六到截至今天下班时,历时一个星期,把一个客户的新项目的板子bring up起来,目前的状态是这个双卡双待的手机能正常运行,LCD色彩.声音.GSM call.sensor.camera.touchkey.keypad.backlight.fm.headphone等都正常工作,可以送QA作进一步的测试,还是有一些需要继续优化的地方.下周跟QA同志们,hardware同志们一起努力,争取客户样机早一点量产.下面就遇到的问题做一个小结吧!  

Android 开发之 ---- 底层驱动开发(一) 【转】

转自:http://blog.csdn.net/jmq_0000/article/details/7372783 版权声明:本文为博主原创文章,未经博主允许不得转载. 驱动概述         说到 Android 驱动是离不开 Linux 驱动的.Android 内核采用的是 Linux2.6 内核 (最近Linux 3.3 已经包含了一些 Android 代码).但 Android 并没有完全照搬 Linux 系统内核,除了对Linux 进行部分修正,还增加了不少内容.android 驱动