【车载audio开发】【Qualcomm PAL 详解 6】【PAL 总体架构与模块交互指南】

PAL 总体架构与模块交互指南

1. 宏观架构:PAL 的世界观

欢迎来到 Qualcomm PAL (Platform Audio Layer) 的世界。为了更好地理解,我们继续使用餐厅的比喻:

  • Android HAL (Client):顾客。负责点菜(提需求)。
  • Stream (流):订单。记录了顾客要什么(听歌、打电话、录音),并负责整个服务流程的进度。
  • Session (会话):厨房。负责真正的制作(DSP 音频处理、混音、重采样)。
  • Device (设备):餐桌/外卖窗口。最终呈现声音的地方(喇叭、耳机)。
  • ResourceManager (RM):大堂经理。统筹全局,安排哪个订单去哪个厨房,送到哪张桌子,处理突发情况(插队、换桌)。

2. 核心交互流程图

1. pal_stream_open
2. 请求资源
3. 分配 Device
4. 创建 Session
5. pal_stream_start
6. start()
7. 冲突检查 & 并发控制
8. start()
9. 打开硬件通路(Mixer)
10. prepare() & start()
11. 配置 DSP Graph
12. pal_stream_write(数据)
13. write()
14. pcm_write

Android Audio HAL

Stream(订单)

ResourceManager(经理)

Device(餐桌)

Session(厨房)

Audio Hardware

DSP

Kernel / DSP Driver


3. 深度解析:一次完整的音频播放

让我们跟踪一次“播放音乐”的全过程,看看各模块如何协作。

第一阶段:创建与建立连接 (Open)

  1. Client: 调用pal_stream_open(STREAM_LOW_LATENCY, DEVICE_SPEAKER)
  2. Stream: 创建StreamPCM对象。
  3. Stream -> RM:
    • 调用rm->getDeviceConfig():经理,Speaker 需要什么参数?(RM 查 XML 返回:48kHz, 24bit)。
    • 调用Session::makeSession(rm):创建一个能处理 PCM 的厨房(通常是SessionAlsaPcm)。
    • 调用rm->registerStream():经理,记下来,现在有一单音乐要播放。
  4. 关联: Stream 内部保存了SessionDevice的指针。连接建立完毕。

第二阶段:启动与资源分配 (Start)

  1. Client: 调用pal_stream_start()
  2. Stream -> RM: 经理,我要开始播了,可以吗?
  3. RM:
    • 检查并发:现在有电话吗?有语音唤醒吗?(如果有,RM 会通知其他 Stream 暂停或由 DSP 混音)。
    • 增加引用计数:Speaker 的使用人数 +1。
  4. Stream -> Device:device->start()
    • Device: 下发 Mixer Controls (如"SLIMBUS_0_RX Audio Mixer MultiMedia1"),打通物理通路。
  5. Stream -> Session:session->prepare()->session->start()
    • Session:
      • 从 RM 申请 FrontEnd ID (比如pcm0p)。
      • 从 Device 知道 BackEnd Name (比如QUAT_TDM_RX_0)。
      • 关键动作: 配置 DSP,告诉它“把 PCM0 的数据处理完后,送到 TDM_RX_0 接口”。
      • 调用pcm_start激活内核节点。

第三阶段:数据传输 (Running)

  1. Client: 循环调用pal_stream_write(buffer)
  2. Stream: 不做处理,直接透传。
  3. Session: 调用pcm_write(TinyALSA) 将数据写入共享内存或内核缓冲区。
  4. DSP/Kernel: 读取数据 -> 音效处理 -> 发送给 Codec -> 喇叭发声。

第四阶段:动态设备切换 (Device Switch)

场景:插耳机

  1. RM: 收到ConnectionStateChange事件。
  2. RM: 扫描所有活跃 Stream,发现MusicStream在用Speaker
  3. RM -> Stream: 强制切换!
    • 调用stream->disconnectStreamDevice(Speaker)
    • 调用stream->connectStreamDevice(Headphone)
  4. Stream:
    • 暂停 Session 数据写入(防止杂音)。
    • Device(Speaker)->stop()
    • Device(Headphone)->start()
    • Session更新路由配置 (告诉 DSP 换出口)。
    • 恢复 Session 数据写入。

