- 博客(63)
- 资源 (24)
- 收藏
- 关注
原创 Qualcomm Audio HAL 音频通路设置
1. 音频框图概述| Front End PCMs | SoC DSP | Back End DAIs | Audio devices | *************PCM0 <------------> * * <----DAI0-----> Codec Headset ...
2018-02-27 04:54:39
47462
30
原创 AVS、MPEG-2、H.264 标准文档
几年前,做过一些 AVS、H.264 的编解码工作,收集了一点标准文档及开源代码。这些我都分享在前一个博客:http://sep.blog.chinaunix.net,由于该博客的文件分享都失效了,因此有不少童鞋找到这里联系上我。 为了方便大家,这里重新把这部分资源上传分享,具体见:http://download.youkuaiyun.com/detail/sepnic/9491890,包括 AVS、H.26
2016-04-15 11:31:41
4188
1
原创 PCM data flow - 7 - Frame & Period
后面章节将分析 dma buffer 的管理,其中细节需要对音频数据相关概念有一定的了解。因此本章说明下音频数据中的几个重要概念:Sample:样本长度,音频数据最基本的单位,常见的有 8 位和 16 位;Channel:声道数,分为单声道 mono 和立体声 stereo;Frame:帧,构成一个完整的声音单元,Frame = Sample * channel;Rate:又称 sample
2016-04-02 18:29:36
8890
1
原创 [HOWTO]: Linux/Android常用调试工具
本文介绍Linux/Android一些常用的调试工具及其使用说明,作为备忘,持续更新中。注意:大部分都不是本人原创,是从各地方搜集而来,原作者也未一一追溯,所以没有出处说明,如有冒犯,请评论或私信,我会尽快修改。FIQ-Debuggerfiq debugger是集成到内核中的一种系统调试手段。FIQ在arm架构中相当于nmi中断,fiq debugger把串口注册成
2015-05-16 15:41:07
8405
原创 XRUN DEBUG
当遇到声音卡顿时,一般是遭遇xrun了,调试的时候可以通过alsa提供的xrun_debug接口来获取更多有用的信息,帮助定位问题。原文:http://www.alsa-project.org/main/index.php/XRUN_DebugThis page describes the build-in ALSA driver tool to debug PCM ring
2015-05-16 14:31:57
6081
原创 PCM data flow - 6 - 声卡和PCM设备的建立过程
前面几章分析了Codec、Platform、Machine驱动的组成部分及其注册过程,这三者都是物理设备相关的,大家应该对音频物理链路有了一定的认知。接着分析音频驱动的中间层,由于这些并不是真正的物理设备,故我们称之为逻辑设备。PCM逻辑设备,我们又习惯称之为PCM中间层或pcm native,起着承上启下的作用:往上是与用户态接口的交互,实现音频数据在用户态和内核态之间的拷贝;往下是触发co
2015-03-10 21:59:32
6836
原创 ANDROID音频系统散记之五:如何绕开多媒体音轨的重采样
两年前,Android智能手机的音质还广受诟病,那时不仅不能与专业影音设备相提并论,连48KHz采样率的声音都要强制成转换成44.1KHz输出,这种非线性重采样极大地损坏了音质,加剧互调失真。对于此的较完整分析见:http://www.soomal.com/doc/10100002164.htm后来,Android智能手机竞争越来越大,同质化也越来越严重。因此,音质的提升成了一个重大卖点,在此
2014-04-23 22:52:38
12900
原创 漫谈逻辑思维
先看一道逻辑推理题:你来到两道门口,一道是天堂之门, 一道是地狱之门 。门口都有一个守卫,只知道守卫一个只说假话,一个只说真话。现在你只有一次提问机会,只向一个守卫问一个问题,这个守卫对你的问题,只给出“是”或者”不是“的答案。请问怎么问才能准确进入天堂之门?如果按照普通逻辑思维去考虑这个问题,估计要花些功夫。令我讶异的是:如果用数学逻辑表达式去描述这个问题时,那么该问题非常轻松得以解答。
2014-01-16 22:37:55
4019
原创 PCM data flow - 5 - ASoC machine driver
章节ASoC中的codec_drv和ASoC中的platform_drv介绍了codec、platform(I2S、pcm_dma)驱动,但仅有codec、platform驱动是不能工作的,需要一个角色把codec、codec dai、cpudai、pcm dma给链结起来才能组成一个完整的音频回路,这个角色就由machine_drv承担了。struct snd_soc_dai_lin
2013-12-26 16:34:13
6884
原创 PCM data flow - 4 - ASoC platform driver
概述中提到音频Platform驱动主要作用是音频数据的传输,这里又细分为两步:· 把音频数据从userspace通过dma或者mmap方式搬运到cpu_dai FIFO,这部分驱动用snd_soc_dai_driver描述,后面分析用pcm dma指代它。· 把音频数据从cpu_dai FIFO通过数字音频接口(I2S/PCM/AC97)传送到codec
2013-12-14 13:05:39
6934
原创 PCM data flow - 3 - ASoC codec driver
本章开始时提到codec_drv的几个组成部分,下面逐一介绍,基本是以内核文档Documentation/sound/alsa/soc/codec.txt中的内容为脉络来分析的。Codec DAI和PCM的配置信息codec_dai和pcm配置信息通过结构体snd_soc_dai_driver描述,包括dai的能力描述和操作接口,snd_soc_dai_driver最终会被注册
2013-12-10 23:16:40
8217
原创 PCM data flow - 2 - ASoC data structure
ASoC:ALSA System on Chip,是建立在标准ALSA驱动之上,为了更好支持嵌入式系统和移动设备中的音频codec的一套软件体系,它依赖于标准ALSA驱动框架。内核文档alsa/soc/overview.txt中详细介绍了ASoC的设计初衷,这里不一一引用,简单陈述如下:· 独立的codec驱动,标准的ALSA驱动框架里面codec驱动往往与SoC CPU耦合
2013-12-10 22:55:53
8169
原创 PCM data flow - 1 - Overview
Linux kernel version:3.4.5SoC:Samsung exynosUserspace:tinyalsa音频驱动主要有三个domain组成:1、 Platform:通常指某款SoC平台,如exynos、omap等等。Platform又可细分两部分:1.1、CPU DAI:在嵌入式系统里面通常指CPU的I2S、PCM总线接口,负责将音频数据从I2S F
2013-11-03 14:59:21
10838
4
原创 个人使用的Linux开发环境
前些天重装了个Debian7.1 64bit的系统,搭建开发环境和安装常用的工具颇花精力,整理了下,记录如下。1/Android编译环境参考:http://blog.youkuaiyun.com/gexueyuan/article/details/7772387http://blog.youkuaiyun.com/nxh_love/article/details/8834849在编译过程中,可
2013-09-13 23:21:12
4115
1
原创 DAPM之九:complete path对codec suspend的影响
1、问题应该发生在:int snd_soc_suspend(struct device *dev){ //... for (i = 0; i num_rtd; i++) { struct snd_soc_dai *codec_dai = card->rtd[i].codec_dai; if (card->rtd[i].dai_link->ignore_suspend)
2013-08-12 01:41:43
6118
4
转载 一个绝妙的内核exploit
最近 Linux 内核爆出了一个严重的安全漏洞,非root用户可以通过该漏洞的 exploit获取root权限。这并不罕见,值得一提的是这个补丁看起来如此平常以至于我们绝大多数人都不会以为这是安全问题。先看这个问题的补丁,就是下面这个: static int perf_swevent_init(struct perf_event *event) {- int event_id
2013-08-10 01:11:08
3293
原创 DAPM之八:stream domain触发过程分析
这两天在查一个bug,结果bug没有完美解决,关于stream domain和stream event的触发过程倒是跟了个遍。记于此,也好慰告《DAPM之四:dapm widget events》大坑的在天之灵。另外,以前的DAPM系列均基于Linux-2.6.32来分析的,目前我们使用Linux-3.4.5,dapm改动很大了。列举一点:Linux-2.6.32时代,无论codec处在什
2013-06-07 17:15:22
7577
2
转载 自旋锁spinlock使用总结
如果被保护的共享资源只在进程上下文和软中断上下文访问,那么当在进程上下文访问共享资源时,可能被软中断打断,从而可能进入软中断上下文来对被保护的共享资源访问,因此对于这种情况,对共享资源的访问必须使用spin_lock_bh和spin_unlock_bh来保护。当然使用spin_lock_irq和spin_unlock_irq以及spin_lock_irqsave和spin_unlock_irq
2013-05-23 11:36:57
4923
转载 再牛逼的伟人,也有苦逼的青春
1874年,某个十六岁的德国青年中学毕业,成绩在全班23人中也只排在第八,老师们对他的印象是该生除过人品好之外,实在看不出其他任何的才华和天赋,聊以自慰的是他有一手保命的技能——弹钢琴。但是,青年却抛弃了键盘系这个很有前途的专业,毅然决然的选择了物理这个苦逼专业,就连大学的物理学教授都劝他:这个学科的一切都已经被研究完了,后面来的人连个酱油都没得打了。的确,当时的物理学家确实有资格这个么说
2013-04-11 17:02:30
3803
原创 机制和策略相分离原则
这些天大刀阔斧修改了我们的alsa音频驱动,更深切理解了机制和策略分离的重要性。说来惭愧,Linux Device Drivers一书翻来覆去查阅了无数遍,却忽视了绪论中的一句话:区分机制和策略是Unix设计背后隐含的最好思想之一。“需要提供什么功能”即机制,“如何使用这些功能”即策略。一年多前,初接手音频驱动开发时,就混淆了机制和策略,主要表现在音频通道方面。最典型的例如:当code
2012-03-23 16:32:48
9486
1
原创 Audio Resampler Implement
前些日子无聊实现的一个Audio PCM Resampler的代码,仅仅支持采样率为44.1khz的源数据的向下转换,可转换成8khz/11.025khz/16khz/22.050khz。接口设计参考android-4.0.3_r1\system\media\audio_utils\include\audio_utils\resampler.h,因此使用方法也和Android的那套接口保持一致
2012-03-23 14:51:48
8253
原创 试探Galaxy的音频设计框架
之前转载过一篇文章-智能手机音频系统概述,描述了手机音频系统设计框图。实际上那是一个简单的做法,应用中有较大的局限性。那么一个完善的音频框架应该是什么样的呢?这两天根据Android4.0源码的一些线索,找到了相应的硬件资料,摘录下来。注:以samsung tuna方案(即galaxy nexus)为例。audio_hw在ANDROID音频系统散记之四:4.0音频系统H
2012-02-29 20:06:58
10500
1
原创 ALSA SOC在Linux3.1上的一些改进
2012已经到来,无论这个世界是否行将毁灭,在那之前的日子还得要继续。Android迈进了4.0,相应的Linux内核也进入了3.x时代。之后的一个工作估计要将2.6.32的驱动移植到3.x上面来。因此趁现在有空,看看alsa在这方面有什么改动。总的来说,架构大的改动是不大可能的。codec中几个关键结构体没有大的变化,如snd_soc_dai_ops、snd_soc_dai_dr
2012-01-31 19:00:33
9074
原创 ANDROID音频系统散记之四:4.0音频系统HAL初探
昨天(2011-11-15)发布了Android4.0的源码,今天download下来,开始挺进4.0时代。简单看了一下,发现音频系统方面与2.3的有较多地方不同,下面逐一描述。一、代码模块位置1、AudioFlingerframeworks/base/services/audioflinger/+-- Android.mk+-- AudioBuffer
2011-11-16 20:48:04
37736
14
原创 关于ALSA的小结
这一年来的一个重要工作是音频设备驱动方面,如驱动开发、调试debug、性能调优、音频路由、回声消除等。除此之外,熟悉了一下alsa-lib接口,Android音频系统,包括设备抽象层和音频策略。遗憾的是一直没有什么机会接触蓝牙设备的集成和开发,可预知的未来无线设备会极大地普及。还有就是ffmpeg,以前经常用它来做一些兴致突来能力而及的小工具,年初时计划进一步在它的基础上学习H264或
2011-11-11 19:37:29
11125
5
原创 ALSA的ioctl - hwdep
hwdep模块简述字符设备驱动中,ioctl是一个很常见的IO设备操作函数,可以自定义cmd命令字并实现对应的设备IO控制。音频设备的控制有所不同:驱动层大部分控制操作定义各种snd_kcontrol_new,然后注册到SNDRV_DEV_CONTROL模块中(sound\core\control.c),详见snd_kcontrol探究;而上层调用alsa-lib的snd_ctl_
2011-11-03 15:09:43
8123
6
原创 ANDROID音频系统散记之三:resample-2
这篇是承接上一篇提到的底层resample处理,以Samsung的mini alsa-lib为例说明。Mini alsa-lib这个mini alsa-lib位于android2.3.1-gingerbread/device/samsung/crespo/libaudio中。如之前所说alsa-lib实现了太多plugin的功能,显得复杂臃肿。因此我建议如果想了解alsa在
2011-10-24 12:14:03
15989
原创 ANDROID音频系统散记之二:resample-1
Android上的resample处理默认的情况下,Android放音的采样率固定为44.1khz,录音的采样率固定为8khz,因此底层的音频设备驱动只需设置好这两个固定的采样率。如果上层传过来的采样率与其不符的话,则Android Framework层会对音频流做resample(重采样)处理。Resample的大致流程如下: AudioResample作为最基本的类
2011-10-10 16:42:35
16605
3
原创 ANDROID音频系统散记之一:A2dpAudioInterface
写在之前本来有打算写写Android音频系统的,但是仔细研究了如下链接的三篇文章,果断中断了我的想法。毫不夸张来说,这是我看过的最好的阐述Android音频系统的文章了,简练精辟,将音频系统各个方面的重要的脉络都描述出来了。有这三篇文章,理解Android音频系统何止加快了10倍。Android Audio System 之一:AudioTrack如何与AudioFlinger交换
2011-09-22 20:14:29
11401
2
原创 NetLink机制使用
前些日子研究如何在Android实现USB-Audio的热插拔,顺带了解了一下netlink机制。netlink在TCP/IP方面用得较多,但根据需要也可用在HDMI/USB等热插拔消息通知。前人已经对这方面有深入的剖析,这里就不累述了。一些典型的资料如下:linux的配置接口-netlink原理和设计netlink机制-实现系统调用netlink机制-总结PF_NET
2011-09-22 10:16:14
6405
原创 如何在Android平台上使用USB Audio设备
需求:USB Headset插上去后,声音要从本地CODEC切换到USB Headset输出/输入。上网搜了有关USB Audio Hotplug的东西,比较适用的资源如下:1、Hotplugging USB audio devices (Howto)题目看起
2011-09-09 19:42:13
25024
7
原创 智能手机音频系统概述
声明:本文非本人原创,主要整理了网上搜集到的一些资料,并加上个人注解。音频系统概述专业术语:ASLA - Advanced Sound Linux ArchitectureOSS - 以前的Linux音频体系结构,被AS
2011-09-01 19:39:10
14353
1
原创 逸仙时空上翻的一个旧帖子
这些天无事就到逸仙时空BBS闲逛。说来讽刺,大学四年几乎没有登录过本校的BBS,空闲时间就沉迷于游戏与动漫之中,毕业工作后才到BBS上注册一个账号,看着师弟师妹们埋怨学校饭堂伙食差啊考试愁死人啊等等,不禁怀念已逝去的大学时光,怀念各奔东西的兄弟。回到正题,这帖子是06年教操作系统的王老师发的,题目是“致03”,即面向对象是我们03届EE班。但我想这现象和问题是普遍存在的。关于王老师,我只记
2011-07-23 00:18:55
7190
2
原创 DAPM之七:文档《AUDIO CODEC DAPM》放出
经过一周多的整理,包括一个周末,终于形成这个较为条理的文档。dapm系列从开坑到现在,时间跨度是3个多月。呵呵,这其实比我想象中要快,毕竟平时工作还是挺忙的。今后我想关于音频驱动方面的内容会减少,并不是说我已经全部掌握了alsa架构,pcm、card方面都没有进入深入研究。
2011-07-15 20:22:36
6453
原创 I2S和PCM
I2S总线规范I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有3个主要信号:1、串行时钟SCLK,也叫位时钟BCLK,即对应数字音频的每一位数据,SCLK有1个脉冲。SCLK的频率=2×采样频率×采样位数。2、帧时钟LRCK,用于切换
2011-06-10 16:56:00
59460
3
原创 DAPM之六:dapm机制深入分析(下)
dapm触发时的入口函数是dapm_power_widgets,稍后详细分析这个函数,这里仅说其作用:检查每个dapm widget,如果该widget处在一条complete paths中,则power up这个widget,否则power down。
2011-05-18 10:50:00
11287
1
原创 DAPM之五:dapm机制深入分析(上)
哲学里有三个终极命题:你是谁?从何处来?到何处去?而对于dapm机制,我们可以这样提问:dapm是什么,起到何作用?dapm是如何建立的?dapm又是如何触发的?下面会就这三个问题进行分析。首先是dapm是什么?
2011-05-18 10:46:00
20524
1
原创 DAPM之三:audio paths与asound.conf
其实asound.conf真跟dapm没多大关系,之所以把它也纳入dapm系列之一,是为了考虑到知识的连贯性。在提到:通过配置好asound.conf,上层则可打开asound.conf中定义的虚拟设备,而自动选择相应的音频通道。这是asound.conf很重要的一个作用,从这方面来说,并不是跟dapm完全没关系。
2011-05-02 12:00:00
20231
4
原创 DAPM之二:audio paths与dapm kcontrol
在用alsa_amixer controls时,除了我们之前提到的snd_soc_add_controls添加的kcontrols外,还有一些多出来的controls。其实多出来的那些都是属于dapm kcontrol,主要用于切换音频路径。一、AUDIO PATHS OVERVIEW以标准内核2.6.32的wm9713 codec为例。先看AUDIO PATHS OVERVIEW,红色线路是LINPUT1(Left Input) -> LEFT INPUT PGA -> LEFT INPUT MI
2011-04-20 02:11:00
33492
PCM_data_flow_in_ASoC-Part1
2014-05-20
ANDROID-AUDIO-SYSTEM-(by-DroidPhone)
2011-11-20
AUDIO CODEC DAPM(包括dapm机制和音频路径详细分析)
2011-07-29
DAPM之二:音频通路与dapm kcontrol
2011-05-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人