116、V4L2 Media Controller 架构:Media Device、Sub-Device、Video Device 的关系
从一次ISP调试翻车说起
去年做某款高通平台的摄像头调试,遇到一个诡异现象:预览画面颜色正常,但拍照后RAW图全是绿的。查了两天,最后发现是Media Controller的pipeline配置错了——Sub-Device的link没连对,导致ISP的Bayer处理模块根本没被激活。那次之后我彻底理解了:Media Controller不是V4L2的装饰品,它是移动影像系统的“神经中枢”。
如果你只把V4L2当成简单的视频采集接口,那在单摄像头时代或许够用。但到了多摄、多ISP、多处理模块的今天,Media Controller才是真正让硬件模块“说话”的架构。下面从代码和调试角度,拆解这三个核心概念。
Media Device:整个影像系统的“主板”
Media Device是顶层抽象,对应/dev/media0这样的设备节点。它不直接处理数据,而是管理所有硬件模块的拓扑关系。在驱动里,它通过media_device结构体描述:
struct