1.1.6.7 i.MX Video Capture Driver

Introduction
Freescale i.MX5/6 包含一个图像处理单元(IPU),它处理图像帧从捕获设备到显示设备的流动。
在图像捕获方面,IPU包括以下内部子单元:
- 图像DMA控制器(IDMAC)
- 相机串行接口(CSI)
- 图像转换器(IC)
- 传感器多FIFO控制器(SMFC)
- 图像旋转器(IRT)
- 视频去隔行或合并块(VDIC)
IDMAC是用于将图像帧从内存传输到设备或者从设备传输到内存的DMA控制器。为视频捕获和显示路径都有各种专用DMA通道存在。在传输过程中,IDMAC还能够进行垂直翻转、8x8块传输(参见IRT描述)、同一颜色空间内的像素分量重新排序(例如UYVY到YUYV),以及打包<->平面转换。 IDMAC还可以通过在传输期间交错偶数和奇数行(不需要VDIC执行动态补偿)来执行简单的去隔行。
CSI是直接与相机传感器通过Parallel、BT.656/1120和MIPI CSI-2总线接口的后端捕获单元。
IC处理颜色空间转换、缩放(下采样和上采样)、水平翻转和90/270度旋转操作。
IC中有三个独立的“任务”,可以同时执行转换:预处理编码、预处理取景器和后处理。在每个任务中,转换分为三个部分:缩小部分、主要部分(上采样、翻转、颜色空间转换和图形平面合并)和旋转部分。
IPU共享IC任务操作时间片。时间片粒度为缩小部分的8个像素突发、主要处理部分的一行图像、旋转部分的一帧图像。
SMFC由四个独立的FIFO组成,每个FIFO都可以通过四个IDMAC通道将捕获的帧直接从传感器并发地传输到内存中。
IRT执行90度和270度的图像旋转操作。旋转操作一次处理8x8像素块。该操作由IDMAC支持,它处理8x8块传输以及块重新排序,并与垂直翻转协调。
VDIC处理将交错视频转换为逐行扫描视频,并支持不同的运动补偿模式(低、中和高运动)。VDIC的去隔行输出帧可以发送到IC预处理取景器任务进行进一步转换。VDIC还包含一个合成器,可以将两个图像平面(带有Alpha混合和颜色键控)进行合并。
除了IPU内部子单元外,还有两个位于IPU之外的单元也参与了i.MX上的视频捕获:
• 具有MIPI CSI-2总线接口的相机传感器的MIPI CSI-2接收器。这是Synopsys DesignWare核心。
• 用于选择多个传感器输入中的一个并将其发送到CSI的两个视频复用器。
要了解更多信息,请参考i.MX5/6最新版本的参考手册1和2。

Features
该驱动程序的一些特点包括:
• 通过媒体控制器API可以配置许多不同的管道,对应于i.MX支持的硬件视频捕获管道。
• 支持并行、BT.565和MIPI CSI-2接口。
• 通过将管道配置到多个视频捕获接口,使用独立实体可以实现并发独立流。
• 通过IC任务subdevs进行缩放、颜色空间转换、水平和垂直翻转以及图像旋转。
• 支持许多像素格式(RGB、打包和平面YUV、部分平面YUV)。
• VDIC subdev支持运动补偿去隔行,具有三种运动补偿模式:低、中、高运动。定义了管道,允许直接从CSI将帧发送到VDIC subdev。今后也将支持通过输出/ mem2mem设备将帧发送到VDIC的存储器缓冲区中。
• 包括Frame Interval Monitor(FIM),可以纠正ADV718x视频解码器的垂直同步问题。

Topology
下面显示了i.MX6Q SabreSD和i.MX6Q SabreAuto的媒体拓扑结构。在下一部分的实体描述中参考这些图表。i.MX5/6的拓扑结构可以与IPUv3 CSI视频复用器上游有所不同,但是从那里向下的内部IPUv3拓扑结构对于所有i.MX5/6平台都是共同的。例如,带有MIPI CSI-2 OV5640传感器的SabreSD需要i.MX6 MIPI CSI-2接收器。但是,SabreAuto只有一个并行bt.656总线上的ADV7180解码器,因此不需要MIPI CSI-2接收器,因此在其图表中缺失。

