音频架构总结1.ppt_第1页
音频架构总结1.ppt_第2页
音频架构总结1.ppt_第3页
音频架构总结1.ppt_第4页
音频架构总结1.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

音频架构总结1.ppt.ppt 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MobileTerminationDev DivisionMinkunYe android音频架构 Abstract Target 本文的目的是分析Android操作系统中audio系统架构的大概流程 包括ALSA框架介绍 codec通路切换 DAPM控制等 并分析调试codec过程中遇到的一些问题 Audience 从事嵌入式开发的软件工程师 2020 1 30 Contents 音频系统简介alsa架构介绍codec通路切换介绍rt5625驱动介绍 2020 1 30 Contents 音频系统简介alsa架构介绍codec通路切换介绍rt5625驱动介绍 2020 1 30 audio框架图 2020 1 30 audio系统综述 audio系统在android中负责音频方面的数据流控制和传输 也负责对音频设备的管理 主要层次如下 1 media库提供的Audio系统本地部分接口 2 AudioFlinger作为Audio系统的中间层 3 Audio的硬件抽象层提供底层支持 4 Audio接口通过JNI和Java框架提供给上层 各个层次接口主要提供了两个方面的功能 播放 track 和录音 recorder 2020 1 30 代码分布 android系统的代码分布情况如下所示 1 Audio的Java部分代码路径 nvidia ics frameworks base media java主要包含AudioManager和Audio系统的几个类 2 Audio的JNI部分代码路径 nvidia ics frameworks base core jni生成库libandroid runtime so Audio的JNI是其中的一个部分 3 Audio的本地框架部分头文件路径 nvidia ics frameworks base include media源代码路径 nvidia ics frameworks base media libmediaAudio本地框架是media库的一部分 本部分内容被编译成库libmedia so 提供Audio部分的接口 包括基于Binder的IPC机制 4 AudioFlinger代码路径 nvidia ics frameworks base services audioflinger这部分内容被编译成库libaudioflinger so 它是Audio系统的本地服务部分 5 Audio的硬件抽象层接口头文件路径 nvidia ics hardware libhardware legacy include hardware legacy代码路径 nvidia ics hardware libhardware legacy audionvidia ics vendor nvidia tegra hal libaudio libaudioalsaAudio硬件抽象层的实现在各个系统中可能是不同的 需要使用代码去继承相应的类并实现它们 作为Android系统本地框架层和驱动程序接口 在这里audio的硬件抽象层提供给硬件的接口 供audioflinger调用 audio的硬件抽象层是各个平台开发过程中需要重点关注和独立完成的部分 2020 1 30 audio各个层次的对应关系 Audio系统的核心框架在media库中提供 如上图所示主要实现AudioSystem AudioTrack和AudioRecorder三个类 2020 1 30 meida库中Audio部分的结构 从功能上看 AudioSystem负责的是Audio系统的综合管理功能 而AudioTrack和AudioRecorder分别负责音频数据的输出和输入 即播放和录制 2020 1 30 audio本地代码 AudioFlinger是Audio系统的中间层 在系统中起到服务作用 它主要作为libmedia提供的Audio部分接口的实现 核心文件是AudioFlinger h和AudioFlinger cpp 提供了类AudioFlinger 这个类是一个IAudioFlinger的实现 AudioFlinger主要提供createTrack 创建音频的输出设备IAudioTrack openRecord 创建音频的输入设备IAudioRecord 另外包含的就是一个get set接口 用于控制其主要接口 如下所示 2020 1 30 audio硬件抽象层 1 Audio的硬件抽象层是AudioFlinger和Audio硬件的接口 在各个系统的移植过程中可以有不同的实现方式 目前在NVIDIA平台上是基于linux标准的ALSA音频驱动 2 接口路径 nvidia ics hardware libhardware legacy audio与nvidia ics vendor nvidia tegra hal libaudio libaudioalsa 在nvaudioalsa h里定义了类NvAudioALSAStreamOut和NvAudioALSAStreamIn 分别对应音频的输出环节和输入环节 其中负责数据流的接口分别是NvAudioALSAStreamOut write和NvAudioALSAStreamIn read 3 对于ALSA驱动程序 一般不是直接调用设备节点 而是先实现用户空间的alsa lib 然后audio硬件抽象层通过调用alsa lib来实现 以nvidia平台为例 调用alsa库操作到底层驱动寄存器的直接接口路径如下 nvidia ics device nvidia ventana hal libaudio libaudioalsa 下一个主题我们就分析下ALSA架构 2020 1 30 Contents 音频系统简介alsa架构介绍codec通路切换介绍rt5625驱动介绍 2020 1 30 AdvancedLinuxSoundArchitecture 2020 1 30 alsa架构简介 2020 1 30 声卡打开流程图 2020 1 30 alsaamixer alsa amixer命令 可以说是基于文本下的图形界面 容易设置 对于实践开发过程中 应用层就是通过alsa amixer命令去配置音频codec的mixer开关 mux对路选择 volume值等 如下是在控制端输入alsa amixer help 2020 1 30 alsaamixer 1 root android system bin alsa amixercontrols 使用此命令可以列出当前alsa里面添加的controls的简单信息 如下 numid 36 iface MIXER name HeadphoneJackSwitch numid 32 iface MIXER name DSPFunctionSwitch numid 23 iface MIXER name DSPVOICESwitch 2 root android system bin alsa amixer使用此命令会列出所有controls的详细信息 如下 Simplemixercontrol SDI2TXMux 0Capabilities enumItems IF1 IF2 Item0 IF1 表示可选状态为IF1 IF2 当前状态为IF1 3 alsa amixercset 通过此命令可对control进行在线控制 如下 alsa amixercsetnumid 132 iface MIXER name StereoADCMIXLADC1Switch 4 alsa alsactlalsa alsactlstore 该命令生成 etc asound state文件 显示当前alsa中contols的配置情况 可以根据该文件检查codec的状态是否正确 2020 1 30 Contents 音频系统简介alsa架构介绍codec通路切换介绍rt5625驱动介绍 2020 1 30 android音频状态与音频通路 android的音频通路管理主要是在AudioPolicyManagerBase中完成的 包括音量管理 音频策略 strategy 管理 输入输出设备管理 如下是android音频模式状态图 2020 1 30 android把10种streamtype归纳为4种路由策略 AudioPolicyManagerBase getStrategy根据stream type 返回对应的routing strategy值 也即对应的路由策略 AudioPolicyManagerBase getDeviceForStrategy则根据routing strategy 返回可用的devices 所以android设置音频通路时会先根据getStrategy和getDeviceForStrategy函数获取相应的输出 输入设备 然后通过setOutputDevice函数调用到ALSA硬件抽象层 最后控制到底层驱动 audio路由策略 2020 1 30 audio音频切换 真正的音频切换是在文件 device malata bluesky hal libaudio libaudioalsa nvaudioalsa cpp里的函数NvAudioALSADevRoute NvAudioALSADev hDev uint32 tdevices intmode 2020 1 30 Contents 音频系统简介alsa架构介绍codec通路切换介绍rt5625驱动介绍 2020 1 30 编解码器 codec 是用来指进行数据转换的集成电路或芯片 在这种情况下 它是由编码器 coder 和译码器 decoder 这两个词的词头组成的缩写词 这种类型的编解码器将模拟数字转换 analog to digitalconversion 和数字模拟转换 digital to analogconversion 功能结合在一个单芯片上 codec基本原理及RT5625通路图 2020 1 30 驱动移植 根据硬件接法修改tegra rt5625 c文件目录 kernel sound soc tegra name RT5625 stream name RT5625HiFi codec name rt5625 0 001f platform name tegra pcm audio cpu dai name tegra20 i2s 0 codec dai name rt5625 hifi init tegra rt5625 init ops tegra rt5625 ops 上面跟硬件相关的配置为codec name 红色的 f为设备地址 这个是要看如图上的 接法 上拉为1f 接地为1e codec dai name看codec的I2S跟cpu的I2S0还是I2S1相接 上面显示是接到I2S0 2020 1 30 驱动移植 修改驱动rt5625 c文件目录 kernel sound soc codecs这里的codec名字很重要 Machine驱动定义的snd soc dai link中会指定每个link的codec和dai的名字 进行匹配绑定时就是通过和这里的名字比较 从而找到该Codec的 具体的要查看代码的流程 2020 1 30 DAPM控制 codec输入输出选择 音量控制 各个部分的power都会通过control和widgets注册到不同的LIST中供ALSA和用户使用 1 widgetwidget可以认为是CODEC内部各个部件 对widget的管理和控制都是在soc dapm c中实现的 如下 SND SOC DAPM PGA INLVOL RT5642 PWR VOL RT5642 PWR IN L BIT 0 NULL 0 SND SOC DAPM PGA INRVOL RT5642 PWR VOL RT5642 PWR IN R BIT 0 NULL 0 SND SOC DAPM PGA会把widget对应的信息添加到codec dapm widgets中 包括id reg shift max等 id用来区分不同的widget类型 不同的id 它的控制方式也不同 codec通过snd soc add controls和snd soc dapm new controls两个函数将widget添加到不同的list里 其中snd soc dapm add routes函数是把rt5642 dapm routes里的信息添加到list里 2020 1 30 DAPM控制 2 control驱动中的widget属性以不同的control形式添加到list中 包括volume gpio等 大部分的control通常以volume和switch结尾 如下 SOC SINGLE MonoPlaybackSwitch RT5642 MONO OUT RT5642 L MUTE SFT 1 1 defineSOC SINGLE xname reg shift max invert iface SNDRV CTL ELEM IFACE MIXER name xname info snd soc info volsw get snd soc get volsw put snd soc put volsw private value SOC SINGLE VALUE reg shift max invert 2020 1 30 DAPM控制 3 audio map对于audio map是一个帮助我们走通及切换通路的很重要的部分 主要也是对电源进行合理控制 以rt5625为例 audio map的类型如下所示 structsnd soc dapm route constchar sink constchar control constchar source 理解为 目的地 控制条件 源头 每个通路在CODEC内部被分为好几个部分 也就是widget与widget之间的连接路径 每个widget都可以做为一个数据流的源头或目的地 通过控制条件来实现widget之音的连接和断开 下面我们就举一个例子来说明具体的实现流程 2020 1 30 DAPM控制 如喇叭播放音乐的具体通路如下 I2S IN DACSDVOL HPMixer SPK OUT SPK OUTN在audio map的路径如下 SPKL NULL SPKAmp SPKL NULL SPKLVolInputMux SPKR NULL SPKRVolInputMux SPKLVolInputMux HPMixer HPMixer SPKRVolInputMux HPMixer HPMixer HPMixer NULL LeftHPMixer HPMixer NULL RightHPMixer LeftHPMixer DACSwitch LeftDACToMixer RightHPMixer DACSwitch RightDACToMixer LeftDACToMixer NULL LeftDAC RightDACToMixer NULL RightDAC LeftDAC NULL DACRef LeftDAC NULL DACfunMux DACfunMux StereoDAC AIF1RX 从上可看出SPKLVolInputMux即可是SPKL的源 source 也可以是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论