1. 课程导论:多路Stream并行捕获的应用场景与课程目标
在移动设备与嵌入式视觉系统中,单一摄像头输出一路图像数据已无法满足日益复杂的应用需求。现代相机应用往往需要同时获取不同分辨率、不同帧率、不同格式或不同色彩空间的图像流,这一技术被称为多路Stream并行捕获。本课程将深入剖析Camera HAL层如何配置和管理这些并行数据流,帮助开发者掌握从底层驱动到上层框架的完整实现路径。
核心概念:多路Stream并行捕获是指在同一Camera设备上,同时打开多个独立的图像数据通道(Stream),每个通道可配置不同的输出参数(如分辨率、格式、帧率),且数据流在时间上保持同步或独立。
1.1 典型应用场景
多路Stream并行捕获并非理论概念,而是直接服务于以下三大主流场景:
| 应用场景 | 核心需求 | 典型Stream配置 |
|---|---|---|
| HDR(高动态范围) | 同时捕获短曝光、中曝光、长曝光帧,合成高动态范围图像 | 3路YUV/RAW流,不同曝光时间,相同分辨率 |
| 双摄虚化(Bokeh) | 主摄与副摄同时捕获,通过视差计算深度图,实现背景虚化 | 2路YUV流,主摄高分辨率,副摄低分辨率 |
| 多码流录制 | 同时输出预览流(低分辨率高帧率)与录制流(高分辨率低帧率) | 2路YUV/HEVC流,不同分辨率与帧率 |
行业趋势:随着AI计算摄影的普及,多路Stream并行捕获已从高端旗舰机下沉至中端设备。Android 14+ 强制要求Camera HAL支持至少3路并发Stream,以满足多摄像头协同与实时计算需求。
1.2 多路Stream并行捕获的架构挑战
在Camera HAL层实现多路Stream并行捕获,需要解决以下关键技术难题:
- 带宽瓶颈:多路高分辨率流同时传输,ISP带宽与DDR带宽成为首要限制。
- 帧同步:不同Stream的帧率可能不同,需在HAL层实现时间戳对齐与帧序管理。
- 资源复用:硬件ISP管线、MIPI接口、内存缓冲区需要在多个Stream间动态分配。
- 功耗控制:多路并行意味着更高的功耗,需通过动态调频与时钟门控优化。
1.3 课程目标与学习路径
通过本课程的学习,你将能够:
- 理解Camera HAL架构:掌握Android Camera HAL3/4中Stream配置的数据结构与生命周期。
- 实现多路Stream配置:学会在HAL层代码中创建、绑定、启动多个Stream,并处理冲突与降级策略。
- 优化并行性能:掌握带宽计算、帧同步、缓冲区管理、功耗调优等实战技巧。
- 调试与验证:使用dumpsys、trace、perfetto等工具分析多路Stream运行状态。
前置要求:本课程假设学习者已具备C/C++编程基础,了解Android Camera框架基本概念(如CameraDevice、CaptureRequest、Surface),并熟悉Linux内核驱动与V4L2框架。如不具备,建议先学习《Camera HAL基础入门》系列课程。
1.4 课程内容概览
| 章节 | 核心内容 | 实战产出 |
|---|---|---|
| 第1章 | 课程导论与场景分析 | 理解多路Stream价值 |
| 第2-5章 | HAL层Stream配置数据结构与API | 编写Stream配置代码 |
| 第6-10章 | 多路Stream并行捕获实现 | 实现HDR/双摄/多码流案例 |
| 第11-15章 | 性能优化与调试 | 带宽分析与帧同步调优 |
| 第16-20章 | 进阶专题与项目实战 | 完整多路Stream HAL模块 |
本课程共20章,从基础概念到高级优化,配合大量代码示例与调试工具使用,确保学习者能够独立完成Camera HAL层多路Stream并行捕获的配置与调优工作。