1.2.1 Android audiosubsystem Framework

Typical OSS Read/Write Flow
音频数据流原理相通,可以总结为三步骤:
while循环,持续写
schedule等待DMA中断产生
copy_frome_user拷贝数据到DMA缓存区

Not like OSS,ALSA sound core will manage flow control with the help of low level drivercallbacks.
static int soc_pcm_prepare(struct snd_pcm_substream *substream)
{
if (machine->ops && machine->ops->prepare) {
ret = machine->ops->prepare(substream);
}
if (platform->pcm_ops->prepare) {
ret = platform->pcm_ops->prepare(substream);
}
if (codec_dai->ops->prepare) {
ret = codec_dai->ops->prepare(substream, codec_dai);
}
if (cpu_dai->ops->prepare) {
ret = cpu_dai->ops->prepare(substream, cpu_dai);
}
...
}
Except that, maintain issues likedynamic power management , pops elimination and so on with the help of lowlevel driver callbacks.(在底层驱动有例子)
static struct snd_pcm_ops soc_pcm_ops = {
.open = soc_pcm_open,
.close = soc_codec_close,
.hw_params = soc_pcm_hw_params,
.hw_free = soc_pcm_hw_free,
.prepare = soc_pcm_prepare,
.trigger = soc_pcm_trigger,
};
