7.24. 虚拟媒体控制器驱动程序 (vimc)¶
vimc 驱动程序使用 V4L2 API 和 Media API 模拟复杂的视频硬件。它有一个捕获设备和三个子设备:传感器 (sensor)、去拜耳 (debayer) 和缩放器 (scaler)。
7.24.1. 拓扑¶
拓扑结构是硬编码的,尽管您可以在 vimc-core 中修改它并重新编译驱动程序以实现您自己的拓扑。这是默认拓扑
vimc 上的媒体管道图¶
7.24.1.1. 配置拓扑¶
每个子设备都将带有其默认配置(像素格式、高度、宽度等)。需要配置拓扑以匹配每个链接子设备上的配置,以便通过管道传输帧。如果配置不匹配,流将失败。v4l-utils
包是一组用户空间应用程序,其中包含可用于配置 vimc 的 media-ctl
和 v4l2-ctl
。以下命令序列适用于默认拓扑:
media-ctl -d platform:vimc -V '"Sensor A":0[fmt:SBGGR8_1X8/640x480]'
media-ctl -d platform:vimc -V '"Debayer A":0[fmt:SBGGR8_1X8/640x480]'
media-ctl -d platform:vimc -V '"Scaler":0[fmt:RGB888_1X24/640x480]'
media-ctl -d platform:vimc -V '"Scaler":0[crop:(100,50)/400x150]'
media-ctl -d platform:vimc -V '"Scaler":1[fmt:RGB888_1X24/300x700]'
v4l2-ctl -z platform:vimc -d "RGB/YUV Capture" -v width=300,height=700
v4l2-ctl -z platform:vimc -d "Raw Capture 0" -v pixelformat=BA81
7.24.2. 子设备¶
子设备定义了拓扑中实体的行为。根据子设备的不同,实体可以有多个源或接收器类型的焊盘 (pads)。
- vimc-sensor
使用视频测试图案生成器生成多种格式的图像。暴露:
1 个源焊盘
- vimc-lens
传感器的辅助镜头。支持自动对焦控制。使用辅助链接连接到 vimc-sensor。该镜头支持 FOCUS_ABSOLUTE 控制。
media-ctl -p
...
- entity 28: Lens A (0 pad, 0 link)
type V4L2 subdev subtype Lens flags 0
device node name /dev/v4l-subdev6
- entity 29: Lens B (0 pad, 0 link)
type V4L2 subdev subtype Lens flags 0
device node name /dev/v4l-subdev7
v4l2-ctl -d /dev/v4l-subdev7 -C focus_absolute
focus_absolute: 0
- vimc-debayer
将拜耳格式的图像转换为非拜耳格式。暴露:
1 个接收器焊盘
1 个源焊盘
- vimc-scaler
调整图像大小以符合源焊盘分辨率。例如:如果同步焊盘配置为 360x480,源焊盘配置为 1280x720,图像将被拉伸以适应源分辨率。在 vimc 限制内适用于任何分辨率(即使必要时缩小图像)。暴露:
1 个接收器焊盘
1 个源焊盘
- vimc-capture
暴露节点 /dev/videoX 以允许用户空间捕获流。暴露:
1 个接收器焊盘
1 个源焊盘
7.24.3. 模块选项¶
Vimc 有一个模块参数用于配置驱动程序。
allocator=<无符号整数>
内存分配器选择,默认为 0。它指定了缓冲区将如何分配。
0: vmalloc
1: dma-contig