imx6 audio相关代码位置

Android原生音频架构定义了音频功能的实现方式,并指出实现中所涉及的相关源代码,其中imx6相关的源代码稍有区别,特别是对Audio部分的代码,以下列出相关源代码的所在路径。

整个Android音频架构图




应用框架 
应用框架包含应用代码,该代码可使用 android.media API 与音频硬件进行互动。在内部,此代码会调用相应的 JNI 粘合类,以访问与音频硬件互动的原生代码。
应用框架位于frameworks/base/media/java/android/media,其中包含了AudioTrack.java、AudioRecord.java、MediaPlayer.java、MediaRecorder.java等

JNI 
与android.media关联的JNI代码可调用较低级别的原生代码,以访问音频硬件。JNI位于frameworks/base/core/jni/ 和 frameworks/base/media/jni 中。
 
原生框架 
原生框架可提供相当于 android.media 软件包的原生软件包,从而调用 Binder IPC 代理以访问媒体服务器的特定于音频的服务。原生框架代码位于 frameworks/av/media/libmedia 中。
 
Binder IPC 
Binder IPC 代理用于促进跨越进程边界的通信。代理位于 frameworks/av/media/libmedia 中,并以字母“I”开头。 

媒体服务器 
媒体服务器包含音频服务,这些音频服务是与您的 HAL 实现进行互动的实际代码。媒体服务器位于 frameworks/av/services/audioflinger 中。 

HAL 
HAL 定义了由音频服务调用且您必须实现以确保音频硬件功能正常运行的标准接口。imx6定制音频 HAL 接口位于 hardware/imx/alsa 中。具体文件:tinyalsa_hal.c

ALSA Lib
ALSA Lib使用的是tinyalsa,替代了android默认的alsalib,封装了内核ALSA的结构,用于简化用户空间的ALSA编程,tinyalsa向HAL提供了可以访问Audio设备的接口。
tinyalsa位于external/tinyalsa/,其中control.c 、mixer.c、pcm.c封装成lib供HAL使用,而tinymix.c、tinycap.c、tinyplay.c编译成可执行文件供我们动态调试声卡驱动。

内核驱动程序 

音频驱动程序可与硬件和HAL实现进行互动。您可以使用高级 Linux 声音体系 (ALSA)、开放声音系统 (OSS) 或自定义驱动程序(HAL 与驱动程序无关)。
为了解决Codec驱动与SoC CPU的底层耦合过于紧密以及对音频通路自由进行配置,采用了ASOC这种方式。其中ASOC包括Machine Driver、Codec Driver、Platform Driver三种结构。
Codec我们以WM8960为例:
Platform Driver代码位于:
kernel_imx/sound/soc/imx/imx-ssi.c
kernel_imx/sound/soc/imx/imx-pcm-dma-mx2.c

Codec Driver代码位于:
kernel_imx/sound/soc/codecs/wm8960.c

Machine Driver代码位于:
kernel_imx/sound/soc/imx/imx-wm8960.c

猜你喜欢

转载自blog.csdn.net/qq_30295609/article/details/79241325