<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[we1less的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/we1less</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; we1less]]></copyright><item><title><![CDATA[[audio] Audio debug]]></title><link>https://blog.csdn.net/we1less/article/details/156648722</link><guid>https://blog.csdn.net/we1less/article/details/156648722</guid><author>we1less</author><pubDate>Tue, 06 Jan 2026 16:15:02 +0800</pubDate><description><![CDATA[看 track 是否挂载在 flag 为 fast 的 thread 下，fastMixer 是否正常。耳机是否插上，内录设备 r_submix 是否出现，蓝牙是否连接。有多个 device 在，具体哪个设备出声，或者多个设备出声。检查 output device 是否是 speaker。检查 active tracks 是否有目标音频流。thread standby 是否为 no。3 检查音频路由设备切换是否正确。4 检查音频设备是够正常链接。tee sink  参考。]]></description><category></category></item><item><title><![CDATA[[audio] AudioPolicy (二) Engine 分析]]></title><link>https://blog.csdn.net/we1less/article/details/156577121</link><guid>https://blog.csdn.net/we1less/article/details/156577121</guid><author>we1less</author><pubDate>Sun, 04 Jan 2026 21:27:36 +0800</pubDate><description><![CDATA[【代码】[audio] AudioPolicy (二) Engine 分析。]]></description><category></category></item><item><title><![CDATA[[audio] AudioPolicy (一) 启动分析]]></title><link>https://blog.csdn.net/we1less/article/details/156558570</link><guid>https://blog.csdn.net/we1less/article/details/156558570</guid><author>we1less</author><pubDate>Sun, 04 Jan 2026 08:55:10 +0800</pubDate><description><![CDATA[av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp  构造器。走到这的话后面的流程参考前几篇文章。]]></description><category></category></item><item><title><![CDATA[[audio] AudioFlinger threadLoop_write 到 audio-hal 分析]]></title><link>https://blog.csdn.net/we1less/article/details/156517903</link><guid>https://blog.csdn.net/we1less/article/details/156517903</guid><author>we1less</author><pubDate>Fri, 02 Jan 2026 21:15:25 +0800</pubDate><description><![CDATA[将数据写入到 hal 中。]]></description><category></category></item><item><title><![CDATA[[audio] AudioFlinger loadHwModule_ll openOutput_l 分析]]></title><link>https://blog.csdn.net/we1less/article/details/156506593</link><guid>https://blog.csdn.net/we1less/article/details/156506593</guid><author>we1less</author><pubDate>Fri, 02 Jan 2026 11:12:12 +0800</pubDate><description><![CDATA[将数据写入到 hal 中。]]></description><category></category></item><item><title><![CDATA[[audio] AudioTrack (七) 播放流程分析]]></title><link>https://blog.csdn.net/we1less/article/details/156491150</link><guid>https://blog.csdn.net/we1less/article/details/156491150</guid><author>we1less</author><pubDate>Thu, 01 Jan 2026 22:01:02 +0800</pubDate><description><![CDATA[因为之前分析创建流程时知道，]]></description><category></category></item><item><title><![CDATA[[audio] AudioTrack (六) 共享内存使用分析]]></title><link>https://blog.csdn.net/we1less/article/details/156465385</link><guid>https://blog.csdn.net/we1less/article/details/156465385</guid><author>we1less</author><pubDate>Wed, 31 Dec 2025 21:30:37 +0800</pubDate><description><![CDATA[写入一个数据：w = W % LEN；等价于 w = W & （LEN -1）读取一个数据：r = R % LEN；等价于 r = R & （LEN -1）环形缓冲区，[ audio_track_cblk_t ] [ FIFO ] 如何读取和写入。环形缓冲区：初始 R = 0，W = 0，buf 长度为 LEN。判断 满：W - R == LEN。判断 空：W == R。]]></description><category></category></item><item><title><![CDATA[[audio] AudioTrack (五) 共享内存创建分析]]></title><link>https://blog.csdn.net/we1less/article/details/156458655</link><guid>https://blog.csdn.net/we1less/article/details/156458655</guid><author>we1less</author><pubDate>Wed, 31 Dec 2025 17:25:48 +0800</pubDate><description><![CDATA[如果参数是 MODE_STREAM shared mem 参数就是 0。如果参数是 MODE_STATIC 那直接在app层申请内存。MODE_STREAM 是用来播放一个音频流。在初始化父类构造器的时候，alloc 值为。在创建 AudioTrack 有一个变量需要设置。]]></description><category></category></item><item><title><![CDATA[[audio] AudioTrack (四) getOutputForAttr 分析]]></title><link>https://blog.csdn.net/we1less/article/details/156432711</link><guid>https://blog.csdn.net/we1less/article/details/156432711</guid><author>we1less</author><pubDate>Tue, 30 Dec 2025 22:21:50 +0800</pubDate><description><![CDATA[【代码】[audio] AudioTrack (三) getOutputForAttr 分析。]]></description><category></category></item><item><title><![CDATA[[audio] AudioTrack (三) dumpsys media.audio_policy]]></title><link>https://blog.csdn.net/we1less/article/details/156412472</link><guid>https://blog.csdn.net/we1less/article/details/156412472</guid><author>we1less</author><pubDate>Tue, 30 Dec 2025 11:30:06 +0800</pubDate><description><![CDATA[ProductStrategyMap 是 ProductStrategy 存储map，遍历 dump。ProductStrategyMap 是如何被装载的呢。]]></description><category></category></item><item><title><![CDATA[[audio] 基础知识]]></title><link>https://blog.csdn.net/we1less/article/details/156377051</link><guid>https://blog.csdn.net/we1less/article/details/156377051</guid><author>we1less</author><pubDate>Mon, 29 Dec 2025 09:03:38 +0800</pubDate><description><![CDATA[一个output是多个device的组合，比如声卡上有喇叭(dev1)和耳机(dev2)，这些device属于同一个硬件上不同的端口。profile：配置，用来描述 output 支持哪些设备（仅逻辑上支持，不一定有实际硬件，比如耳机 output是插上耳机就支持，不插耳机就不支持，但profile一直支持）device：具体出声的设备，比如手机喇叭、耳机，录制设备，比如mic设备 media/audio/include/system/audio-hal-enums.h。output：音频数据的输出通道。]]></description><category></category></item><item><title><![CDATA[[audio] AudioTrack (二) 创建分析]]></title><link>https://blog.csdn.net/we1less/article/details/156362906</link><guid>https://blog.csdn.net/we1less/article/details/156362906</guid><author>we1less</author><pubDate>Sun, 28 Dec 2025 21:18:56 +0800</pubDate><description><![CDATA[app侧调用的api是。]]></description><category></category></item><item><title><![CDATA[[audio] AudioTrack (一) 使用]]></title><link>https://blog.csdn.net/we1less/article/details/156361078</link><guid>https://blog.csdn.net/we1less/article/details/156361078</guid><author>we1less</author><pubDate>Sun, 28 Dec 2025 15:27:16 +0800</pubDate><description><![CDATA[【代码】[audio] AudioTrack 使用。]]></description><category></category></item><item><title><![CDATA[systrace perfetto 性能分析]]></title><link>https://blog.csdn.net/we1less/article/details/156311298</link><guid>https://blog.csdn.net/we1less/article/details/156311298</guid><author>we1less</author><pubDate>Fri, 26 Dec 2025 17:44:15 +0800</pubDate><description><![CDATA[【代码】systrace perfetto 性能分析。]]></description><category></category></item><item><title><![CDATA[Android-HAL (四) 2 AIDL 更新]]></title><link>https://blog.csdn.net/we1less/article/details/156279173</link><guid>https://blog.csdn.net/we1less/article/details/156279173</guid><author>we1less</author><pubDate>Thu, 25 Dec 2025 21:58:51 +0800</pubDate><description><![CDATA[摘要：本文描述了在Android硬件接口中添加新函数并升级到V2版本的过程。首先在IMyTest.aidl接口中新增addTest函数，编译后自动生成V2版本接口。接着修改Android.bp文件，将依赖从V1改为V2版本。然后实现服务端代码，包括MyTestImpl.h头文件声明和MyTestImpl.cpp实现文件，其中包含test()和addTest()两个接口函数的具体实现。整个过程涉及AIDL接口定义更新、版本升级、NDK依赖调整和服务端代码实现等步骤，展示了Android硬件服务开发的完整流程。]]></description><category></category></item><item><title><![CDATA[Android-HAL (二) 2 HIDL Passthrough 分析 Mapper]]></title><link>https://blog.csdn.net/we1less/article/details/156218426</link><guid>https://blog.csdn.net/we1less/article/details/156218426</guid><author>we1less</author><pubDate>Wed, 24 Dec 2025 07:55:38 +0800</pubDate><description><![CDATA[Passthrough - HAL通常是framework进程通过HIDL接口调用，如何区分直通式还是绑定式呢。]]></description><category></category></item><item><title><![CDATA[Android-HAL (四) 1 AIDL 服务实现]]></title><link>https://blog.csdn.net/we1less/article/details/156115411</link><guid>https://blog.csdn.net/we1less/article/details/156115411</guid><author>we1less</author><pubDate>Sat, 20 Dec 2025 22:14:54 +0800</pubDate><description><![CDATA[drwxrwxr-x  3 godv godv 4096 12月 20 20:34 android.hardware.mytest-V1-java-source。drwxrwxr-x  3 godv godv 4096 12月 20 20:51 android.hardware.mytest-V1-rust-source。drwxrwxr-x  3 godv godv 4096 12月 20 20:34 android.hardware.mytest-V1-ndk-source。]]></description><category></category></item><item><title><![CDATA[Android-HAL (三) VNDK]]></title><link>https://blog.csdn.net/we1less/article/details/156013858</link><guid>https://blog.csdn.net/we1less/article/details/156013858</guid><author>we1less</author><pubDate>Wed, 17 Dec 2025 13:40:42 +0800</pubDate><description><![CDATA[vendor分区native开发需要使用的一系列库。]]></description><category></category></item><item><title><![CDATA[Android-HAL (二) 1 HIDL binder式 服务实现]]></title><link>https://blog.csdn.net/we1less/article/details/155998302</link><guid>https://blog.csdn.net/we1less/article/details/155998302</guid><author>we1less</author><pubDate>Wed, 17 Dec 2025 08:19:57 +0800</pubDate><description><![CDATA[需要对system分区和vendor分区之间的通信进行隔离，跨分区通信只能用HIDL形式。vendor分区 --AIDL--  vendor分区  --  /dev/vndbinder。system分区 --HIDL--  vendor分区  --  /dev/hwbinder。system分区 --AIDL--  system分区  --  /dev/binder。1. 为什么vendor分区和vendor分区 之间要使用vndbinder？有selinux权限控制，neverallow控制。]]></description><category></category></item><item><title><![CDATA[Android-HAL (一) hw_module_t 的类型实现]]></title><link>https://blog.csdn.net/we1less/article/details/155964845</link><guid>https://blog.csdn.net/we1less/article/details/155964845</guid><author>we1less</author><pubDate>Tue, 16 Dec 2025 09:04:04 +0800</pubDate><description><![CDATA[1 每一个 hardware 硬件抽象模块必须有一个module结构体，名字是 HAL_MODULE_INFO_SYM，即HMI，这个模块第一个成员变量是。的tag的值必须为 HARDWARE_MODULE_TAG，这个值就是用来标识硬件抽象的结构体。2 tag为所在硬件模块HARDWARE_DEVICE_TAG，代表是硬件设备结构体。1 每个硬件需要定义一个 hw_device_t。]]></description><category></category></item></channel></rss>