高通学习6--Camx (TODO)

发布时间:2026/10/10 12:28:58

高通学习6--Camx (TODO) TODOhttps://github.com/quic/sample-apps-for-robotics-platforms/tree/master/RB1RB2/peripheral-devices/camera-hal3-sample高通处理器的相机系统尤其是从骁龙845/865、RB5 到 RB1/RB2 开始用的架构是极为复杂的整体链路从上到下可以分为 4 层第 1 层ROS 2 / 应用层你的业务代码比如调用 Camera 读取图像并发送 ROS2 话题。第 2 层Camera HAL3 Sample就是这个 GitHub 链接 这是一个应用层的 Demo或者是camera_server的简化替代品。它直接去调用 Android 标准的hardware/libhardware/include/hardware/camera3.h接口。它的角色是“消费者”通过发起processCaptureRequest()、配置流Streams强行向底层的硬件索要图像数据。第 3 层CamX高通的硬核核心真正的商业机密这才是真正的CamX / Chi 架构。它作为高通的底层大 So二进制动态库如camera.qcom.so实现了 Android 的 HAL3 标准接口。当上面的 Sample 发出请求时CamX 内部的代码会去调度高通内部的 ISP图像信号处理器、控制 Sensor 上电、配置时钟。注CamX 的源码是绝对闭源的。非高通授权的 Tier-1 客户或没签高额 NDA 的开发者是根本看不到 CamX 源码的里面全是高通极致调优的 ISP 算法和寄存器配置。第 4 层Chi-CDK / Kernel 驱动负责在 Linux 内核层通过v4l2或者是高通专属的msm_cam节点跟摄像头芯片如 IMX577, OV9284进行物理的 I2C 通信和 MIPI 数据接收。可以学而且如果你的目标是在高通平台上真正把 Camera bring-up / debug 做起来我不建议从“CamX 全部源码”开始啃。CamX 太大最有效的方法是沿着一帧 Preview 的 request 和 buffer 到底怎么走来学。Android 官方的 Camera HAL 本质上位于 Camera2/framework 和底层 driver/hardware 之间HAL3 的核心模型就是 framework 下发 capture requestHAL 处理 request、buffer 和 metadata再异步返回 result。(Android Open Source Project)第一阶段先把 HAL3 搞懂先不要碰 CamX 细节。你至少要能解释Camera App ↓ Camera2 API ↓ CameraService ↓ Camera Provider / HAL3 ↓ Camera Driver ↓ Sensor / CSIPHY / ISP尤其搞懂这几个东西camera3_stream_t camera3_stream_configuration_t camera3_capture_request_t camera3_capture_result_t camera3_stream_buffer_t camera_metadata_t最终脑子里要形成这个模型configure_streams() ↓ process_capture_request() │ ├── settings / metadata ├── input buffer └── output buffers ↓ Camera ↓ process_capture_result()如果 HAL3 不熟直接看 CamXSession/Pipeline/Node/Usecase/Feature很容易全部混在一起。Android 官方的 Camera HAL 文档 可以作为这一阶段的基准资料。第二阶段只学 CamX 的五个核心概念CamX 第一轮我建议你只记Usecase → Session → Pipeline → Node外加一个Feature。CamX/CHI 的公开资料也基本围绕这套抽象Pipeline 是一条 topologyNode 是 pipeline 中的逻辑处理单元而 Usecase、Session、Feature 再组织这些 pipeline。(GitHub)例如先粗略理解成Usecase: Preview │ └── Session │ └── Realtime Pipeline │ ▼ Sensor │ ▼ IFE │ ▼ IPE │ ▼ Preview Buffer第一遍不要研究每个 class 的成员变量。你只需要看到代码时能马上判断Usecase ↓ 这是一个 Camera 使用场景 Session ↓ 管理一组 Pipeline 的执行 Pipeline ↓ 描述数据处理路径 / topology Node ↓ 具体处理节点 Feature ↓ HDR / MFNR / Bokeh 等复杂功能组织这一步完成CamX 就从“一坨代码”变成了一张图。第三阶段沿一个 Preview request 追代码这是最重要的一步。假设 AppcameraDevice.createCaptureRequest(...)最后进入 HAL3Framework process_capture_request() ↓ CamX HAL ↓ CHI ↓ Usecase ↓ Session ↓ Pipeline ↓ NodeCamX 常见源码布局中HAL3 入口位于camx/src/core/hal一带核心的 Session、Pipeline、Node 位于camx/src/coreCHI/CDK 则承担大量 usecase/OEM 定制逻辑。不同 Qualcomm baseline/产品代码会有差异所以以你项目里的代码为准。(GitHub)第一轮建议重点搜索这些camxhal3entry.cpp camxhaldevice.cpp camxsession.cpp camxpipeline.cpp camxnode.cpp然后拿纸/笔记自己画process_capture_request │ ▼ XXXXX() │ ▼ XXXXX() │ ▼ Session │ ▼ Pipeline │ ▼ Node不要一进去就研究 IFE 里面几千行代码。先把 request 主干追通。第四阶段第二次追踪不要追 request追 Buffer这个和我们刚才聊的 DMA-BUF / IOMMU 会直接连接起来。问自己Preview 的一块 Buffer 到底哪里来的沿着Framework │ │ output buffer ▼ CamX │ ▼ Buffer Manager │ ▼ DMA-BUF / native buffer │ ▼ DMA mapping │ ▼ SMMU │ │ IOVA ▼ IFE / IPE然后再回来Sensor ↓ CSI ↓ IFE ↓ DDR Buffer ↓ IPE ↓ Preview Buffer ↓ Framework ↓ Surface如果你能回答“一帧 NV12 preview buffer 从哪里申请、谁持有、谁 DMA、什么时候完成、什么时候返回 framework”你的 CamX 理解就已经开始进入工程层面了。第五阶段再追 KernelCamX 里面有一个你应该特别关注的层CSL — Camera Support Layer常见架构资料把 CSL 描述为 CamX 与 Camera kernel driver 之间的统一控制接口。(博客园)于是整个架构开始连起来Android Framework │ ▼ HAL3 │ ▼ CHI │ ▼ CamX │ ├── Session ├── Pipeline ├── Node │ ▼ CSL │ ▼ ioctl() │ ▼ Kernel Camera Driver │ ├── Sensor ├── CSIPHY ├── CSID ├── IFE └── ...这时候你再去看camx/src/csl/才有意义。第六阶段专门攻 Sensor Bring-up如果目标不是“研究 Camera 算法”而是项目中把 Camera 点亮我会把重点明显偏向这一条Sensor Probe ↓ I2C ↓ Power Sequence ↓ MCLK ↓ Sensor ID ↓ Sensor Init ↓ Sensor Mode ↓ MIPI CSI ↓ CSIPHY ↓ CSID ↓ IFE ↓ DDR ↓ Preview你真正应该练的是黑屏以后我怎么判断断在哪一层例如Sensor probe 都没成功 ↓ 先别看 CamX Pipeline Sensor stream on 成功 但 CSIPHY 没数据 ↓ 查 MIPI / lane / clock CSID 有数据 IFE error ↓ 查 format / VC / DT / configuration IFE 正常 Preview 黑 ↓ 再往 Buffer / IPE / HAL / Framework 查这种能力比“我看过 CamX 20 万行源码”值钱得多。结合你前面学的东西其实已经能串起来了你刚才连续问的 DMA、DMA-BUF、IOMMU/SMMU 并不是旁枝Camera │ ▼ CamX │ ┌────────┴────────┐ │ │ Control Data │ │ CSL DMA-BUF │ │ ioctl SMMU │ │ ▼ ▼ Kernel Driver ←────→ Buffer │ ▼ Sensor / CSI / ISP这也是为什么我比较建议你现在开始 Camera而不是继续无限扩展底层概念遇到 DMA-BUF、SMMU、V4L2、media、fence、cache 时再针对性补会快很多。如果按8 周左右来做我会安排成HAL3 → CamX 架构 → Preview Request → Buffer → CSL/Kernel → Sensor/CSI → 实际 log/debug → 独立分析一次 bring-up 问题。另外Qualcomm 现在公开的camera-service仓库也明确展示了 HAL3/CamX backend 与 camera driver 的关系可以作为没有完整商业 CamX 文档时的辅助材料。(GitHub) Qualcomm camera-service如果你手里已经有项目的vendor/qcom/proprietary/camx和chi-cdk源码那就更好下一步最适合直接做一次“从process_capture_request()开始带你逐函数追一帧 Preview”。这会比继续看泛泛的 CamX 教程有效很多。
延伸阅读

