第一章: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 的软件栈,从下往上大致是:

  1. Kernel 驱动层:V4L2、CSI、I2C 控制。这部分我一般不碰,交给驱动工程师。
  2. HAL 层(我们):实现 Camera HAL3 接口,管理 pipeline、buffer、metadata。
  3. Framework 层:CameraService、Camera2 API。HAL 和 Framework 通过 HIDL/AIDL 通信。
  4. 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 开发环境。

嗯,先消化一下。有问题随时在群里问我,老张看到就会回。