7.23. 虚拟媒体控制器驱动 (vimc)

vimc 驱动程序使用 V4L2 API 和媒体 API 模拟复杂的视频硬件。它有一个捕获设备和三个子设备:传感器、去拜耳和缩放器。

7.23.1. 拓扑

拓扑是硬编码的,尽管您可以在 vimc-core 中修改它并重新编译驱动程序以实现您自己的拓扑。这是默认拓扑

Diagram of the default media pipeline topology

vimc 上的媒体管道图

7.23.1.1. 配置拓扑

每个子设备都将带有其默认配置(像素格式、高度、宽度等)。需要配置拓扑,以便匹配每个链接的子设备上的配置,以通过管道传输帧。如果配置不匹配,则流将失败。v4l-utils 包是一组用户空间应用程序,它带有 media-ctlv4l2-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