Fig. 1: Media pipeline graph on i.MX6Q SabreSD

Fig. 2: Media pipeline graph on i.MX6Q SabreAuto
Entities
imx6-mipi-csi2
这是MIPI CSI-2接收器实体。它有一个接收MIPI CSI-2流的汇接口(通常来自MIPI CSI-2相机传感器)。它有四个源接口,对应四个MIPI CSI-2分离的虚拟通道输出。多个源接口可启用以独立地从多个虚拟通道流式传输。这个实体实际上由两个子块组成。一个是MIPI CSI-2核心。这是Synopsys Designware MIPI CSI-2核心。另一个子块是“CSI-2到IPU垫片”。该垫片充当四个虚拟通道流的解复用器,提供四个包含每个虚拟通道的单独并行总线,如下所述路由到CSIs或视频复用器。在i.MX6 Solo/Dual-Lite上,所有四个虚拟通道总线都路由到两个视频复用器。CSI0和CSI1都可以接收任何虚拟通道,由视频复用器选择。在i.MX6 Quad上(Fig.1),虚拟通道0被路由到IPU1-CSI0(在由视频mux选择后),虚拟通道1和2分别硬连到IPU1-CSI1和IPU2-CSI0,而虚拟通道3被路由到IPU2-CSI1(再次由视频mux选择)。
ipuX_csiY_mux
这些是视频复用器。它们有两个或更多的汇接口,用于选择来自带有并行接口的相机传感器或来自imx6-mipi-csi2实体的MIPI CSI-2虚拟通道。它们有一个单一的源接口,路由到一个CSI(ipuX_csiY实体)。在i.MX6 Solo/Dual-Lite上,有两个视频复用器实体。一个位于IPU1-CSI0前面,用于在并行传感器和任何四个MIPI CSI-2虚拟通道之间进行选择(共计五个汇接口)。另一个复用器位于IPU1-CSI1前面,并且具有五个汇接口,用于在并行传感器和任何四个MIPI CSI-2虚拟通道之间进行选择。在i.MX6 Quad上(Fig.1),有两个视频复用器实体。一个位于IPU1-CSI0前面,用于在并行传感器和MIPI CSI-2虚拟通道0之间进行选择(两个汇接口)。另一个复用器位于IPU2-CSI1前面,用于在并行传感器和MIPI CSI-2虚拟通道3之间进行选择(两个汇接口)。
ipuX_csiY
这些是CSI实体。它们有一个单一的汇接口,从上述视频复用器或MIPI CSI-2虚拟通道接收输入。该实体有两个源接口。第一个源接口可以直接连接到ipuX_vdic实体或ipuX_ic_prp实体,使用不需要IDMAC内存缓冲区传输的硬件连接。当直接源接口被路由到ipuX_ic_prp实体时,CSI中的帧可以由一个或两个IC预处理任务进行处理。当直接源接口被路由到ipuX_vdic实体时,VDIC将使用“高运动”模式执行运动补偿去隔行处理(请参阅ipuX_vdic实体的描述)。第二个源接口通过SMFC和IDMAC通道直接将视频帧发送到内存缓冲区,绕过IC预处理。该源接口被路由到一个捕获设备节点,节点名称格式为“ipuX_csiY capture”。注意,由于IDMAC源接口使用了IDMAC通道,因此可以通过IDMAC通道在相同颜色空间内进行像素重排序。例如,如果CSI汇接口以UYVY顺序接收,则与IDMAC源接口链接的捕获设备可以以YUYV顺序捕获。另外,如果CSI汇接口接收打包的YUV格式,捕获设备可以捕获分离的YUV格式,如YUV420。IDMAC源接口的IDMAC通道还支持不带运动补偿的简单交错,如果源接口的场类型为顺序自上而下或自下而上,并且请求的捕获接口场类型设置为隔行(t-b、b-t或未限定的隔行),则激活该功能。捕获接口将强制执行与源接口场顺序相同的场顺序(如果源接口是seq-bt,则为隔行-bt,如果源接口是seq-tb,则为隔行-tb)。有关ipuX_csiY生成的事件,请参见ref:imx_api_ipuX_csiY。
Cropping in ipuX_csiY
CSI支持裁剪传入的原始传感器帧。这是在ipuX_csiY实体中的汇接口上使用裁剪选择子设备API实现的。CSI还支持在宽度和高度上独立地进行固定二分之一缩小。这是在ipuX_csiY实体的汇接口上使用组合选择子设备API实现的。ipuX_csiY源接口处的输出矩形与汇接口处的组合矩形相同。因此,源接口矩形无法进行协商,必须使用汇接口上的组合选择API进行设置(如果希望进行/2缩小,则源接口矩形等于传入矩形)。以下是一个示例,将1280x960的输入帧裁剪为640x480,然后在两个维度上/2缩小为320x240(假设ipu1_csi0链接到ipu1_csi0_mux):