4. 模块间接口汇总

调用方被调用方关键接口目的
StreamRMregisterStream注册自己,纳入管理
StreamRMgetDeviceConfig获取设备能力
StreamSessionopen,start,write控制 DSP 管道
StreamDevicestart,stop控制物理硬件开关
RMStreamswitchDevice通知流进行设备切换
SessionRMallocateFrontEndIds申请 PCM 设备号
SessionRMgetVirtualAudioMixer获取 Mixer 句柄

5. 常见问题 (FAQ)

  • Q: 为什么要分 Stream 和 Session?
    • A: 解耦。Stream 关注业务(播放/录音/通话),Session 关注底层实现(TinyALSA/GSL/AGM)。如果高通换了底层架构(比如从 ALSA 换到 GSL),只需要重写 Session,Stream 层的业务逻辑不用动。
  • Q: ResourceManager 的 XML 到底决定了什么?
    • A: 它决定了“静态路由图”。比如:哪个流类型对应哪种 Session 模式?哪个 Device 对应哪个 Backend 接口?所有的硬件拓扑都在 XML 里。
  • Q: 为什么会有并发问题?
    • A: 硬件资源是有限的。比如 DSP 里的回声消除 (EC) 模块可能只有一个,或者某个 Backend 接口同一时间只能跑一个采样率。RM 的作用就是协调这些冲突。

6. 学习路线建议

  1. 入门: 先看Stream模块介绍,理解业务流程。
  2. 进阶: 结合ResourceManager 模块介绍和 XML 文件,理解系统是如何配置起来的。
  3. 深入: 阅读Session 模块介绍Device 模块介绍,理解数据到底是怎么送到底层的。
  4. 实战: 尝试在resourcemanager.xml中新增一个 Device,并在代码中打通它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1196492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据毕设源码分享】springboot基于大数据的音乐数据分析系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026最新强韧柔顺洗发水国货品牌top5推荐!国内优质洗发水企业权威榜单发布,科学护发方案助力解决多重头皮困扰

当代生活节奏加快,压力、熬夜、环境污染等因素导致头皮亚健康问题日益普遍,宝妈、油头人群、干枯受损发质及女性脱发人群对洗护产品的功效性与安全性需求显著提升。据中国日用化工协会2025年度行业报告显示,国内防脱…

DBeaver 使用笔记

1.格式化sql 鼠标右键》格式》格式化

基于stm32单片机的智能空调系统

目录 硬件组成软件设计智能控制逻辑通信与扩展应用场景 源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 硬件组成 STM32单片机:作为核心控制器,负责数据处理、逻辑控制及外设管理,常用型号包括STM32…

AI学术工具全面测评:6款高效平台实现论文自动润色与表达优化

开头总结工具对比(技能4) �� 基于实际使用案例,从处理速度、降重效果和核心优势三个维度,对6款热门AI论文工具进行横向评测,帮助学生快速筛选最适合的工具。 工具名称 处理速度 降重幅度 独…

基于STM32单片机的智能粮仓信息采集系统

目录 STM32单片机在智能粮仓信息采集系统中的应用系统硬件组成系统软件设计数据处理与分析系统优势与扩展性 源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! STM32单片机在智能粮仓信息采集系统中的应用 STM32单片机因其高性能、低功耗…

`Dataset` 类中 `__len__` 和 `__getitem__` 方法的具体作用

__len__ 和 __getitem__ 是 PyTorch torch.utils.data.Dataset 抽象类要求必须实现的两个方法,是 PyTorch 数据加载体系的「基石」——__len__ 回答:数据集一共有多少个样本? __getitem__ 回答:给定一个索引 idx,…

Ivan Zhao | 蒸汽、钢铁与无限心智

注:本文为英文引文,机翻未校。 如有内容异常,请看原文。 Steam, Steel, and Infinite Minds 蒸汽,钢铁和无限心智 December 23, 2025 By Ivan Zhao Every era is shaped by its miracle material. Steel forged the Gilded Age…

【AI+教育】生成式AI赋能教育研究与写作

