7.6. i.MX7 视频捕获驱动¶
7.6.1. 简介¶
与 i.MX5/6 系列相反,i.MX7 不包含图像处理单元 (IPU);因此,执行捕获帧操作或处理的功能较少。
对于图像捕获,i.MX7 有三个单元:- CMOS 传感器接口 (CSI) - 视频多路复用器 - MIPI CSI-2 接收器
MIPI Camera Input ---> MIPI CSI-2 --- > |\
| \
| \
| M |
| U | ------> CSI ---> Capture
| X |
| /
Parallel Camera Input ----------------> | /
|/
有关其他信息,请参阅最新版本的 i.MX7 参考手册[1]。
7.6.2. 实体¶
7.6.3. imx-mipi-csi2¶
这是 MIPI CSI-2 接收器实体。它有一个接收来自 MIPI CSI-2 摄像头传感器的像素数据的接收器焊盘。它有一个源焊盘,对应于虚拟通道 0。此模块符合以前版本的 Samsung D-phy,并支持两条 D-PHY Rx 数据通道。
7.6.4. csi-mux¶
这是视频多路复用器。它有两个接收器焊盘,用于从具有并行接口的摄像头传感器或 MIPI CSI-2 虚拟通道 0 中选择。它有一个将数据路由到 CSI 的单个源焊盘。
7.6.5. csi¶
CSI 使芯片能够直接连接到外部 CMOS 图像传感器。CSI 可以直接与并行和 MIPI CSI-2 总线接口。它有 256 x 64 FIFO 来存储接收到的图像像素数据,并嵌入式 DMA 控制器来通过 AHB 总线传输来自 FIFO 的数据。
此实体有一个从 csi-mux 实体接收数据的接收器焊盘,以及一个将视频帧直接路由到内存缓冲区的单个源焊盘。此焊盘被路由到捕获设备节点。
7.6.6. 使用说明¶
为了帮助配置并与仅从视频设备节点访问控件的 V4L2 应用程序向后兼容,捕获设备接口继承当前管道中活动实体的控件,因此可以直接从 subdev 或从活动捕获设备接口访问控件。例如,传感器控件可以从传感器 subdevs 或从活动捕获设备获得。
7.6.7. 带有 OV2680 的 Warp7¶
在此平台上,OV2680 MIPI CSI-2 模块连接到内部 MIPI CSI-2 接收器。以下示例配置了一个视频捕获管道,输出为 800x600 和 BGGR 10 位拜耳格式
# Setup links
media-ctl -l "'ov2680 1-0036':0 -> 'imx7-mipi-csis.0':0[1]"
media-ctl -l "'imx7-mipi-csis.0':1 -> 'csi-mux':1[1]"
media-ctl -l "'csi-mux':2 -> 'csi':0[1]"
media-ctl -l "'csi':1 -> 'csi capture':0[1]"
# Configure pads for pipeline
media-ctl -V "'ov2680 1-0036':0 [fmt:SBGGR10_1X10/800x600 field:none]"
media-ctl -V "'csi-mux':1 [fmt:SBGGR10_1X10/800x600 field:none]"
media-ctl -V "'csi-mux':2 [fmt:SBGGR10_1X10/800x600 field:none]"
media-ctl -V "'imx7-mipi-csis.0':0 [fmt:SBGGR10_1X10/800x600 field:none]"
media-ctl -V "'csi':0 [fmt:SBGGR10_1X10/800x600 field:none]"
之后即可开始流式传输。v4l2-ctl 工具可用于选择传感器支持的任何分辨率。
# media-ctl -p
Media controller API version 5.2.0
Media device information
------------------------
driver imx7-csi
model imx-media
serial
bus info
hw revision 0x0
driver version 5.2.0
Device topology
- entity 1: csi (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev0
pad0: Sink
[fmt:SBGGR10_1X10/800x600 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
<- "csi-mux":2 [ENABLED]
pad1: Source
[fmt:SBGGR10_1X10/800x600 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
-> "csi capture":0 [ENABLED]
- entity 4: csi capture (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video0
pad0: Sink
<- "csi":1 [ENABLED]
- entity 10: csi-mux (3 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev1
pad0: Sink
[fmt:Y8_1X8/1x1 field:none]
pad1: Sink
[fmt:SBGGR10_1X10/800x600 field:none]
<- "imx7-mipi-csis.0":1 [ENABLED]
pad2: Source
[fmt:SBGGR10_1X10/800x600 field:none]
-> "csi":0 [ENABLED]
- entity 14: imx7-mipi-csis.0 (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev2
pad0: Sink
[fmt:SBGGR10_1X10/800x600 field:none]
<- "ov2680 1-0036":0 [ENABLED]
pad1: Source
[fmt:SBGGR10_1X10/800x600 field:none]
-> "csi-mux":1 [ENABLED]
- entity 17: ov2680 1-0036 (1 pad, 1 link)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev3
pad0: Source
[fmt:SBGGR10_1X10/800x600@1/30 field:none colorspace:srgb]
-> "imx7-mipi-csis.0":0 [ENABLED]
7.6.8. 带有 OV5640 的 i.MX6ULL-EVK¶
在此平台上,并行 OV5640 传感器连接到 CSI 端口。以下示例配置了一个视频捕获管道,输出为 640x480 和 UYVY8_2X8 格式
# Setup links
media-ctl -l "'ov5640 1-003c':0 -> 'csi':0[1]"
media-ctl -l "'csi':1 -> 'csi capture':0[1]"
# Configure pads for pipeline
media-ctl -v -V "'ov5640 1-003c':0 [fmt:UYVY8_2X8/640x480 field:none]"
之后即可开始流式传输
gst-launch-1.0 -v v4l2src device=/dev/video1 ! video/x-raw,format=UYVY,width=640,height=480 ! v4l2convert ! fbdevsink
# media-ctl -p
Media controller API version 5.14.0
Media device information
------------------------
driver imx7-csi
model imx-media
serial
bus info
hw revision 0x0
driver version 5.14.0
Device topology
- entity 1: csi (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev0
pad0: Sink
[fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
<- "ov5640 1-003c":0 [ENABLED,IMMUTABLE]
pad1: Source
[fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
-> "csi capture":0 [ENABLED,IMMUTABLE]
- entity 4: csi capture (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video1
pad0: Sink
<- "csi":1 [ENABLED,IMMUTABLE]
- entity 10: ov5640 1-003c (1 pad, 1 link)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev1
pad0: Source
[fmt:UYVY8_2X8/640x480@1/30 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
-> "csi":0 [ENABLED,IMMUTABLE]