首页 理论教育音频驱动操作与框架适配

音频驱动操作与框架适配

【摘要】:应用程序主要分为控制和pcm流的操作两部分。对Android框架音频设备的适配,Android将其作为HAL层的模块,相应的模块编译成动态库,运行时由上层框架进行加载。下面以DM3730 Android的适配代码为例进行说明。在数据流方面Android将音频流中的playback和capture作为output stream和input stream,这里对应stream的open和close操作。以上具体的接口无论是控制接口还是数据接口都会通过Android提供Tiny ALSA来实现相应的功能,Tiny ALSA实际是ALSA应用层库的简化。

应用程序主要分为控制和pcm流的操作两部分。下面以两个例子进行介绍。

首先介绍控制部分的操作,对音频的控制,主要是各个不同通道mixer的控制,下面先看看打开的流程:

从代码中可见,主要的操作就是通过相应的ioctl命令获得所有控制元素的信息。对应的还需要读取和写入控制元素指定数据的接口,细节如下:

从分析中可见,控制元素中的内容读写也是通过ioctl来进行的,不过内容是一个整体,在修改的时候需要先读取,修改指定内容后再写回。

了解控制流程后,还需了解pcm数据流的操作过程。具体应用层的例子如下:

这里的例子代码重点在表述操作流程,移除了相关的错误处理部分,其主要流程还是通过ALSA应用层的接口进行操作,主要是打开、设置,然后进行数据操作。

对Android框架音频设备的适配,Android将其作为HAL层的模块,相应的模块编译成动态库,运行时由上层框架进行加载。下面以DM3730 Android的适配代码为例进行说明。(www.chuimin.cn)

首先是HAL模块说明。

模块说明中ID表示是音频设备的适配模块,操作接口是methods,其内容如下:

从中可见主要是open操作接口。具体的内容如下:

相关的操作就是填充系统需要的接口,这些接口包括控制接口和数据接口。在数据流方面Android将音频流中的playback和capture作为output stream和input stream,这里对应stream的open和close操作。当需要打开时,相应的stream会调用open接口。以input stream操作为例,看一下其详细内容:

其中仍是接口的设置,但可见其中的设置基本与pcm相关的参数一致,实际的适配就是完成以上的接口函数。

以上具体的接口无论是控制接口还是数据接口都会通过Android提供Tiny ALSA来实现相应的功能,Tiny ALSA实际是ALSA应用层库的简化。适配本身就是按照设备具体的情况进行控制流和数据流接口的实现。