对应的V4L2子设备的管道模式也应按照所需设置,可以通过控制ID0x009819a1设置,如下所示:
yavta -w "0x009819A1 1" /dev/v4l-subdev7
捕获的帧以/tmp/frame-#.bin文件的形式可用。
RunningmodeandfifirmwarebinaryselectionImgU基于固件工作,目前ImgU固件支持在单个输入帧数据的时间共享下运行2个管道。每个管道可以以“VIDEO”或“STILL”模式运行,“VIDEO”模式通常用于视频帧捕获,“STILL”用于静态帧捕获。如果您想以较小的系统负载和功率捕获像,则也可以选择“VIDEO”来捕获静态帧。对于“STILL”模式,ImgU将尝试使用较小的BDS因子并输出更大的Bayer帧以进行进一步的YUV处理,从而获得高质量的像。此外,“STILL”模式需要XNR3进行降噪,因此“STILL”模式将需要比“VIDEO”模式更多的电源和内存带宽。TNR将在“VIDEO”模式下启用,并由“STILL”模式绕过。ImgU默认以“VIDEO”模式运行,用户可以使用v4l2控件V4L2_CID_INTEL_IPU3_MODE查询和设置运行模式。对于用户而言,“VIDEO”模式和“STILL”模式之间的缓冲队列没有区别,必须启用强制输入和主输出节点,并排队缓冲区,统计信息和取景器队列是可选的。固件二进制文件将根据当前运行模式进行选择,如果启用了ImgU动态调试,则可以观察到如“usingbinaryif_to_osys_striped”或“usingbinaryif_to_osys_primary_striped”的日志,if_to_osys_striped二进制文件用于“VIDEO”,if_to_osys_primary_striped二进制文件用于“STILL”。
ImgUImgU被表示为两个V4L2子设备,每个子设备都提供了一个V4L2子设备接口给用户空间。每个V4L2子设备都表示一个管道,最多可以支持2个流。这有助于支持高级相机功能,如连续查找器和视频快照。ImgU包含两个独立的管道,每个管道都建模为一个V4L2子设备,作为一个V4L2子设备节点暴露给用户空间。每个管道都有两个接收端口和三个发送端口,具体如下:
v4l2n网址没搜到你也可以用yavta命令做同样的事情:
yavta --data-prefix -Bcapture-mplane -c10 -n5 -I -s2592x1944
--file=frame-#.out-f NV12 /dev/video5 &
yavta --data-prefix -Bcapture-mplane -c10 -n5 -I -s2592x1944
--file=frame-#.vf -f NV12 /dev/video6 &
yavta --data-prefix -Bmeta-capture -c10 -n5 -I
--file=frame-#.3a /dev/video7 &
yavta --data-prefix -Boutput-mplane -c10 -n5 -I -s2592x1944
--file=/tmp/frame-in.cio2 -f IPU3_SGRBG10 /dev/video4
每个端口都连接到相应的V4L2视频接口,作为一个V4L2视频设备节点暴露给用户空间。
ConfiguringtheIntelIPU3可以使用媒体控制器来配置IPU3ImgU管道。
管道的一些阶段将由运行在ISP处理器上的固件执行,而其他许多阶段将使用一组称为加速器集群的固定硬件块来处理像素数据并生成统计信息。由structipu3_uapi_acc_param定义的各个算法的ACC参数可以通过嵌入在structipu3_uapi_params结构中的structipu3_uapi_flags由用户空间选择应用。对于被配置为未启用的参数,驱动程序将忽略相应的结构体,此时算法的现有配置将被保留。
ProcessingtheimageinrawBayerformatConfifiguringImgUV4L2subdevforimageprocessingImgUV4L2子设备必须使用媒体控制器API进行配置,以使所有视频节点正确设置。让我们以“ipu3-imgu0”子设备为例。
media-ctl -d $MDEV -r
media-ctl -d $MDEV -l "ipu3-imgu 0 input":0 -> "ipu3-imgu 0":0[1]
media-ctl -d $MDEV -l "ipu3-imgu 0":2 -> "ipu3-imgu 0 output":0[1]
media-ctl -d $MDEV -l "ipu3-imgu 0":3 -> "ipu3-imgu 0 viewfinder":0[1]
media-ctl -d $MDEV -l "ipu3-imgu 0":4 -> "ipu3-imgu 0 3a stat":0[1]
Fig.4:IPU3ImgUPipelineDiagram下表是对以上算法的描述:
在ImgU流水线中,某些硬件块可以通过裁剪或缩放来改变帧的分辨率,这些硬件块包括输入饲送器、Bayer缩放器和几何畸变校正器。还有一个块可以改变帧的分辨率——YUV缩放器,只适用于二次输出。原始Bayer帧经过这些ImgU流水线硬件块,并将最终处理的像输出到DDR内存。
v4l2n --pipe=4 --load=/tmp/frame-#.bin --open=/dev/video4
--fmt=type:VIDEO_OUTPUT_MPLANE,width=2592,height=1944,pixelformat=0X47337069
--reqbufs=type:VIDEO_OUTPUT_MPLANE,count:1 --pipe=1
--output=/tmp/frames.out --open=/dev/video5
--fmt=type:VIDEO_CAPTURE_MPLANE,width=2560,height=1920,pixelformat=NV12
--reqbufs=type:VIDEO_CAPTURE_MPLANE,count:1 --pipe=2
--output=/tmp/frames.vf --open=/dev/video6
--fmt=type:VIDEO_CAPTURE_MPLANE,width=2560,height=1920,pixelformat=NV12
--reqbufs=type:VIDEO_CAPTURE_MPLANE,count:1 --pipe=3 --open=/dev/video7
--output=/tmp/frames.3A --fmt=type:META_CAPTURE,?
--reqbufs=count:1,type:META_CAPTURE --pipe=1,2,3,4 --stream=5
raw2pnm是什么:raw2pnm是一种用于将RAW格式像转换为PNM格式像的在线工具。PNM是PortableaNyMap的缩写,是一种无损的位格式,可以存储灰度像、伪彩色像和真彩色像。该工具可以方便地将RAW格式像转换为PNM格式,从而使用户能够轻松地编辑和操纵它们。其中,2560x1920表示输出的分辨率,NV12是视频格式,后跟输入帧和输出PNM文件。Viewfinderoutputframes
raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.vf /tmp/frames.vf.ppm
ConvertingtherawBayerimageintoYUVdomain在上述步骤之后处理的像,可以按以下方式转换为YUV域。Mainoutputframes
raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.out /tmp/frames.out.ppm
CapturingframesinrawBayerformatCIO2的MIPICSI2接收器用于从连接到CSI2端口的原始传感器中捕获帧。捕获的帧被用作ImgU驱动程序的输入。使用IPU3ImgU进行像处理需要使用像raw2pnm2和yavta3这样的工具,因为它们具有以下特定于IPU3的独特要求和/或功能。-IPU3CSI2接收器以特定于IPU3的打包原始Bayer格式输出从传感器捕获的帧。-必须同时操作多个视频节点。我们以ov5670传感器连接到CSI2端口0并进行2592x1944像捕获为例。使用媒体控制器API,ov5670传感器被配置为以打包的原始Bayer格式发送帧到IPU3CSI2接收器。
# This example assumes /dev/media0 as the CIO2 media device
export MDEV=/dev/media0
# and that ov5670 sensor is connected to i2c bus 10 with address 0x36
export SDEV=$(media-ctl -d $MDEV -e "ov5670 10-0036")
# Establish the link for the media devices using media-ctl [#f3]_
media-ctl -d $MDEV -l "ov5670:0 -> ipu3-csi2 0:0[1]"
# Set the format for the media devices
media-ctl -d $MDEV -V "ov5670:0 [fmt:SGRBG10/2592x1944]"
media-ctl -d $MDEV -V "ipu3-csi2 0:0 [fmt:SGRBG10/2592x1944]"
media-ctl -d $MDEV -V "ipu3-csi2 0:1 [fmt:SGRBG10/2592x1944]"
OverviewofIPU3pipelineIPU3管道有多个像处理阶段,每个阶段都需要一组参数作为输入。管道的主要阶段如下所示:
一旦媒体管道被配置,就可以使用yavta工具设置所需的传感器特定设置。
yavta -w 0x009e0903 444 $SDEV
yavta -w 0x009e0913 1024 $SDEV
yavta -w 0x009e0911 2046 $SDEV
其中,2560x1920表示输出的分辨率,NV12是视频格式,后跟输入帧和输出PNM文件。
V4L2视频接口模型化DMA引擎,并将其作为V4L2视频设备节点公开给用户空间。
一旦设置了所需的传感器设置,可以按照以下步骤进行帧捕获。
yavta --data-prefix -u -c10 -n5 -I -s2592x1944 --file=/tmp/frame-#.bin
-f IPU3_SGRBG10 $(media-ctl -d $MDEV -e "ipu3-cio2 0")
文章为作者独立观点,不代表股票交易接口观点