media-ctl -V "'ipu1_csi0_mux':2[fmt:UYVY2X8/1280x960]"
media-ctl -V "'ipu1_csi0':0[crop:(0,0)/640x480]"
media-ctl -V "'ipu1_csi0':0[compose:(0,0)/320x240]"

Frame Skipping in ipuX_csiY
CSI支持通过跳帧进行帧率抽取。帧率抽取是通过在汇接口和源接口处设置帧间隔来指定的。然后,ipuX_csiY实体将应用最佳帧跳过设置到CSI以实现源接口处所需的帧率。以下示例将假定的60 Hz输入帧率减半到IDMAC输出源接口:

media-ctl -V "'ipu1_csi0':0[fmt:UYVY2X8/640x480@1/60]"
media-ctl -V "'ipu1_csi0':2[fmt:UYVY2X8/640x480@1/30]"

media-ctl -V:
`media-ctl -V` 用于显示 Media Controller API 版本信息。这个命令会打印版本号以及其他相关信息,如下所示:

Media Controller API version 5.13.0

如果您想要更详细的 Media Controller API 文档,请参考 Linux 内核文档 (Documentation/media/index.rst)。
http://trac.gateworks.com/wiki/linux/media
Frame Interval Monitor in ipuX_csiY
See ref:imx_api_FIM.
ipuX_vdic
VDIC执行运动补偿去隔行,有三种运动补偿模式:低、中和高运动。这个模式由菜单控制V4L2_CID_DEINTERLACING_MODE指定。VDIC有两个汇接口和一个源接口。直接汇接口从ipuX_csiY的直接接口接收。在这个链接下,VDIC只能在高运动模式下运行。
当IDMAC汇接口被激活时,它会从输出或mem2mem设备节点接收。在这个管道中,VDIC也可以在低和中模式下运行,因为这些模式需要从内存缓冲区接收帧。请注意,输出或mem2mem设备尚未实现,因此此汇接口目前没有链接。
源接口路由到 IC 前处理实体 ipuX_ic_prp。
ipuX_ic_prp
这是IC前处理实体。它充当路由器的作用,从其汇接口将数据路由到其一个或两个源接口。
该实体有一个汇接口。汇接口可以从ipuX_csiY的直接接口接收,也可以从ipuX_vdic接收。
这个实体有两个源接口。一个源接口路由到预处理编码任务实体(ipuX_ic_prpenc),另一个源接口路由到预处理取景器任务实体(ipuX_ic_prpvf)。如果汇接口从ipuX_csiY接收,则两个源接口都可以同时激活。如果汇接口从ipuX_vdic接收,则只能激活到预处理取景器任务实体(ipuX_ic_prpvf)的源接口(VDIC的帧只能由预处理取景器任务处理)。
ipuX_ic_prpenc
这是IC前处理编码实体。它有一个从ipuX_ic_prp接收的汇接口和一个源接口。源接口被路由到一个捕获设备节点,节点名称的格式为“ipuX_ic_prpenc capture”。
该实体执行IC前处理编码任务操作:色彩空间转换、缩放(降采样和升采样)、水平和垂直翻转以及90/270度旋转。翻转和旋转通过标准的V4L2控制进行提供。
像ipuX_csiY IDMAC源一样,这个实体也支持简单的去隔行但不带运动补偿和像素重新排序。
ipuX_ic_prpvf
这是IC前处理取景器实体。它有一个从ipuX_ic_prp接收的汇接口和一个源接口。源接口被路由到一个捕获设备节点,节点名称的格式为“ipuX_ic_prpvf capture”。
该实体的操作与ipuX_ic_prpenc完全相同,具有相同的缩放和CSC操作以及翻转/旋转控制。如果ipuX_ic_prp从ipuX_vdic接收,则它将接收并处理从ipuX_vdic去隔行后的帧。
像ipuX_csiY IDMAC源一样,这个实体支持简单的交织,但没有运动补偿。但是,请注意,如果在管道中包含ipuX_vdic(ipuX_ic_prp从ipuX_vdic接收),则无法在ipuX_ic_prpvf中使用交织,因为ipuX_vdic已经进行了去隔行(带有运动补偿),因此ipuX_vdic的场类型输出只能是none(逐行扫描)类型。

