音频框架结构

本文主要探讨了Android audiosubsystem Framework、OSS Framework以及ALSA Framework。在OSS Framework中,音频数据流主要包括while循环的持续写入、schedule等待DMA中断以及copy_from_user的数据拷贝。而ALSA Framework则借助底层驱动回调来管理流控制,并处理动态电源管理和消除爆音等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.2.1 Android audiosubsystem Framework



1.2.2 OSS Framework


Typical OSS Read/Write Flow


音频数据流原理相通,可以总结为三步骤:

while循环,持续写

schedule等待DMA中断产生

copy_frome_user拷贝数据到DMA缓存区


1.2.3 ALSA Framework


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,
};






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值