在AI技术飞速渗透教育领域的当下,生成式AI不仅能辅助教学,更能成为教育研究与论文写作的高效工具。本文结合实操场景,拆解AI在教育研究方法设计、学术写作中的应用要点,全程保留核心原话与实操细节,助力教育从业者、研究者快速上手。 一、教育研究方法设计:四框架+AI辅助…

《AI应用架构师:用AI智能体为中小学初等教育智能化教育辅助增添新活力》

1. 标题(Title) 《AI应用架构师:用AI智能体为中小学初等教育智能化教育辅助增添新活力》 《从0到1打造中小学AI助教:AI应用架构师实战指南》 《让AI走进课堂:中小学智能教育辅助系统的架构与落地》 《AI应用架构师必修课:构建中小学个性化学习助手》 《教育+AI新范式:中…

基于stm32单片机的智能行李箱系统

目录硬件设计软件功能用户交互电源管理安全机制源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!硬件设计 STM32单片机作为主控芯片,通常选择STM32F103系列或STM32F4系列,具备丰富的外设接口和低功耗特性。系统集…

LangChain入门(九)- 从单元测试到行为轨迹追踪,让你的AI不再“乱拐弯”

前言最近在研究LangChain的测试模块,不得不说这玩意儿设计得挺有意思。传统的单元测试在AI智能体面前就像用尺子量水流量——完全不对路。想想看,一个简单的智能体就包含了LLM的随机性、Prompt的蝴蝶效应、工具调用的不确定性,这测试难度直接…

基于STM32单片机的智能衣柜的设计系统

目录STM32智能衣柜系统概述硬件设计软件设计应用场景扩展功能源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!STM32智能衣柜系统概述 智能衣柜系统基于STM32单片机实现环境监测、衣物管理、远程控制等功能,结合传感器、无线…

【好物推荐】高效文件分享神器!草料二维码让资料传递告别繁琐

高效文件分享神器!草料二维码让资料传递告别繁琐 在日常工作中,你是否还在为文件分享的繁琐流程烦恼?邮件附件易超限、网盘分享需登录、微信传文件格式易错乱……这些痛点,一款在线工具就能轻松解决——它就是草料二维码(官网:cli.im)。这款功能强大的在线二维码生成器…

基于STM32单片机的智能路灯系统

目录STM32智能路灯系统概述核心功能模块硬件组成软件设计应用优势典型应用场景源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!STM32智能路灯系统概述 STM32智能路灯系统是基于STM32微控制器设计的物联网解决方案,通过传感器…

论文写作利器:6款AI驱动平台对比评测,智能润色让语言更专业

开头总结工具对比(技能4) �� 为帮助学生们快速选出最适合的AI论文工具,我从处理速度、降重效果和核心优势三个维度,对比了6款热门网站,数据基于实际使用案例: 工具名称 处理速度 降…

基于stm32单片机的智能台灯系统

目录硬件组成软件功能创新设计应用场景源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!硬件组成 STM32单片机作为主控芯片,负责数据处理和逻辑控制。常见的型号包括STM32F103系列,具备丰富的外设接口和较强的处理…

AI论文助手Top8:横向对比平台写作质量与降重效率,便捷化操作体验

AI论文生成工具排行榜:8个网站对比,论文降重写作功能全 工具对比总结 以下是8个AI论文工具的简要排名,基于核心功能、处理速度和适用性对比。排名侧重实用性与用户反馈,数据源于引用内容案例: 工具名称 主要功能 优…

LLM实时解析饮食日记,糖尿病管理更精准

📝 博客主页:Jax的CSDN主页 目录 LLM实时解析饮食日记:糖尿病管理的精准革命 引言:饮食管理的精准化困局 技术价值:从场景痛点到LLM能力映射 2.1 痛点解构:糖尿病管理的“实时性缺口” 2.2 LLM能力映射&…

WebAPI 项目通过 CI/CD 自动化部署到 Linux 服务器(docker-compose)

本文先列举了一个简单的示例项目,然后通过 CI/CD 的方式,将私有镜像库 Harbor 中的镜像,发布到 Linux 中的 Docker 服务。〇、前言 本文先列举了一个简单的示例项目,然后通过 CI/CD 的方式,将私有镜像库 Harbor 中…