Capture Pipelines
以下描述了管道支持的各种用例。所示的链接不包括后端传感器、视频复用器或MIPI CSI-2接收器链接。这取决于传感器接口的类型(并行或MIPI CSI-2)。因此,这些管道从以下开始:
对于并行传感器:sensor -> ipuX_csiY_mux -> …
对于MIPI CSI-2传感器:sensor -> imx6-mipi-csi2 -> (ipuX_csiY_mux)-> …
imx6-mipi-csi2接收器可能需要在发送到CSI之前将其路由到视频复用器(ipuX_csiY_mux),具体取决于MIPI CSI-2虚拟通道,因此在圆括号中显示了ipuX_csiY_mux。
Unprocessed Video Capture
将帧直接从传感器通过ipuX_csiY IDMAC源端口发送到相机设备接口节点,无需进行任何转换:
-> ipuX_csiY:2 -> ipuX_csiY capture     //:2表示的是ipuX_csiY的源接口2(Fig.1)
IC Direct Conversions
这个管道使用前处理编码实体直接将帧从CSI路由到IC,进行高达1024x1024分辨率的缩放、CSC、翻转和图像旋转:
-> ipuX_csiY:1 -> 0:ipuX_ic_prp:1 -> 0:ipuX_ic_prpenc:1 -> ipuX_ic_prpenc capture
Motion Compensated De-interlace
这个管道将帧从CSI直接发送到VDIC实体以支持运动补偿去隔行(仅高动态模式),进行高达1024x1024的缩放、CSC、翻转和旋转:
-> ipuX_csiY:1 -> 0:ipuX_vdic:2 -> 0:ipuX_ic_prp:2 -> 0:ipuX_ic_prpvf:1 -> ipuX_ic_prpvf capture

Usage Notes
为了帮助配置并支持仅从视频设备节点访问控件的V4L2应用程序的向后兼容性,捕获设备接口从当前管道中的活动实体继承控件,因此控件可以直接从子设备(subdev)或活动捕获设备接口中访问。例如,FIM控件可以从ipuX_csiY子设备或活动捕获设备中访问。
以下是Sabre*参考板的具体使用注意事项:
i.MX6Q SabreLite with OV5642 and OV5640
该平台需要采用并行相机接口的OV5642模块和采用MIPI CSI-2接口的OV5640模块。
请注意,如果仅有一个相机模块可用,则可以在设备树中禁用另一个传感器节点。
OV5642模块连接到i.MX内部视频复用器的并行总线输入,连接到IPU1 CSI0。它的i2c总线连接到i2c总线2。
MIPI CSI-2 OV5640模块连接到i.MX内部MIPI CSI-2接收器,接收器的四个虚拟通道输出路由如下(Fig.1):vc0到IPU1 CSI0 mux,vc1直接到IPU1 CSI1,vc2直接到IPU2 CSI0,vc3到IPU2 CSI1 mux。OV5640还连接到SabreLite上的i2c总线2,因此OV5642和OV5640不能共享相同的i2c从地址。
以下是用于配置两个传感器的未处理视频捕获管道的基本示例。
OV5642被路由到ipu1_csi0,OV5640通过MIPI CSI-2虚拟通道1(即imx6-mipi-csi2 pad 2)进行传输,并被路由到ipu1_csi1。两个传感器都被配置为输出640x480的分辨率,OV5642输出YUYV2X8格式,OV5640输出UYVY2X8格式:

