7.24. 虛擬媒體控制器驅動程式 (vimc)

vimc 驅動程式使用 V4L2 API 和 Media API 模擬複雜的影片硬體。它有一個捕獲裝置和三個子裝置:感測器 (sensor)、去拜耳 (debayer) 和縮放器 (scaler)。

7.24.1. 拓撲

拓撲結構是硬編碼的,儘管您可以在 vimc-core 中修改它並重新編譯驅動程式以實現您自己的拓撲。這是預設拓撲

Diagram of the default media pipeline topology

vimc 上的媒體管道圖

7.24.1.1. 配置拓撲

每個子裝置都將帶有其預設配置(畫素格式、高度、寬度等)。需要配置拓撲以匹配每個連結子裝置上的配置,以便透過管道傳輸幀。如果配置不匹配,流將失敗。v4l-utils 包是一組使用者空間應用程式,其中包含可用於配置 vimc 的 media-ctlv4l2-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