<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[AZURE]]></title><description><![CDATA[青]]></description><link>https://blog.youkuaiyun.com/sepnic</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sepnic]]></copyright><item><title><![CDATA[Qualcomm Audio HAL 音频通路设置]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/79383323</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/79383323</guid><author>sepnic</author><pubDate>Tue, 27 Feb 2018 04:54:39 +0800</pubDate><description><![CDATA[1. 音频框图概述



| Front End PCMs    |  SoC DSP  | Back End DAIs | Audio devices |

                    *************
PCM0 &amp;lt;------------&amp;gt; *           * &amp;lt;----DAI0-----&amp;gt; Codec Headset
          ...]]></description><category></category></item><item><title><![CDATA[AVS、MPEG-2、H.264 标准文档]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/51160319</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/51160319</guid><author>sepnic</author><pubDate>Fri, 15 Apr 2016 11:31:41 +0800</pubDate><description><![CDATA[几年前，做过一些 AVS、H.264 的编解码工作，收集了一点标准文档及开源代码。这些我都分享在前一个博客：http://sep.blog.chinaunix.net，由于该博客的文件分享都失效了，因此有不少童鞋找到这里联系上我。 
为了方便大家，这里重新把这部分资源上传分享，具体见：http://download.youkuaiyun.com/detail/sepnic/9491890，包括 AVS、H.26]]></description><category></category></item><item><title><![CDATA[PCM data flow - 7 - Frame & Period]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/51044893</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/51044893</guid><author>sepnic</author><pubDate>Sat, 02 Apr 2016 18:29:36 +0800</pubDate><description><![CDATA[后面章节将分析 dma buffer 的管理，其中细节需要对音频数据相关概念有一定的了解。因此本章说明下音频数据中的几个重要概念：
Sample：样本长度，音频数据最基本的单位，常见的有 8 位和 16 位；
Channel：声道数，分为单声道 mono 和立体声 stereo；
Frame：帧，构成一个完整的声音单元，Frame = Sample * channel；
Rate：又称 sample]]></description><category></category></item><item><title><![CDATA[[HOWTO]: Linux/Android常用调试工具]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/45768633</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/45768633</guid><author>sepnic</author><pubDate>Sat, 16 May 2015 15:41:07 +0800</pubDate><description><![CDATA[本文介绍Linux/Android一些常用的调试工具及其使用说明，作为备忘，持续更新中。
注意：大部分都不是本人原创，是从各地方搜集而来，原作者也未一一追溯，所以没有出处说明，如有冒犯，请评论或私信，我会尽快修改。



FIQ-Debugger
fiq debugger是集成到内核中的一种系统调试手段。

FIQ在arm架构中相当于nmi中断，fiq debugger把串口注册成]]></description><category></category></item><item><title><![CDATA[XRUN DEBUG]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/45768191</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/45768191</guid><author>sepnic</author><pubDate>Sat, 16 May 2015 14:31:57 +0800</pubDate><description><![CDATA[当遇到声音卡顿时，一般是遭遇xrun了，调试的时候可以通过alsa提供的xrun_debug接口来获取更多有用的信息，帮助定位问题。
原文：http://www.alsa-project.org/main/index.php/XRUN_Debug



This page describes the build-in ALSA driver tool to debug PCM ring ]]></description><category></category></item><item><title><![CDATA[PCM data flow - 6 - 声卡和PCM设备的建立过程]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/44181421</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/44181421</guid><author>sepnic</author><pubDate>Tue, 10 Mar 2015 21:59:32 +0800</pubDate><description><![CDATA[前面几章分析了Codec、Platform、Machine驱动的组成部分及其注册过程，这三者都是物理设备相关的，大家应该对音频物理链路有了一定的认知。接着分析音频驱动的中间层，由于这些并不是真正的物理设备，故我们称之为逻辑设备。
PCM逻辑设备，我们又习惯称之为PCM中间层或pcm native，起着承上启下的作用：往上是与用户态接口的交互，实现音频数据在用户态和内核态之间的拷贝；往下是触发co]]></description><category></category></item><item><title><![CDATA[ANDROID音频系统散记之五：如何绕开多媒体音轨的重采样]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/24385321</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/24385321</guid><author>sepnic</author><pubDate>Wed, 23 Apr 2014 22:52:38 +0800</pubDate><description><![CDATA[两年前，Android智能手机的音质还广受诟病，那时不仅不能与专业影音设备相提并论，连48KHz采样率的声音都要强制成转换成44.1KHz输出，这种非线性重采样极大地损坏了音质，加剧互调失真。对于此的较完整分析见：http://www.soomal.com/doc/10100002164.htm
后来，Android智能手机竞争越来越大，同质化也越来越严重。因此，音质的提升成了一个重大卖点，在此]]></description><category></category></item><item><title><![CDATA[漫谈逻辑思维]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/18373447</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/18373447</guid><author>sepnic</author><pubDate>Thu, 16 Jan 2014 22:37:55 +0800</pubDate><description><![CDATA[先看一道逻辑推理题：
你来到两道门口，一道是天堂之门， 一道是地狱之门 。门口都有一个守卫，只知道守卫一个只说假话，一个只说真话。现在你只有一次提问机会，只向一个守卫问一个问题，这个守卫对你的问题，只给出“是”或者”不是“的答案。请问怎么问才能准确进入天堂之门？
如果按照普通逻辑思维去考虑这个问题，估计要花些功夫。令我讶异的是：如果用数学逻辑表达式去描述这个问题时，那么该问题非常轻松得以解答。]]></description><category></category></item><item><title><![CDATA[PCM data flow - 5 - ASoC machine driver]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/17586081</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/17586081</guid><author>sepnic</author><pubDate>Thu, 26 Dec 2013 16:34:13 +0800</pubDate><description><![CDATA[章节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]]></description><category></category></item><item><title><![CDATA[PCM data flow - 4 - ASoC platform driver]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/17317829</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/17317829</guid><author>sepnic</author><pubDate>Sat, 14 Dec 2013 13:05:39 +0800</pubDate><description><![CDATA[概述中提到音频Platform驱动主要作用是音频数据的传输，这里又细分为两步：
·          把音频数据从userspace通过dma或者mmap方式搬运到cpu_dai FIFO，这部分驱动用snd_soc_dai_driver描述，后面分析用pcm dma指代它。
·          把音频数据从cpu_dai FIFO通过数字音频接口（I2S/PCM/AC97）传送到codec]]></description><category></category></item><item><title><![CDATA[PCM data flow - 3 - ASoC codec driver]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/17252843</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/17252843</guid><author>sepnic</author><pubDate>Tue, 10 Dec 2013 23:16:40 +0800</pubDate><description><![CDATA[本章开始时提到codec_drv的几个组成部分，下面逐一介绍，基本是以内核文档Documentation/sound/alsa/soc/codec.txt中的内容为脉络来分析的。


Codec DAI和PCM的配置信息

codec_dai和pcm配置信息通过结构体snd_soc_dai_driver描述，包括dai的能力描述和操作接口，snd_soc_dai_driver最终会被注册]]></description><category></category></item><item><title><![CDATA[PCM data flow - 2 - ASoC data structure]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/17252551</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/17252551</guid><author>sepnic</author><pubDate>Tue, 10 Dec 2013 22:55:53 +0800</pubDate><description><![CDATA[ASoC：ALSA System on Chip，是建立在标准ALSA驱动之上，为了更好支持嵌入式系统和移动设备中的音频codec的一套软件体系，它依赖于标准ALSA驱动框架。内核文档alsa/soc/overview.txt中详细介绍了ASoC的设计初衷，这里不一一引用，简单陈述如下：
·          独立的codec驱动，标准的ALSA驱动框架里面codec驱动往往与SoC CPU耦合]]></description><category></category></item><item><title><![CDATA[PCM data flow - 1 - Overview]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/14105023</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/14105023</guid><author>sepnic</author><pubDate>Sun, 03 Nov 2013 14:59:21 +0800</pubDate><description><![CDATA[Linux kernel version：3.4.5
SoC：Samsung exynos
Userspace：tinyalsa


音频驱动主要有三个domain组成：
1、 Platform：通常指某款SoC平台，如exynos、omap等等。Platform又可细分两部分：
1.1、CPU DAI：在嵌入式系统里面通常指CPU的I2S、PCM总线接口，负责将音频数据从I2S F]]></description><category></category></item><item><title><![CDATA[个人使用的Linux开发环境]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/11662859</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/11662859</guid><author>sepnic</author><pubDate>Fri, 13 Sep 2013 23:21:12 +0800</pubDate><description><![CDATA[前些天重装了个Debian7.1 64bit的系统，搭建开发环境和安装常用的工具颇花精力，整理了下，记录如下。


1/Android编译环境
参考：
http://blog.youkuaiyun.com/gexueyuan/article/details/7772387
http://blog.youkuaiyun.com/nxh_love/article/details/8834849
在编译过程中，可]]></description><category></category></item><item><title><![CDATA[DAPM之九：complete path对codec suspend的影响]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/9910361</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/9910361</guid><author>sepnic</author><pubDate>Mon, 12 Aug 2013 01:41:43 +0800</pubDate><description><![CDATA[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)]]></description><category></category></item><item><title><![CDATA[一个绝妙的内核exploit]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/9866871</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/9866871</guid><author>sepnic</author><pubDate>Sat, 10 Aug 2013 01:11:08 +0800</pubDate><description><![CDATA[最近 Linux 内核爆出了一个严重的安全漏洞，非root用户可以通过该漏洞的 exploit
获取root权限。这并不罕见，值得一提的是这个补丁看起来如此平常以至于我们绝大多数人都不会以为这是安全问题。
先看这个问题的补丁，就是下面这个：

  static int perf_swevent_init(struct perf_event *event)
 {
-	int event_id]]></description><category></category></item><item><title><![CDATA[DAPM之八：stream domain触发过程分析]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/9047715</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/9047715</guid><author>sepnic</author><pubDate>Fri, 07 Jun 2013 17:15:22 +0800</pubDate><description><![CDATA[这两天在查一个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处在什]]></description><category></category></item><item><title><![CDATA[自旋锁spinlock使用总结]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/8964474</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/8964474</guid><author>sepnic</author><pubDate>Thu, 23 May 2013 11:36:57 +0800</pubDate><description><![CDATA[如果被保护的共享资源只在进程上下文和软中断上下文访问，那么当在进程上下文访问共享资源时，可能被软中断打断，从而可能进入软中断上下文来对被保护的共享资源访问，因此对于这种情况，对共享资源的访问必须使用spin_lock_bh和spin_unlock_bh来保护。
当然使用spin_lock_irq和spin_unlock_irq以及spin_lock_irqsave和spin_unlock_irq]]></description><category></category></item><item><title><![CDATA[再牛逼的伟人，也有苦逼的青春]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/8789068</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/8789068</guid><author>sepnic</author><pubDate>Thu, 11 Apr 2013 17:02:30 +0800</pubDate><description><![CDATA[1874年，某个十六岁的德国青年中学毕业，成绩在全班23人中也只排在第八，老师们对他的印象是该生除过人品好之外，实在看不出其他任何的才华和天赋，聊以自慰的是他有一手保命的技能——弹钢琴。
但是，青年却抛弃了键盘系这个很有前途的专业，毅然决然的选择了物理这个苦逼专业，就连大学的物理学教授都劝他：这个学科的一切都已经被研究完了，后面来的人连个酱油都没得打了。
的确，当时的物理学家确实有资格这个么说]]></description><category></category></item><item><title><![CDATA[机制和策略相分离原则]]></title><link>https://blog.youkuaiyun.com/sepnic/article/details/7387626</link><guid>https://blog.youkuaiyun.com/sepnic/article/details/7387626</guid><author>sepnic</author><pubDate>Fri, 23 Mar 2012 16:32:48 +0800</pubDate><description><![CDATA[这些天大刀阔斧修改了我们的alsa音频驱动，更深切理解了机制和策略分离的重要性。
说来惭愧，Linux Device Drivers一书翻来覆去查阅了无数遍，却忽视了绪论中的一句话：区分机制和策略是Unix设计背后隐含的最好思想之一。
“需要提供什么功能”即机制，“如何使用这些功能”即策略。一年多前，初接手音频驱动开发时，就混淆了机制和策略，主要表现在音频通道方面。
最典型的例如：当code]]></description><category></category></item></channel></rss>