# Setup links for OV5642
media-ctl -l "'ov5642 1-0042':0 -> 'ipu1_csi0_mux':1[1]"
media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]"
# Setup links for OV5640
media-ctl -l "'ov5640 1-0040':0 -> 'imx6-mipi-csi2':0[1]"
media-ctl -l "'imx6-mipi-csi2':2 -> 'ipu1_csi1':0[1]"
media-ctl -l "'ipu1_csi1':2 -> 'ipu1_csi1 capture':0[1]"
# Configure pads for OV5642 pipeline
media-ctl -V "'ov5642 1-0042':0 [fmt:YUYV2X8/640x480 field:none]"
media-ctl -V "'ipu1_csi0_mux':2 [fmt:YUYV2X8/640x480 field:none]"
media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/640x480 field:none]"
# Configure pads for OV5640 pipeline
media-ctl -V "'ov5640 1-0040':0 [fmt:UYVY2X8/640x480 field:none]"
media-ctl -V "'imx6-mipi-csi2':2 [fmt:UYVY2X8/640x480 field:none]"
media-ctl -V "'ipu1_csi1':2 [fmt:AYUV32/640x480 field:none]"

然后可以在捕获设备节点“ipu1_csi0 capture”和“ipu1_csi1 capture”上独立开始流式传输。v4l2-ctl工具可用于在捕获设备节点上选择任何支持的YUV像素格式,包括平面格式。
i.MX6Q SabreAuto with ADV7180 decoder
在i.MX6Q SabreAuto上,一个板载ADV7180 SD解码器连接到内部视频MUX的并行总线输入,连接到IPU1 CSI0(Fig.2)。
以下是配置从ADV7180视频解码器捕获 NTSC 720x480 输入信号的管道的示例,使用简单交错模式(未转换和没有运动补偿)。adv7180必须输出顺序或交替场(对于NTSC来说是“seq-bt”或“alternate”场类型):

# Setup links
media-ctl -l "'adv7180 3-0021':0 -> 'ipu1_csi0_mux':1[1]"
media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]"
# Configure pads
media-ctl -V "'adv7180 3-0021':0 [fmt:UYVY2X8/720x480 field:seq-bt]"
media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/720x480]"
media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/720x480]"
# Configure "ipu1_csi0 capture" interface (assumed at /dev/video4)
v4l2-ctl -d4 --set-fmt-video=field=interlaced_bt

然后可以在/dev/video4上开始流式传输。v4l2-ctl工具也可用于选择/dev/video4上支持的任何YUV像素格式。
以下是配置从ADV7180视频解码器捕获PAL 720x576输入信号,使用运动补偿去交错的管道的示例。adv7180必须输出顺序或交替场(对于PAL来说是“seq-tb”或“alternate”场类型)。

# Setup links
media-ctl -l "'adv7180 3-0021':0 -> 'ipu1_csi0_mux':1[1]"
media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':1 -> 'ipu1_vdic':0[1]"
media-ctl -l "'ipu1_vdic':2 -> 'ipu1_ic_prp':0[1]"
media-ctl -l "'ipu1_ic_prp':2 -> 'ipu1_ic_prpvf':0[1]"
media-ctl -l "'ipu1_ic_prpvf':1 -> 'ipu1_ic_prpvf capture':0[1]"
# Configure pads
media-ctl -V "'adv7180 3-0021':0 [fmt:UYVY2X8/720x576 field:seq-tb]"
media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/720x576]"
media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/720x576]"
media-ctl -V "'ipu1_vdic':2 [fmt:AYUV32/720x576 field:none]"
media-ctl -V "'ipu1_ic_prp':2 [fmt:AYUV32/720x576 field:none]"
media-ctl -V "'ipu1_ic_prpvf':1 [fmt:AYUV32/720x576 field:none]"
# Configure "ipu1_ic_prpvf capture" interface (assumed at /dev/video2)
v4l2-ctl -d2 --set-fmt-video=field=none

