Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1833563
  • 博文数量: 195
  • 博客积分: 4227
  • 博客等级: 上校
  • 技术积分: 2835
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-04 10:39
文章分类

全部博文(195)

文章存档

2013年(1)

2012年(26)

2011年(168)

分类: LINUX

2011-06-02 14:19:05

音频ALSA架构

谨以此文纪念过往的岁月

一.前言

ALSA中,复杂的不是code而是frame。看code的时候有点像是盲人摸象,没有一个整体的框架,仅仅是一个一个独立而且错综复杂的code。故在此献丑,讲诉鄙人对ALSA的架构的一些理解,如有不对之处,请各位同仁不吝指教。

二.架构

1.概述

在理解下面的架构之前,需要理解ALSA存在的意义,就是将codec,platform完全独立实现code的复用。我们以Audio system 1 Audio system 3为例,codec wm9713platform s3c6410 构成AS2platform s5p110 构成,而AS3codec wm9713platform  s5p110 构成。为了实现code的最大利用率就是在AS1codec驱动和AS2platform的驱动到AS3还可以使用,不会出现platformcodec有联系的code。而machine则是负责了codecplatform之间的联系,类似于一个管道将codecplatform联系起来,不过这里面是单向管道,对于最基础的两种流captureplayback均有一个管道。关于流的概念我们下面会讲述的。实现代码的最大独立化,这也是linux中为什么对于一个很简单的驱动会划分出许多层。

2.alsa架构

我们还是从上向下理解:

Card->Timer

      Seq

      PCM->Substream(capture)     <- DMA buffer  <- platform(pcm_new)

          ->Substream(playback)    <- DMA buffer 

对于上面的东西大家也许会很困惑,card是什么,PCM是什么。这个不急听我慢慢道来,card类似一个主管,他负责管理几个组件比如seq(定序器)timer(时钟)PCM(播放以及录音的实例)。其中PCM类似于课长,其负责管理子流,其每一个子流对应着一条通道,如对于最简单的pcm,其就包括两个子流,一个capture一个playback,其对应着两条通道。不过此PCM非彼PCM,此PCM乃是一实例负责管理子流,而彼PCM是指一种音频接口,这切切不可混了。在我们的系统中采用的AC97作为通信接口,即通道实现之接口。

3.设备

/dev/snd中会有如下几个常见的设备实例controlC0pcmC0D0ppcmC0D0ctimerseq等。而cat /proc/devices时则存在主设备号的116alsa设备。其在/dev/snd下的设备是主设备号为116而从设备号不同的设备,其均为同一个card下的不同的组件。。

 

 

 

 

 

 

 

 

 

 

阅读(3248) | 评论(0) | 转发(0) |
0

上一篇:Linux系统调用列表

下一篇:SDIO DRIVER

给主人留下些什么吧!~~