第一章:Camera 行业全景——从 DSLR 到手机摄像头
大家好,我是老张。做 Camera HAL 这行十几年了,从功能机时代一路摸爬滚打过来。今天咱们先不急着写代码,先聊聊整个 Camera 行业的地图长什么样。
你想想看,一个做 Camera HAL 的工程师,如果连行业全貌都不清楚,那写出来的代码大概率是空中楼阁。我个人习惯是,每接手一个新平台,先花一周时间把上下游摸透。
1.1 Camera 技术演进史:从 DSLR 到手机摄像头
Camera 技术的发展,说白了就是一场「小型化」和「智能化」的竞赛。
- 胶片时代(1900s-1990s):纯光学+化学。那时候的相机,一个镜头比现在的手机还重。我小时候家里有一台海鸥 DF,那手感,啧啧。
- 数码单反 DSLR(1990s-2010s):CCD/CMOS 传感器取代胶片。画质巅峰,但体积巨大。我记得第一次拆 Nikon D90 时,被里面那块 APS-C 传感器震撼到了。
- 手机摄像头萌芽(2000-2010):从 11 万像素的 CMOS 开始。那时候的 Camera HAL?不存在的,直接寄存器操作。
- 智能手机爆发(2010-2020):多摄、计算摄影、AI 算法。HAL 层开始变得复杂,高通、MTK、展锐各自为战。
- 计算摄影时代(2020-至今):多帧合成、语义分割、实时 HDR。HAL 不再是简单的「驱动」,而是算法和硬件的桥梁。
核心观点:手机 Camera 的本质,是用计算弥补物理限制。传感器做不大,那就用算法凑。HAL 工程师就是那个「算法和硬件之间的翻译官」。
1.2 主流手机 Camera 架构:高通、MTK、展锐
做 HAL 开发,你至少得跟这三家之一打交道。我三个平台都做过,说说我的感受。
| 平台 | HAL 架构 | 特点 | 个人评价 |
|---|---|---|---|
| 高通 Qualcomm | CamX + CHI | 模块化、可配置、UML 图多 | 文档最全,但学习曲线陡。我当年啃 CamX 源码啃了三个月。 |
| 联发科 MTK | HAL3 + 自研中间件 | 封闭、黑盒、API 稳定 | 上手快,但遇到 bug 只能找 FAE。我曾经被一个 ISP 参数坑了一周。 |
| 展锐 Unisoc | 轻量级 HAL | 开源度高、性能一般 | 适合入门学习,代码量少。但做高端项目还是算了。 |
我的建议:如果你是新手,先从展锐入手,代码简单,能快速跑通流程。但如果你想进大厂,高通是必选项。MTK 嘛,适合做稳定出货的项目。
1.3 HAL 在 Android 系统中的位置与作用
Android Camera 的软件栈,从下往上大致是:
- Kernel 驱动层:V4L2、CSI、I2C 控制。这部分我一般不碰,交给驱动工程师。
- HAL 层(我们):实现 Camera HAL3 接口,管理 pipeline、buffer、metadata。
- Framework 层:CameraService、Camera2 API。HAL 和 Framework 通过 HIDL/AIDL 通信。
- App 层:系统相机、第三方 App。
HAL 层到底在干什么?说白了就三件事:
- 控制硬件:打开 sensor、设置曝光、增益、帧率。
- 管理数据流:从 sensor 拿到 raw 数据,经过 ISP 处理,输出 YUV/JPEG。
- 传递 metadata:把 3A 状态、人脸检测结果、HDR 信息告诉上层。
避坑指南:我曾经在一个项目里,HAL 层把 sensor 的 orientation 传错了,导致预览画面一直是倒的。查了三天,最后发现是 metadata 里 android.sensor.orientation 写死了 0。嗯,这种低级错误,犯一次就够了。
1.4 为什么 HAL 工程师这么值钱?
你想想看,手机厂商要差异化,靠什么?靠 Camera 效果。而 Camera 效果的落地,全靠 HAL 层来调优。
- 高通给你一套 CamX,但默认配置只能跑通,效果一塌糊涂。
- MTK 给你一个黑盒,但你要在里面塞自己的算法。
- 展锐开源,但你要自己写 tuning 工具。
说白了,HAL 工程师就是那个「把芯片厂商的参考设计,变成手机厂商的竞争力」的人。我见过太多人只会调参数,不懂架构,结果项目一复杂就崩。
记住:Camera HAL 不是写驱动,而是做系统集成。你要懂硬件、懂算法、懂 Android 框架、懂性能优化。这才是你值钱的地方。
1.5 本章小结
这一章我们聊了 Camera 行业的发展脉络,三大芯片平台的架构差异,以及 HAL 在 Android 系统中的定位。下一章,我会带大家手把手搭建一个最简单的 HAL 开发环境。
嗯,先消化一下。有问题随时在群里问我,老张看到就会回。