然后可以在/dev/video2上开始流式传输。v4l2-ctl工具也可用于选择/dev/video2上支持的任何YUV像素格式。
此平台可以将复合视频模拟输入连接到ADV7180的Ain1(连接器J42)。
i.MX6DL SabreAuto with ADV7180 decoder
在i.MX6DL SabreAuto上,一个板载ADV7180 SD解码器连接到内部视频MUX的并行总线输入,连接到IPU1 CSI0。
以下是配置从ADV7180视频解码器捕获 NTSC 720x480 输入信号的管道的示例,使用简单交错模式(未转换和没有运动补偿)。adv7180必须输出顺序或交替场(对于NTSC来说是“seq-bt”或“alternate”场类型):

# Setup links
media-ctl -l "'adv7180 4-0021':0 -> 'ipu1_csi0_mux':4[1]"
media-ctl -l "'ipu1_csi0_mux':5 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]"
# Configure pads
media-ctl -V "'adv7180 4-0021':0 [fmt:UYVY2X8/720x480 field:seq-bt]"
media-ctl -V "'ipu1_csi0_mux':5 [fmt:UYVY2X8/720x480]"
media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/720x480]"
# Configure "ipu1_csi0 capture" interface (assumed at /dev/video0)
v4l2-ctl -d0 --set-fmt-video=field=interlaced_bt

然后可以在/dev/video0上开始流式传输。v4l2-ctl工具也可用于选择/dev/video0上支持的任何YUV像素格式。
以下是配置从ADV7180视频解码器捕获PAL 720x576输入信号,使用运动补偿去交错的管道的示例。adv7180必须输出顺序或交替场(对于PAL来说是“seq-tb”或“alternate”场类型)。

# Setup links
media-ctl -l "'adv7180 4-0021':0 -> 'ipu1_csi0_mux':4[1]"
media-ctl -l "'ipu1_csi0_mux':5 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':1 -> 'ipu1_vdic':0[1]"
media-ctl -l "'ipu1_vdic':2 -> 'ipu1_ic_prp':0[1]"
media-ctl -l "'ipu1_ic_prp':2 -> 'ipu1_ic_prpvf':0[1]"
media-ctl -l "'ipu1_ic_prpvf':1 -> 'ipu1_ic_prpvf capture':0[1]"
# Configure pads
media-ctl -V "'adv7180 4-0021':0 [fmt:UYVY2X8/720x576 field:seq-tb]"
media-ctl -V "'ipu1_csi0_mux':5 [fmt:UYVY2X8/720x576]"
media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/720x576]"
media-ctl -V "'ipu1_vdic':2 [fmt:AYUV32/720x576 field:none]"
media-ctl -V "'ipu1_ic_prp':2 [fmt:AYUV32/720x576 field:none]"
media-ctl -V "'ipu1_ic_prpvf':1 [fmt:AYUV32/720x576 field:none]"
# Configure "ipu1_ic_prpvf capture" interface (assumed at /dev/video2)
v4l2-ctl -d2 --set-fmt-video=field=none

然后可以在/dev/video2上开始流式传输。v4l2-ctl工具也可用于选择/dev/video2上支持的任何YUV像素格式。
此平台可以将复合视频模拟输入连接到ADV7180的Ain1(连接器J42)。
i.MX6Q SabreSD with MIPI CSI-2 OV5640
类似于i.MX6Q SabreLite,i.MX6Q SabreSD也支持IPU1 CSI0上的并行接口OV5642模块和MIPI CSI-2 OV5640模块。OV5642连接到i2c总线1,而OV5640连接到i2c总线2。
SabreSD的设备树包括用于并行OV5642和MIPI CSI-2 OV5640的OF图,但截至本写作时,仅测试了MIPI CSI-2 OV5640,因此OV5642节点当前已禁用。OV5640模块连接到MIPI连接器J5。连接到SabreSD板的OV5640模块的NXP零件号为H120729。
以下是配置未处理的视频捕获管道,从OV5640捕获,传输到MIPI CSI-2虚拟通道0的示例:

