[置顶] Android 音频数据传输流程图 - Playback过程

【图示】 【简要说明】     1、APP 将音频文件(比如.mp3文件)数据读取到匿名共享内存中;     2、AudioFlinger 从匿名共享内存中读取音频数据,通过 HAL 层接口将这些数据写入到 DMA 缓冲区;     3、DMA 控制器将 DMA 缓冲区中的数据拷贝到 SoC 的 I2S Tx FIFO 开始向 Codec 传输;     4、Codec 固件会自...
阅读(60) 评论(0)

[置顶] Android Audio BSP工程师 需要清楚的基本知识点

【前言】     这是我根据自己的工作经验所总结,有一定代表性,但可能不齐全。这只是个提纲。 【知识点】     按照在操作系统中的层次划分,从上到下依次为: 1、Android系统分层模型。知道 APP、JNI、Frameworks、HAL、Driver 的划分以及 用户空间、内核空间 的概念。 2、Android Audio模块的启动、加载 及 放音/录音 流程。起码应该了解...
阅读(79) 评论(0)

[置顶] Android音频模块启动流程分析

Android音频模块启动流程分析Qidi 06.08.2017 (Markdown & Haroopad)1) 设备开机,系统启动时将执行 /system/etc/init/audioserver.rc ,运行 /system/bin/ 目录下的 audioserver 服务。audioserver.rc 内容如下:service audioserver /system/bin/audioserv...
阅读(105) 评论(0)

【I2C设备驱动】必须将id_table[]数组的最后一个元素设置为空的原因

忘记了在哪本书上看到过,说必须给 I2C 设备驱动的 id 表数组添加上一个空元素作为最后一个元素,就像下面的代码所展示的那样:struct i2c_device_id { char name[I2C_NAME_SIZE]; kernel_ulong_t driver_data; /* Data private to the driver */ } static const str...
阅读(11) 评论(0)

Android系统 boot.img 结构

【前言】   本文以我使用的 Intel x86 cherrytrail 平台为例进行说明,部分细节可能会与其它设备上看到的不同,比如 easyimage 是我们产品上自定义的分区,其它设备上如果没有是正常的。【正文】 编译完成后我们可以在out/target/product//obj/PACKAGING/target_files_intermediates/...
阅读(28) 评论(0)

把“dereference”翻译成“提领”不如直译为“引用解析”

【正文】   这 2 天在回顾《内核设计与实现(第3版)》这本书时又看到了“提领”这种说法,它出现在书上第 75 页。估计译者当时也不知道应该翻译成什么中文词汇比较好,所以在译文后加上了英文原文“dereference”。书上的原文是这样的: 节约两次提领(dereference)   如果你碰巧已经得到了 next 和 prev 指针,你可以直接调用内部链表函数,从而省下一点时间(其实...
阅读(51) 评论(0)

Android系统中耳机按键键值上报不正确 解决过程

【问题现象】   根据测试组同事反馈:在我们的设备上使用 JBL 品牌某款带有 3 个按键的有线耳机时,按下“音量+”键时设备会减小音量而不是增加音量,按下“音量-”键时设备无响应;在设备上使用 Samsung 品牌某款带有 3 个按键的有线耳机时,按下“音量-”键时设备会启动语音助手而不是减小音量。但按下 2 款耳机的中间键(播放/暂停键)均可以得到正确的响应。 【分析问题】...
阅读(89) 评论(0)

Android系统下在te文件中为指定服务添加sepolicy权限

【正文】   设备在播放视频时有异常,使用Logcat查看日志时发现了如下记录:04-27 14:01:59.136 2825 2825 E SELinux : avc: denied { find } for service=display pid=3015 uid=1046 scontext=u:r:mediacodec:s0 tcontext=u:object_r:display_servi...
阅读(530) 评论(0)

Miracast与Wi-Fi Direct技术简介

【使用场景相关】     2 个支持 Miracast 功能的设备进行互连时,并不需要将它们连接至同一个 WLAN 网络上(也即不需要连接至同一个无线路由器或AP上)。因为 Miracast 是基于 Wi-Fi Direct 技术实现的。 【Miracast 简介】     Miracast 是一种通过无线连接的方式将设备(比如笔记本电脑、平板电脑、智能手机)的音视频传送到显示设备(...
阅读(638) 评论(0)

【转】UsbAccessory和UsbDevice的区别

UsbAccessory和UsbDevice的区别 UsbDevice:正常的,USB的Host和USB的Device架构中的USB的Device 所以,此时:Android设备是USB的Host,外接的USB设备是USB的Device 此时,Android设备作为USB的Host,要做USB Host该干的事情: 给USB外接设备供电 负责管理USB总线...
阅读(298) 评论(0)

Android系统下解决音频underrun噪声问题的一种更优方法

【问题概要】     上一次我介绍了一种 Android 系统下发生音频 underrun 问题的解决方法(参见《记一次Android系统下解决音频UnderRun问题的过程》),这之后平静了一段时间,测试组同事也没有再报告相关的噪声问题。     但就在前 2 天,测试组同事告诉我说她们又听见噪声了,并且这次的使用场景比上次复杂了许多——由于从 Android 6.0 开始已经支持应用多开以...
阅读(499) 评论(0)

Android系统中固件崩溃后使用uevent机制重新加载固件 流程分析

【前言】     Android系统为了保证各商业公司的利益,允许在系统中使用不开源的固件。因此我们可以看到比如用于音频处理的、用于键盘支持的等等大量固件。既然这么多模块要用到固件,那么我们也有必要来了解一下固件在崩溃后的自恢复过程。这篇博文是基于 Intel x86 平台写的,所分析的固件是 Intel 平台的一款音频 DSP 固件,使用 uevent 机制来收发固件恢复消息。所以如果读者使用...
阅读(322) 评论(0)

repo回退当前分支下所有仓库到指定日期前的最新代码版本

执行下面这样的repo命令就行了:repo forall -c 'commitID=`git log --before "2017-03-17 07:00" -1 --pretty=format:"%H"`; git reset --hard $commitID'参数说明: forall  操作分支中的所有仓库 -c  只操作当前分支 –before  早于指定时间点的提交记录 -1  只显...
阅读(779) 评论(0)

使用reaver命令穷举PIN码破解WPA2-PSK加密的无线网络

【前言】     现在的路由器大多都默认用 WPA2-PSK 方式对无线网络进行加密了,不能再像 WEP 加密方式那样好破解,使用字典又需要费心费力地整理字典,而且字典破解的效率还慢。所以我们需要更有效率的破解方法。好在现在大多数的路由器都提供 WPS 功能,通过这个功能,用户可以使用 PIN 码登录到路由器。但这个 PIN 码的长度只有 8 位,而且可能的取值只有11000种(注意,不是 10...
阅读(514) 评论(0)

定位和解决git am冲突的方法

【正文】     在踩过几次坑之后,大多数工程师都会学会使用patch的形式来保存各个模块/功能的代码改动,这样可以很方便地为相应模块添加或者去除相关功能的代码。但是伴随着主线代码的不断更新,我们在早期保存出来的patch中有部分内容可能已经不能再直接打入现在的代码里了。这种情况下可以使用下面的方法解决冲突:     1、执行命令 git  am xxxx.patch 尝试直接打入补丁。因为我...
阅读(288) 评论(0)
129条 共9页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:124886次
    • 积分:2495
    • 等级:
    • 排名:第14036名
    • 原创:114篇
    • 转载:11篇
    • 译文:4篇
    • 评论:32条
    邮箱
    huang_qi_di@hotmail.com
    文章分类
    最新评论