Android_Audio架构全分析
Page ? * Android Audio 主要内容: 项目背景 项目平台及Android Audio整体框架 Android Audio Hardware 和驱动详细分析 1、项目背景 Android系统迅速崛起,其市场占有率已经超越iOS和Symbian成为第一大智能设备操作系统。作为一个开源的系统,Android被越来越多的硬件厂家所支持,使得Android被大量应用在智能手机和平板电脑。 多媒体应用向来是3C电子产品中的一个永恒话题,作为一个智能操作系统,Android自然少不了多媒体应用,正是在这种背景下,本项目分析Android Audio的基本框架以及底层驱动的实现。 1.1、项目平台和功能 平台: 硬件平台:smdkc100、WM9714 软件平台:Android 2.1、Linux kernel 2.6.29、alsa-lib 1.0.19、alsa-utils 1.0.19 功能: 使用 Music App 播放音频文件 使用 SoundRecorder App进行录音 2.1、Android 2.1 Audio 框架分析 Music PacketVideo Open Core Platform Hardware 2.2、Android 2.1 Audio 框架分析 用户空间 内核空间 ALSA lib ALSA 框架 ASoc 驱动 ALSA lib 用于对底层驱动进行封装,以方便应用程序的编写;ALSA 框架对底层驱动进行封装,然后对应用程序提供一个统一的接口;ASoc 驱动是基于 ALSA 框架的驱动,它的主要思想是将板级相关的代码和芯片相关的代码分离,以提供驱动程序的移植性。 3.1、Hardware Android 2.1 自带 Audio Hardware : 用于实现将PCM流输出到文件,可以用来测试音频解码是否正确。 实现基于特定驱动(eac)的通用Audio硬件抽象层 实现一个虚拟的Audio硬件抽象层,这个实现不操作实际的硬件和文件,它所进行的是空操作,在系统没有实际的Audio设备时使用这个实现可以保证系统的正常运行。 3.1、Hardware Android 2.1 基于 ALSA 的 Audio Hardware 层: 基于ALSA驱动的Android Audio Hardware层。 3.1、Hardware Android 2.1 Audio Hardware 配置: 3.1、Hardware Android 2.1 Audio Hardware(ALSA) 分析: 3.2、Alsa lib alsa-lib运行在用户空间,他对alsa-driver进行封装,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。ALSA lib 编译后会生成 libasound.so,该库会被 AudioFlinger 动态链接,除此之外,编译后还会生成 alsa lib 配置文件。 3.3、ALSA驱动分析 ALSA框架的逻辑结构: snd_card 是整个 ALSA 框架的入口,ALSA框架在初始化时会首先创建一个 snd_card ,然后在其下创建多个设备(至少应包含一个PCM设备和一个Control设备,分别用于声音的录放和控制。) 3.3、ALSA驱动分析 ALSA框架初始化过程: 3.3、ASoc驱动简介 ASoc(ALSA System On Chip)是 ALSA 在 Soc 方面的发展和演变,它本质上仍然属于 ALSA ,但是在 ALSA 架构基础上对 CPU 相关的代码和 Codec 相关的代码进行了分离。 ASoc 主要由 3 部分组成: (1)、Codec驱动:这部分只进行 Codec 相关的操作。 (2)、平台驱动:这部分只进行 CPU 端的操作,它主要处理两个问题:DMA 引擎和 Soc 集成的 PCM、I2S或AC97数字接口控制。 (3)、板驱动:这部分将平台驱动和 Codec 驱动绑定在一起,描述了板一级的硬件特性。 对于目前的嵌入式系统,一般采用 ASoc 框架,这样能使驱动具有更好的移植性。 3.3、ASoc驱动分析 ASoc驱动源码: soc-core.c:ASoc 驱动核心 s5pc1xx-ac97.c:平台驱动 wm9713.c:Codec驱动 smdkc100_wm9713.c:板驱动 wm9713同时提供了PCM、I2S 和 AC97三种控制接口,从smdkc100电路图可以知道S5PC100与wm9713通过 AC97 控制接口相连,因此此处选用的平台驱动是:s5pc1