更多相关文章

2026/10/10 12:28:03

机器学习-关联规则算法Apriori及编码实现

一、前置知识在了解关联规则之前首先了解一些相关概念,包含项集、频繁项集、支持度、置信度、提升度等基础概念。假如我们在经营一家商品超市,顾客进行购买商品的订单信息如下:TID ItemsT1 {耳机,背包}T2{背包,手机&…

2026/10/7 5:37:08

请解释一下PHP中的垃圾回收机制。

首先,我们要明白什么是“垃圾”。在这里,“垃圾”指的是程序中不再需要使用的数据。这些数据占用了计算机的内存空间,但是如果我们不去清理它们,它们就会一直待在那里,浪费宝贵的内存资源。那么,PHP中的垃圾…

2026/10/10 12:27:16

QQ聊天记录恢复:本地消息数据库也能扫回来

讲完微信,这一篇说 QQ。很多人以为 QQ 是"云端聊天",记录丢了找不回——其实和微信一样,QQ 在电脑上也会把聊天落地成本地数据库文件。只要你没把这套文件覆盖掉,用数据恢复的思路一样能捞。下面直接讲 QQ 的存储位置和…

2026/10/10 12:27:16

轻量机房管理系统实战:从数据建模到自动化运维

简介:机房管理系统数据库设计完整项目资料,面向高校数据库课程设计学生及需要开发机房管理系统的开发者。资源围绕机房信息、设备信息、用户信息、预约信息、使用记录五个核心实体展开,涵盖ER模型设计、关系模式转换、范式规范化、索引优化与…

2026/10/10 12:27:16

网络货运系统搭建全解析:核心模块、技术架构与合规落地

做网络货运系统这事,我从零搭过完整的一套,也帮几个物流公司做过改造升级。圈子里聊起来,很多人第一反应是"这不就是做个APP让司机接单嘛",真踩进去才发现完全不是那么回事。网络货运系统说白了,是把传统物流…

2026/10/10 12:27:16

UDP实时像素传输与舞台可视化:LED点阵屏显示系统实战解析

最近在搞一个舞台可视化项目,核心需求其实非常简单粗暴:把计算端实时生成的动态画面,通过局域网传到一大块LED点阵屏上,用来做现场演出的背景视频。一开始考虑过HDMI转矩阵灯板的方案,结果发现线材布设、信号转换、成本…

2026/10/10 12:27:16

MFC监听剪切板:消息链机制与避坑指南

简介:这份资源是面向MFC Windows程序设计初学者的一套剪切板监听实例工程,围绕Windows剪切板消息机制展开,帮助学习者理解如何让程序实时感知剪切板内容变化。包内共43个文件,涵盖cpp与h源码、rc资源脚本、ico图标、vcxproj与sln工…

2026/10/10 12:22:15

Unity3D实现MB903工业HMI仿真:协议解析与UI同步开发指南

简介:Unity3D设计MB903是一款面向游戏开发初学者与进阶学习者的3D冒险类项目实战资源,聚焦游戏设计核心流程——从角色战斗系统、装备收集机制到剧情驱动式关卡推进,帮助开发者掌握Unity引擎在真实项目中的综合应用。资源包为ZIP格式&#xf…

2026/10/10 7:31:36

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/9 20:15:56

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 0:04:53

从逻辑门到计算机:数字电路核心原理与全加器搭建实战

如果你拆过一台旧电脑的主板,盯着那些黑乎乎的小芯片看上一会儿,可能会冒出同一个疑问:这堆引脚密集的元件,到底是怎么“变”出那么复杂的应用的?答案并不在某个神秘的部件里,而是在所有芯片内部都在反复使…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