Android audio codec power consumption

2024-02-15 23:58

本文主要是介绍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()来管理codecpower,在android进入suspend的时候,调用注册的soc_suspend(),使codec进入关闭状态;在android唤醒的时候,系统会调用注册的soc_resume()来使codec进入工作状态。

但是,在有Incall或者FM的时候,为了降低系统功耗,需要将整个系统进入deep-sleep状态,目前在Incall或者FM的时候,在应用程序中强制申请了wake lock,使得系统想进deep-sleep状态的时候,无法进入,因此功耗比较大。为了解决这种功耗大的问题,必须使系统能在有Incall或者FM的时候,也能顺利进入deep-sleep状态,关闭wolfson的电,最大限度地降低功耗,提高续航能力,那么就需要在IncallFM的应用程序中释放出wake lock,使得系统想进deep-sleep状态的时候。

在系统进入deep-sleep状态的时候,系统会调用soc_suspend(),但是在kernel中要得到当前有没有Incall或者FM正在使用的情况,获取当前codec声音通道的使用状况非常困难。另外,对亮屏的时候,codec未使用的情况下,要使codec进入suspend,控制更困难。

为了更顺利的控制codecpower状态,把codec状态中的Noamalstandby控制放在ALSA中间层控制,因为在ALSA中间层,能够很方便地掌握当前声音通道的使用情况、有无PCM数据读写,因此在ALSA       中间层直接控制codecNoamalstandby状态,在deep-sleepkernel/sound中管理Off模式,两者相结合应该是比较合适的方案。

 

三、        Codec power状态控制方案

1、IncallFMATV

在打开IncallFMATV声音通道的时候,将wolfson调整为Normal状态,在关闭IncallFMATV声音通道的时候,将wolfson调整为standby状态。

 

       2PCM

在打开playback声音通道的的时候,如果当前有IncallFMATV,不改变wolfsonpower状态,如果没有IncallFMATV,则将wolfson

调整为standby状态,在向wolfson写数据之前先将wolfsonpower调整到Normal状态,然后开始写PCM数据到wolfson,在写完PCM数据后,在执行drain函数过程中,如果没有IncallFMATV,就将wolfson调整为standby状态。

在亮屏的时候,不使用wolfson时选择standby状态,因为standby状态转换到Normal的时候耗时较少(10ms<),从关闭到Normal的时候耗时要长一些(>32ms),有可能会影响实际音频效果,同时还需要考虑如何从standby到关闭状态的控制。WolfsonNormal状态到完成关闭状态大概需要522ms。另外,选择standby还可以避免wolfson开电的声音,但是需要4mA左右的开销。

 

 3deep-sleep中管理Off模式

   ALSA中间层管理wolfsonNoamalstandby状态,在执行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、  IncallFM的应用程序需要放开wake lock

 

这篇关于Android audio codec power consumption的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712915

相关文章

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