C++
文章平均质量分 83
Qidi_Huang
技术是一种信仰,我愿做布道者。
展开
-
State Machine Compiler 用法:使用 SMC 工具自动生成状态机代码
SMC (State Machine Compiler) 目前还没有正式中文名,这里把它意译成 状态机生成器,其主要作者是 Charles W. Rapp。状态机生成器实际上早在 2000 年左右就由 Robert C. Martin (他还有个网名叫 Uncle Bob) 创造出来了,现在一般把他发明的状态机生成器称作 OSMC (Original State Machine Compiler)。Charles 曾经是 Robert 的同事,在后者离职后,前者接手了 OSMC 的维护工作[1]。本文介原创 2021-01-02 16:32:16 · 4080 阅读 · 5 评论 -
Android 8.1 从零开始写 HAL -- (3) 实现 Bp、Bn 端
既然 Binder 化的 HAL 依赖于 Binder 机制进行实现,那么我们自然必须按照 Binder 框架,相应编写 demoComponent HAL 的 Bp 端和 Bn 端。只有这样,才能打通客户端进程调用到服务端进程 —— 我们的 demoService —— 的通路。原创 2020-07-18 14:19:00 · 2065 阅读 · 1 评论 -
Android 8.1 从零开始写 HAL -- (2) 实现 HAL 主体
通过上一篇文章[《Android 8.1 从零开始写 HAL -- (1) 定义接口》](https://blog.csdn.net/Qidi_Huang/article/details/107420019)的努力,我们定义好了 demoComponent HAL 的接口和参数,也了解到编译时会自动产生 Binder 框架代码。通过 Binder 机制,经过 demoComponent HAL 的 Bp 和 Bn 端,用户进程就可以调用到我们的 demoService 了。 在打通 Bp/Bn 通原创 2020-07-18 12:13:45 · 2612 阅读 · 0 评论 -
详细图解 Android vndBinder
详细图解 Android vndBinder注意:本文基于 Android 8.1 进行分析Qidi 2020.07.03 (Markdown & Haroopad)【前言】图虽然是根据 vndBinder 的类关系和调用顺序画出的,但实际上对于 Binder 和 hwBinder 也适用。Binder driver 代码十分庞杂,基于安全考虑还存在与 LSM 的交互,所以这部分的调用关系图有所省略。【Binder 通信概要】如果说 Binder 通信机制是 Android 的心脏原创 2020-07-03 22:18:35 · 1251 阅读 · 0 评论 -
AudioFlinger 如何通过 hwBinder 调用 Audio HAL
AudioFlinger 如何通过 hwBinder 调用 Audio HAL注意:本文基于 Android 8.0 进行分析Qidi 2020.07.03 (Markdown & Haroopad)我们已经知道,在AudioPolicyManager构造时,会解析配置文件audio_policy.conf或audio_policy_configuration.xml。之后,它会获取到AudioFlinger的实例,并根据解析结果,调用loadHwModule()依次加载各个 audio H原创 2020-07-03 21:05:53 · 1923 阅读 · 0 评论 -
在 Android 中使用自定义函数接口替换 Frameworks 中的默认函数接口
在 Android 中使用自定义函数接口替换 Frameworks 中的默认函数接口Qidi 2017.08.31 (Markdown & Haroopad)注意:本文基于 Android 8.0 进行分析。1. 前言 自 Android 8.0 开始,为了实现 Project Treble 对更快完成系统升级的预期,Google 严格要求芯片 vendor 厂商不能再修改 AOSP 的 Fram原创 2017-08-31 17:18:18 · 1842 阅读 · 5 评论 -
Android音频模块启动流程分析
Android音频模块启动流程分析Qidi 06.08.2017 (Markdown & Haroopad)1) 设备开机,系统启动时将执行 /system/etc/init/audioserver.rc ,运行 /system/bin/ 目录下的 audioserver 服务。audioserver.rc 内容如下:service audioserver /system/bin/audioserv原创 2017-06-08 12:21:15 · 9581 阅读 · 0 评论 -
Android系统下解决音频underrun噪声问题的一种更优方法
【问题概要】 上一次我介绍了一种 Android 系统下发生音频 underrun 问题的解决方法(参见《记一次Android系统下解决音频UnderRun问题的过程》),这之后平静了一段时间,测试组同事也没有再报告相关的噪声问题。 但就在前 2 天,测试组同事告诉我说她们又听见噪声了,并且这次的使用场景比上次复杂了许多——由于从 Android 6.0 开始已经支持应用多开以原创 2017-04-05 17:58:10 · 8377 阅读 · 8 评论 -
Android 7.0 Audio的Resample过程详解
【前言】处理过音频文件的工程师都知道音频数据存在采样率(Sample Rate)这个指标。在位深度(Bit Depth)一定的情况下,采样率越高,理论上来说播放出来的声音就越细腻,录制的声音也就越保真,反之亦然。但在较早的Android系统版本上,不管音频文件原来的采原创 2017-02-24 10:46:10 · 6183 阅读 · 4 评论 -
记一次Android系统下解决音频UnderRun问题的过程
【前言】 因为这几天在为设备从 Android M 升级到 Android N 的 bringup 做准备,所以一直没写博客。趁现在刚刚把 Kernel 部分的移植做完,忙里偷闲把 2 周前解决的一个音频 UnderRun 问题记录一下,留作以后参考。 问题现象是:使用腾讯视频 APP 播放视频,一段时间后会出现 pop-click 噪音,听起来类似“哒哒”一样的声音。原创 2017-01-04 18:09:32 · 16206 阅读 · 13 评论 -
【转】C/C++中的 mutable、volatile 关键字作用详解
mutable和volatile 很少遇到这两个关键字,学嵌入式估计知道后者,深入研究 C++ 的估计知道前者。 (1)mutable 在 C++ 中,mutable 是为了突破 const 的限制而设置的。被 mutable 修饰的变量,将永远处于可变的状态,即使在一个 const 函数中,甚至结构体变量或者类对象为 const转载 2016-09-19 18:31:10 · 3926 阅读 · 0 评论 -
DefaultKeyedVector和KeyedVector用法
【用法示例】 在 Android Framework 源码中经常可以看到使用 DefaultKeyedVector 类型的容器。举个例子,在 AudioPolicyManagerBase.cpp 中我们可以看到如下代码:SortedVector AudioPolicyManagerBase::getOutputsForDevice(audio_devices_t devi原创 2016-09-22 08:03:16 · 12932 阅读 · 0 评论