免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8044 | 回复: 18
打印 上一主题 下一主题

请教,ALSA plugin [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-17 11:17 |只看该作者 |倒序浏览
http://alsa.opensrc.org/Plugin_Documentation
在ALSA的wiki上看到了有关plugin的介绍,流程如input signal (audio program)-->  SOMENAME (plugin/virtual device)--> SLAVENAME (slave device);
请问,plugin是工作在内核态还是用户态?alsa-lib开发包里有这些plugin的源码,难道是工作在用户态?
请前辈指点指点,多谢了。

论坛徽章:
0
2 [报告]
发表于 2011-10-17 19:23 |只看该作者
驱动工作在内核态,将驱动输出的pcm data送到这些plugin再做处理,如果plugin工作在用户态,岂不是又要完成一次拷贝动作?

论坛徽章:
0
3 [报告]
发表于 2011-10-18 12:15 |只看该作者
顶一顶

论坛徽章:
0
4 [报告]
发表于 2011-10-18 15:02 |只看该作者
工作在用户态,具体代码在alsa-lib的pcm_plugin.c中,如写数据到dma中(音频数据流过程:内存->dma->i2sfifo->codec):

snd_pcm_mmap_write_areas()函数循环写入数据,直到数据没有,首先将找到映射内存pcm->running_areas的地址,然后调用snd_pcm_areas_copy()进行数据转换,如采样率,分辨率等,如果源数据和硬件格式一致,就简单地通过memcpy拷贝数据,转换成硬件对应的数据后,调用snd_pcm_mmap_commit()将转换后的数据写入映射内存。写入由snd_pcm_dmix_mmap_commit()完成,在对数据进行混音(do_mix_areas)同时,写入映射内存。

上面的映射内存就是dma了。alsa-lib挺复杂的,比alsa-driver复杂得太多,理解一下架构就差不多了,不用太死扣细节。至于plugin,学会asound.rc的法则就行了(事实上用的也不是很多)。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
5 [报告]
发表于 2011-10-18 16:07 |只看该作者
回复 4# sep

有没有什么介绍直接通过ALSA提供的文件结点写程序的材料,如果ALSA-LIB太复杂的话?

论坛徽章:
0
6 [报告]
发表于 2011-10-18 16:15 |只看该作者
我说alsa-lib是说它的实现复杂,接口函数还是容易使用的。其实alsa是完全兼容oss的,需要内核配置oss仿真选项,因此你应用程序也可以使用oss的接口。

反正我不大想碰alsa-lib,前些天为了理解一下音频的resample过程,跟踪了一下,被绕怕了。而且alsa资料比较少,很多都是要自己从代码中分析。

论坛徽章:
0
7 [报告]
发表于 2011-10-18 16:18 |只看该作者
回复 5# tempname2


    如果你说的alsa音频编程的话,可以参考alsa-utils中的aplay.c,也可以看看我写的简化版:http://blog.csdn.net/sepnic/article/details/6140824

论坛徽章:
0
8 [报告]
发表于 2011-10-18 16:20 |只看该作者
工作在用户态,具体代码在alsa-lib的pcm_plugin.c中,如写数据到dma中(音频数据流过程:内存->dma->i2sfif ...
sep 发表于 2011-10-18 15:02



    sep,非常感谢!实在是不明白pcm.c/pcm_hw.c/pcm_plugin.c/pcm_xx.c这几个文件之间的关系,所以比较困惑。

1 您提到的这个数据流程,使用了pcm_mmap.c中的内存映射函数,而pcm_hw.c里面用的是copy_from_usr,这是alsa lib分别提供的两种传输方式?

2 看了些其它资料,提到alsa_lib主要是pcm_hw.c,在alsa_driver中是pcm_native.c。pcm_hw.c是lib默认的入口吗?如果使用了其它的plugin,plugin最后还是会到pcm_hw.c中来与alsa driver来通信?

3 dmix这个plugin现在是默认使用的吗?
问的比较多,有时间就帮忙解答一下咯,谢谢了!

论坛徽章:
0
9 [报告]
发表于 2011-10-18 16:22 |只看该作者
实在是有点绕晕了,主要是想研究一下alsa lib中这些plugin提供的feature是如何实现的。sep能不能举个例子?

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
10 [报告]
发表于 2011-10-18 16:29 |只看该作者
回复 6# sep

我现在在研究alsa-driver部分,只是想看看alsa-driver提供的接口最后是怎么被调用的。如果为此看alsa-lib就太蛋疼了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP