7.23. 虚拟媒体控制器驱动 (vimc)¶
vimc 驱动程序使用 V4L2 API 和媒体 API 模拟复杂的视频硬件。它有一个捕获设备和三个子设备:传感器、去拜耳和缩放器。
7.23.1. 拓扑¶
拓扑是硬编码的,尽管您可以在 vimc-core 中修改它并重新编译驱动程序以实现您自己的拓扑。这是默认拓扑
7.23.1.1. 配置拓扑¶
每个子设备都将带有其默认配置(像素格式、高度、宽度等)。需要配置拓扑,以便匹配每个链接的子设备上的配置,以通过管道传输帧。如果配置不匹配,则流将失败。v4l-utils
包是一组用户空间应用程序,它带有 media-ctl
和 v4l2-ctl
,可用于配置 vimc 配置。此命令序列适用于默认拓扑
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.23.2. 子设备¶
子设备定义拓扑中实体的行为。根据子设备的不同,实体可以具有多个类型为源或接收器的焊盘。
- vimc-传感器
使用视频测试图案生成器生成多种格式的图像。公开
1 个焊盘源
- vimc-镜头
传感器的辅助镜头。支持自动对焦控制。使用辅助链接链接到 vimc-传感器。镜头支持 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-去拜耳
将拜耳格式的图像转换为非拜耳格式。公开
1 个焊盘接收器
1 个焊盘源
- vimc-缩放器
调整图像大小以满足源焊盘分辨率。例如:如果同步焊盘配置为 360x480,而源配置为 1280x720,则图像将拉伸以适合源分辨率。适用于 vimc 限制内的任何分辨率(即使在必要时缩小图像)。公开
1 个焊盘接收器
1 个焊盘源
- vimc-捕获
公开节点 /dev/videoX 以允许用户空间捕获流。公开
1 个焊盘接收器
1 个焊盘源
7.23.3. 模块选项¶
Vimc 有一个模块参数来配置驱动程序。
allocator=<unsigned int>
内存分配器选择,默认为 0。它指定缓冲区的分配方式。
0: vmalloc
1: dma-contig