# Setup links
media-ctl -l "'ov5640 1-003c':0 -> 'imx6-mipi-csi2':0[1]"
media-ctl -l "'imx6-mipi-csi2':1 -> 'ipu1_csi0_mux':0[1]"
media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]"
# Configure pads
media-ctl -V "'ov5640 1-003c':0 [fmt:UYVY2X8/640x480]"
media-ctl -V "'imx6-mipi-csi2':1 [fmt:UYVY2X8/640x480]"
media-ctl -V "'ipu1_csi0_mux':0 [fmt:UYVY2X8/640x480]"
media-ctl -V "'ipu1_csi0':0 [fmt:AYUV32/640x480]"

然后可以在“ipu1_csi0 capture”节点上开始流式传输。v4l2-ctl工具可用于选择捕获设备节点上支持的任何像素格式。
要确定与“ipu1_csi0捕获”对应的/dev/video节点是什么:

media-ctl -e "ipu1_csi0 capture"
/dev/video0

此案例中,/dev/video0是流式传输元素。 通过v4l2-ctl启动流式传输:

v4l2-ctl --stream-mmap -d /dev/video0

使用Gstreamer开始流式传输并将内容发送到显示器:

gst-launch-1.0 v4l2src device=/dev/video0 ! kmssink

以下是配置直接转换管道,从OV5640捕获,传输到MIPI CSI-2虚拟通道0的示例。它还显示IC输出的颜色空间转换和缩放。

# Setup links
media-ctl -l "'ov5640 1-003c':0 -> 'imx6-mipi-csi2':0[1]"
media-ctl -l "'imx6-mipi-csi2':1 -> 'ipu1_csi0_mux':0[1]"
media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]"
media-ctl -l "'ipu1_csi0':1 -> 'ipu1_ic_prp':0[1]"
media-ctl -l "'ipu1_ic_prp':1 -> 'ipu1_ic_prpenc':0[1]"
media-ctl -l "'ipu1_ic_prpenc':1 -> 'ipu1_ic_prpenc capture':0[1]"
# Configure pads
media-ctl -V "'ov5640 1-003c':0 [fmt:UYVY2X8/640x480]"
media-ctl -V "'imx6-mipi-csi2':1 [fmt:UYVY2X8/640x480]"
media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/640x480]"
media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/640x480]"
media-ctl -V "'ipu1_ic_prp':1 [fmt:AYUV32/640x480]"
media-ctl -V "'ipu1_ic_prpenc':1 [fmt:ARGB8888_1X32/800x600]"
# Set a format at the capture interface
v4l2-ctl -d /dev/video1 --set-fmt-video=pixelformat=RGB3

然后可以在“ipu1_ic_prpenc capture”节点上开始流式传输。
要确定与“ipu1_ic_prpenc capture”对应的/dev/video节点是什么:

media-ctl -e "ipu1_ic_prpenc capture"
/dev/video1

在这种情况下,/dev/video1是流式传输元素。 通过v4l2-ctl启动流式传输:

v4l2-ctl --stream-mmap -d /dev/video1

使用Gstreamer开始流式传输并将内容发送到显示器:

gst-launch-1.0 v4l2src device=/dev/video1 ! kmssink

Known Issues
当使用90度或270度旋转控制以接近IC调整器限制的1024x1024捕获分辨率,并且结合平面像素格式(YUV420、YUV422p)时,帧捕获通常会失败,而IDMAC通道没有结束帧中断。为了解决这个问题,在需要90度或270度旋转时,请使用较低分辨率和/或打包格式(YUYV、RGB3等)。

File list
drivers/staging/media/imx/ nclude/media/imx.h 
include/linux/imx-media.h

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值