- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Tinyalsa
Tinyalsa介绍 主要内容 一、Tinyalsa简介 二、Tinyalsa Lib与Audio HAL层之间的关联架构图 三、Tinyalsa代码架构 四、Tinyalsa脚本工具的使用 五、Tinyalsa lib中关键接口的调用流程 六、Reference Documentation 一、Tinyalsa 简介 Tinyalsa = Tiny + ALSA (Advanced Linux Sound Architecture) 由此可见,Tinyalsa是一个轻量级的库。 Tinyalsa已经成为Android在用户空间默认的ALSA Lib,封装了内核的ALSA接口,用于简化用户空间的ALSA编程。 但是Tinyalsa也一度存在异议:Android内置的ALSA是早期的ALSA版本精简而来,说好听点就是Google修改的版本,实际上就是Google自己移植并去掉ALSA大量API甚至驱动层功能的阉割版本。阉割的目的是为了减少或者说去掉GPL授权的影响,加重Google在Android源代码控制上的话语权,也能说服不愿意将自己驱动或者修改代码开源的厂商加入到Android的开发上(虽然Android也支持HAL层的私有驱动,但是……现在几乎所有的音频Codec驱动是基于ALSA的)。 虽然Google乐于听到“Android的ALSA和Linux的ALSA是两回事”的说法,并将其内部命名为“TinyALSA”(精简版ALSA)。一般来说,在维持功能的基础上精简代码是好事,可Google对于ALSA的精简,完全可以作为失败案例看待。如果说AudioFlinger是Android音频系统的噩梦,那么,TinyALSA则是Android音频系统的灾难。 ALSA同时掌管着Android/Linux的音频硬件驱动和底层API,因此,ALSA对于codec的性能和功能则起着决定性的作用。Google在大量删除ALSA代码的同时,并没有将失去的功能补回来。PulseAudio相对于AudioFlinger的优势就是加强底层驱动的作用,但是Android的TinyALSA则是啥功能都缺: 1、不具备重采样功能(这个待考量,毕竟硬件支持的) 2、不具备缓存功能 3、无法切换采样率,采样率只能在编译驱动时固定 4、不具备影音相关的重要功能(双声道/多声道切换,AC3 Fliter,AC3解码等等,模拟输出只能靠AudioFlinger转换简单实现,高级实现则需要数字输出到独立的硬件解码器。) 现在大家应该知道为什么要在Android平台上做音质好的手机会那么困难,原因就是Android天生存在SRC、高延迟以及ALSA被阉割等缺陷。 AudioHardwareBase AudioStreamOut AudioALSAHardware AudioALSAStreamOut AudioALSAStreamManager AudioALSASpeechPhoneCallController AudioALSAPlaybackHandleBase AudioALSAPlaybackHandleNormal / Voice AudioALSACaptureHandleNormal / Voice AudioALSAFMController AudioALSAPlaybackDataDispatcher AudioALSACaptureDataProviderBase AudioALSAHardwareResourceManager 二、Tinyalsa Lib与Audio HAL层之间的关联架构图 pcm mixer_ctl pcm PCMC0D0p PCMC0D1p PCMC0D2p PCMC0D0p PCMC0D1p PCMC0D2p controlC0 mixer AudioALSADataProcessor AudioStreamIn AudioALSAStreamIn AudioALSACaptureHandleBase Tinyalsa Lib 三、Tinyalsa代码架构 Tinyalsa调试脚本: tinycap,tinyplay和tinymix Tinyalsa核心接口函数, 生成libtinyalsa.so 四、Tinyalsa脚本工具的使用 Tinyplay --- Usage: tinyplay file.wav [-D card] [-d device] [-p period_size] Tinycap --- Usage: tinycap file.wav [-D card] [-d device] [-c channels]
文档评论(0)