
Android
文章平均质量分 86
风筝丶
随便看人家资料是不好的......
展开
-
Android音频子系统(十六)------MTK Audio播放/录音流程
播放:原创 2023-05-17 18:36:32 · 1988 阅读 · 3 评论 -
Android音频子系统(十五)------Audio调试经验
两年前,我初来手机厂,还不会怎么分析log,当时刚从珠海芯片厂出来,遇到问题都是接上串口线,然后自己手动复现问题,然后对着串口查看下打出来的log分析异常。现在都是测试开启反馈工具箱,复现问题然后抓取log,开发就对着大量log(本质还是logcat和dmesg等)查找自己需要的信息。基本通过这些关键词,就可以初步定位解决一些audio的问题了,之后的复杂问题,只能说,道阻且长…针对我目前使用的MTK平台,不过的场景也会打出不同的log,通过这些log可以快速找到问题点。原创 2023-05-15 22:28:57 · 4248 阅读 · 4 评论 -
ALSA子系统(十八)------指纹解锁动画提示声卡顿问题解析
很久没写kernel相关的东西了,主要是来到手机厂之后,大部分还是在Android上,Kernel虽然也有涉及,但毕竟只是有所涉及,主要业务逻辑还是在HAL之上,kernel的修改除了项目bringup,之后基本甚少修改。好,扯了这么一大堆,回归本题,如果出现了underflow,说明写数据不及时,写数据就是通过dsp_process_msg_thread这个线程里面写到DSP的,所以,我们只需要保证这个线程的正常调度运行即可。因为提示音是短音,走的fast通路,buf又小,确实容易出现问题。原创 2023-05-11 22:12:54 · 1412 阅读 · 2 评论 -
Android音频子系统(十四)------耳机杂音问题解析
这个时候测试有一台机器,是没有这个问题的,我看了下,不是机器问题,是版本问题,正常的机器里面的版本是一个半月前的版本,这说明之前的版本是没有这个问题的,这个问题是后来才有的!所以本质上这题还是写数据超时导致的xrun问题。原创 2023-05-01 23:16:40 · 1820 阅读 · 8 评论 -
Android音频子系统(十三)------audio音频测试工具
两个都是测试latency,延时是音频很重要的一个指标,外放延时,数字耳机延时,模拟耳机延时,蓝牙耳机延时,非常影响用户的体验。latency主要看latency.msec即可,关于timestamp.latency,只是时间戳信息,可以不用关注。不过CtsVerifier.apk不是专门的audio的工具,最近发现一个工具挺好用的,专门测试audio的。谷歌有cts测试工具:CtsVerifier.apk,专门做兼容性测试的,其中里面有关于audio的测试。原创 2023-03-20 16:04:13 · 2863 阅读 · 2 评论 -
Android音频子系统(十二)------抖音直播功耗问题解析
这里是直播场景,走voip fast通路,要求low latency低延时,所以为了保障音频性能要求不出现卡顿,所以垫高了CPU频率。目前我是选择了节省功耗,因为降频只是有音频录音卡顿风险,并不一定会卡顿,但是节省的功耗却是实实在在的。对比机数据,C0(CPU0):1.2g,C1(CPU4):1.1G,C2(CPU7):500m。测试机数据,C0(CPU0):1.6g,C1(CPU4):1.9G,C2(CPU7):1.4g。移动卡纯5G,120HZ,最小亮度,最小音量,开启定位。原创 2023-02-13 16:24:42 · 1978 阅读 · 11 评论 -
Android音频子系统(十一)------耳机返听(耳返)原理实现
耳返,也就是耳机返听,一般用在演唱会直播、手机K歌、KTV等场景。例如在嘈杂的演唱环境里,通过佩戴耳返,歌手能清楚地听到伴奏和自己的声音,来鉴定自己有没有走音。或者打开手机大部分K歌软件都会有耳返功能,实时监听自己的声音,不断调整声音状态,呈现最佳的视听效果。原创 2022-09-14 17:26:34 · 6822 阅读 · 1 评论 -
Android音频子系统(十)------MTK Audio录音流程代码解析
你好!这里是风筝的博客,欢迎和我一起交流。Android framework中的代码每个平台基本都是大同小异,只有Hal上代码才是厂商特制,每个平台都不相同,这里以MTK平台为例,记录下MTK平台Hal audio音频录音代码流程。调用大致流程如下AudioALSAHardwa: openInputStream() AudioALSAStreamManager: openInputStream() AudioALSAStreamIn: AudioALSAStreamIn //new Audi原创 2022-05-16 21:36:57 · 8177 阅读 · 6 评论 -
Android音频子系统(九)------数字耳机功耗问题解析
你好!这里是风筝的博客,欢迎和我一起交流。其实我们知道,在手机里面,除了相机和整机性能,还有一个用户最关键的地方:功耗。功耗一直是用户在意的地方,如果用户用手机发现耗电耗得飞起,那估计在网上能把人喷死。所以这里,抛砖引玉,放一个数字耳机播放音乐功耗高的问题解析,仅供学习参考。背景【前提条件】飞行模式,默认音量,手动息屏【操作步骤】1.手机插入数字耳机,关闭音效,调节到默认媒体音量2.打开音乐播放器,添加《测试专用音乐.mp3》到播放列表3.点击播放歌曲2秒内手动息屏,播放45秒后记录播原创 2022-04-04 18:57:24 · 6153 阅读 · 5 评论 -
Android音频子系统(八)------数字耳机通话无声问题解析
你好!这里是风筝的博客,欢迎和我一起交流。又是一个数字耳机的坑,又被我遇到了,唉。。。测试原话反馈:客观测试,数字耳机通话上行响度不达标。因为我是做手机的嘛,手机场景这么多,直接面向用户的,所以测试非常多,也考虑用户感受,不然如果手机不好用估计要被用户喷死。。。。。这里就分为主观测试和客观测试:主观测试:音频测评工程师就带上数字耳机通话,肉身感受通话音频效果质量。客观测试:把手机放在音频实验室(有一个人头模型),给人工耳挂上耳机,人工嘴挂上耳机mic,用机器来测试。然后实验室里面还有一个伪原创 2022-03-25 17:59:42 · 5240 阅读 · 13 评论 -
Android音频子系统(七)------数字耳机播192KHz音乐卡顿问题解析
你好!这里是风筝的博客,欢迎和我一起交流。之前有分析过一篇卡顿的问题:Android音频子系统(六)------拍照音卡顿问题解析这里再放一篇音频卡顿分析吧,区别于之前,这次是数字耳机播放192KHz音乐场景。复现步骤:1.打开QQ音乐播放192K音乐2.打开允许其他应用播放开关3.进入网易云音乐播放192K音乐4.打开允许其他应用播放开关此时注意听数字耳机,概率性的音乐会突然卡顿一下!找测试要来了log分析,看了下log,卡顿时间:17:54:33.114822 1599 15原创 2022-03-16 16:12:54 · 7628 阅读 · 2 评论 -
Android音频子系统(六)------拍照音卡顿问题解析
你好!这里是风筝的博客,欢迎和我一起交流。自从去年来了手机厂板砖,就好久没有更新了,实在是太忙了。。。。。。现在疫情原因,就居家办公了,抽空整理下最近遇到的一些音频问题,供大家学习参考。测试报了一个拍照音卡顿的问题:【前提条件】【Prerequistes】暗环境【操作步骤】【Operation steps】夜景模式点击拍照【实际结果】【Actual results】拍照声音卡顿emmm,卡顿问题在音频里面老生常谈了,拿到log,之后,打开音频dump文件看了下,主要查看ivdump信号。.原创 2022-03-14 15:16:53 · 14331 阅读 · 8 评论 -
Android音频子系统(二)------threadLoop_write数据写入流程
你好!这里是风筝的博客,欢迎和我一起交流。之前的文章:Android音频子系统(一)------openOutput打开流程讲述了Output打开过程,那么接下来它是何时如何写入数据的呢?这里以Android N为例//@Threads.cppbool AudioFlinger::PlaybackThread::threadLoop(){ //...... ret = threadLoop_write(); //......}threadLoop还是比较太复杂的,我把他放在了这里原创 2021-06-09 14:58:29 · 3331 阅读 · 4 评论 -
Android音频子系统(四)------耳机拔插流程
你好!这里是风筝的博客,欢迎和我一起交流。耳机上报主要有两种方式:1.UEvent2.InputEvent两种模式的切换可以使用配置项来完成,Android 系统默认是使用UEvent的方式。不过一般厂商会在自己的xml文件里进行配置。例如我这板子配置:device/softwinner/ceres-spen/overlay/frameworks/base/core/res/res/values/config.xml:140: <bool name="config_useDev原创 2021-05-27 21:06:45 · 3927 阅读 · 3 评论 -
Android音频子系统(五)------AudioFlinger处理流程
播放线程的基类都是Thread,classThread : virtual public RefBase (system/core/include/utils/Thread.h)class ThreadBase : public Thread(frameworks/av/services/audioflinger/Threads.h)class PlaybackThread : public ThreadBase(frameworks/av/services/audioflinger/Threads原创 2021-03-15 20:30:22 · 3642 阅读 · 0 评论 -
Android音频子系统(三)------AudioTrack流程解析
你好!这里是风筝的博客,欢迎和我一起交流。在了解AudioTrack之前,先从网上找了张图简单描述 AudioTrack、PlaybackThread、输出流设备三者的对应关系:一般来说,输出流设备决定了它对应的 PlaybackThread 是什么类型,PlaybackThread 实例与输出流设备是一一对应的(OffloadThread 只会将音频数据输出到 compress_offload 设备中,MixerThread(with FastMixer) 只会将音频数据输出到 low_late原创 2021-03-09 11:10:39 · 4597 阅读 · 2 评论 -
Android音频子系统(一)------openOutput打开流程
你好!这里是风筝的博客,欢迎和我一起交流。Audio在Android也算是比较复杂的系统,我也是一边学习一边做笔记,如果有不对的地方看样子在评论区指出。status_t AudioFlinger::openOutput(audio_module_handle_t module, audio_io_handle_t *output, audio_config_t *c原创 2021-02-17 23:25:08 · 3715 阅读 · 0 评论 -
Android系统学习(五)------Android下编写C/C++可执行程序
你好!这里是风筝的博客,欢迎和我一起交流。习惯Linux的人,在刚开始使用Android的时候,都会想:能不能像Linux一样,通过arm-linux-gcc -o test test.c编译出一个可执行程序放到Android环境下跑呢?当然也是可以的,通过编写Android.mk实现。1.进入hardware目录下,在里面随便建一个目录,比如我用的aw的板子:cd ./hardware/aw/sensors/mkdir demo && cd demo2.编写自己原创 2020-05-28 10:29:59 · 904 阅读 · 0 评论 -
Android中判断socket通信断开
你好!这里是风筝的博客,欢迎和我一起交流。如果本篇博客对您有帮助,或许可以在下方评论给我留个言呀。可以引起网络连接关闭的情况有以下4种:1. 直接调用Socket类的close方法。2. 只要Socket类的InputStream和OutputStream有一个关闭,网络连接自动关闭(必须通过调用InputStream和OutputStream的 clo原创 2017-04-21 19:20:25 · 13991 阅读 · 2 评论 -
安卓生成、显示二维码APP代码实现
你好!这里是风筝的博客,欢迎和我一起交流。开发工具:Android Studio。需要一个jar包:http://download.youkuaiyun.com/detail/guet_kite/9885632这是一个生成QR二维码的包。至于怎么导包,Google下你就知道,不会Google都不好意思说自己是程序员。 先上第一道菜,UI界面的代码: <?xml ve...原创 2017-06-30 21:01:12 · 7720 阅读 · 0 评论 -
Android系统学习(三)------编写Android代码访问服务框架
你好!这里是风筝的博客,欢迎和我一起交流。修改默认字体大小:vi packages/apps/Settings/res/values/arrays.xml在里面找到entryvalues_font_size数组: &amp;amp;amp;amp;amp;amp;lt;string-array name=&amp;amp;amp;amp;amp;quot;entryvalues_font_size&amp;amp;amp;amp;amp;qu原创 2019-01-28 19:24:56 · 800 阅读 · 0 评论 -
Android系统学习(六)------裁剪Android系统
你好!这里是风筝的博客,欢迎和我一起交流。添加/删除 Android里app源码,参考:Android源码里packages里面的结构~~~android系统源码中添加app源码(源码部署移植)技术有限,先做那么多,未完,待续…...原创 2020-06-27 20:26:39 · 3961 阅读 · 1 评论 -
Android系统学习(一)------编译系统Android7.0
你好!这里是风筝的博客,欢迎和我一起交流。最近入手了一块nanopi m4,这块板子的芯片是rk3399,而且板子开放有源码,正好拿来学习安卓系统!板子wiki:http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M4/zh从GitHub上下载了他的源码,给的是安卓7.0,他的编译脚本是build-nanopc-t4.sh文件,执行编译就好...原创 2019-01-22 22:07:03 · 1242 阅读 · 0 评论 -
Android系统学习(二)------修改串口波特率
你好!这里是风筝的博客,欢迎和我一起交流。之前,我们把rk3399的安卓源码编译好之后,插上USB转串口模块想进行调试以及查看启动log,发现是乱码,看了wiki后发现串口波特率是1500000,波特率很高,我用的是MobaXterm这个软件,发现没有1500000这个波特率选项,也不可以自定义波特率,然后我换了一个软件,使用XCOM这个串口调试软件,它支持自定义波特率,终于看到nanopi...原创 2019-01-22 22:40:53 · 7075 阅读 · 2 评论 -
Android系统学习(四)------关于init进程及开机自启动
你好!这里是风筝的博客,欢迎和我一起交流。初入Android,本篇文章不过是拾人牙慧,见笑了~init语法基本由四个部分组成:Actions、Commands、Services、Options#这里on &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;trigger&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;就是一个Actions#write 、restorecon 、start原创 2019-02-23 21:12:23 · 2307 阅读 · 0 评论 -
安卓手机Socket通信程序
你好!这里是风筝的博客,欢迎和我一起交流。前几天在我的群里发现好多群友在弄ESP-8266这款wifi模块,想起当初我在玩这个模块时想自己做一个手机app上位机,趁着清明放假,就把这个app做出来吧。(java没怎么学过,Android只会简单的拖拖控件,这个app还是挺捉急的......)先看下UI的源码。这是activity_main.xml源码: <?xml ...原创 2017-04-05 17:11:27 · 1139 阅读 · 0 评论