V4L2使用
RDK X5支持V4L2接口,用户可以通过V4L2接口访问RDK X5的mipi接口摄像头,获取VIN、ISP、VSE等阶段的图像数据。
背景知识
HBN框架
HBN框架覆盖了 Camera Sensor 采集链路中大部分的模块,包括 VIN
、 ISP
、 VSE
、 GDC
、 N2D
。其中VIN
、 ISP
、 VSE
可以通过V4L2接口访问。
模块 | 全称 | 解释 |
---|---|---|
VIN | Video Input | 软件概念,包含 MIPI、 SIF,接收单路或多路 Camera sensor 数据,直接送给下游 ISP 或写到 DDR |
SIF | Sensor Interface | 衔接 MIPI 口,把 MIPI 接口收到的数据帧送给下游 ISP 或直接写到 DDR |
ISP | Image Signal Processor | 图像信号处理器 |
VSE | Video Scaler | 图像的裁剪、缩放、颜色空间转换 |
VIN
用于图形采集,可以从4路SIF
接口中采集到原生图形,一般为RAW格式;
ISP
(Image Signal Processor) 用于图像信号处理,RDK X5 支持了多款sensor,均已完成ISP调试,可以直接获取到处理后的NV12格式图像;
VSE
(Video Scale Enginer) 用于图像缩放 支持 6 个缩放通道,可以获取到处理后的NV12格式图像,通道特性如下:
-
最大处理能力: 3840x2160@60fps
-
支持输入裁剪,分别在水平和垂直方向上进行缩放,并且对色度和亮度分量进行单独处理
-
5个 downscale 通道
-
最大分辨率支持分别为 4K/1080P/1080P/720P/720P
-
最小分辨率为 64x64,支持任意 downscale factor
-
1个 upscale 通道
-
最大分辨率支持 4K,最大放大倍数 4X, 放大倍数支持 0 - 4
输出通道编号 类型 通道功能 0 offline 4K Downscale 1 offline 1080P Downscale 2 offline 1080P Downscale 3 offline 720P Downscale 4 offline 720P Downscale 5 offline 4K Upscale
模式切换
使用srpi-config
配置camera采集模式
进入3 Interface Options
->I7 V4L2
选择I1 V4L2 Enable/disable V4L2 interface for camera
模式介绍
HBN
常规模式
Camera是单独一套API,Camera之后的模块用vnode来抽象,vnode抽象的模块包括VIN、ISP、VSE、GDC、Codec。 多个vnode组成一条vflow(类似于一条pipeline)。Camera和VIN通过attach接口绑定起来。 用户只需要调用HBN接口完成模块的初始化和绑定,vflow建立并启动后,用户无须关心数据帧的传递,X5内部会将数据帧由上游传递到下游。
V4L2 sif-isp-vse
V4L2数据流模式
camera 通过 V4l2 snesor 驱动添加,VIN、ISP、VSE都提供了对应的v4l2 video设备节点,用户可以直接通过v4l2 api获取相应的数据。
V4L2 vse alone
V4L2 VSE 单独使用模式
提供VSE通道的v4l2 video设备节点,用户可以直接通过v4l2 api回灌图像给VSE模块进行处理。
配置Camera
如果选择sif-isp-vse
会弹出CAM0,CAM1摄像头选择
X5 RDK cam0 靠近网口,cam1 远离网口;
X5 MD 可以观察载板的丝印;
配置完成后,重启板卡;
确认V4L2模式生效:
使用lsmod 查看驱动,可以看到v4l相关驱动,和sensor相关驱动
设备拓扑
在V4L2 sif-isp-vse
模式生效后,可以通过以下命令查看设备拓扑图,它展示了 /dev/media0 设备的 媒体管道(Media Pipeline) 结构,包括 传感器、ISP、视频节点、数据流路径 等信息。
media-ctl -d /dev/media0 --print-dot > media0.dot
dot -Tpng media0.dot -o media0.png
也可以直接在下表中查询:
VIDEO_DEV_CSI0_SIF "/dev/video0"
VIDEO_DEV_CSI0_ISP "/dev/video4"
VIDEO_DEV_CSI0_VSE0 "/dev/video8"
VIDEO_DEV_CSI0_VSE1 "/dev/video9"
VIDEO_DEV_CSI0_VSE2 "/dev/video10"
VIDEO_DEV_CSI0_VSE3 "/dev/video11"
VIDEO_DEV_CSI0_VSE4 "/dev/video12"
VIDEO_DEV_CSI0_VSE5 "/dev/video13"
VIDEO_DEV_CSI1_SIF "/dev/video1"
VIDEO_DEV_CSI1_ISP "/dev/video5"
VIDEO_DEV_CSI1_VSE0 "/dev/video14"
VIDEO_DEV_CSI1_VSE1 "/dev/video15"
VIDEO_DEV_CSI1_VSE2 "/dev/video16"
VIDEO_DEV_CSI1_VSE3 "/dev/video17"
VIDEO_DEV_CSI1_VSE4 "/dev/video18"
VIDEO_DEV_CSI1_VSE5 "/dev/video19"
VIDEO_DEV_CSI2_SIF "/dev/video2"
VIDEO_DEV_CSI2_ISP "/dev/video6"
VIDEO_DEV_CSI2_VSE0 "/dev/video20"
VIDEO_DEV_CSI2_VSE1 "/dev/video21"
VIDEO_DEV_CSI2_VSE2 "/dev/video22"
VIDEO_DEV_CSI2_VSE3 "/dev/video23"
VIDEO_DEV_CSI2_VSE4 "/dev/video24"
VIDEO_DEV_CSI2_VSE5 "/dev/video25"
VIDEO_DEV_CSI3_SIF "/dev/video3"
VIDEO_DEV_CSI3_ISP "/dev/video7"
VIDEO_DEV_CSI3_VSE0 "/dev/video26"
VIDEO_DEV_CSI3_VSE1 "/dev/video27"
VIDEO_DEV_CSI3_VSE2 "/dev/video28"
VIDEO_DEV_CSI3_VSE3 "/dev/video29"
VIDEO_DEV_CSI3_VSE4 "/dev/video30"
VIDEO_DEV_CSI3_VSE5 "/dev/video31"
对于RDK 板卡来说,拓扑关系可以简化为
使用说明
V4L2-CTL指令
1,使用v4l2-ctl --list-formats-ext 查询支持的分辨率,编码方式,也让驱动完成初始化;
2,使用v4l2-ctl -d /dev/video4获取视频数据;
v4l2-ctl --list-formats-ext --device /dev/video4
v4l2-ctl -d /dev/video4 \
--set-fmt-video=width=640,height=480,pixelformat=NV12 \
--stream-mmap=3 \
--stream-skip=3 \
--stream-to=/tmp/nv12.yuv \
--stream-count=1 \
--stream-poll
V4L2 示例代码
示例代码以源码形式提供,需要使用 make 命令进行编译后运行:
cd /app/cdev_demo/v4l2/
sudo make
参数说明
-w sensor输出宽
-h sensor输出高
-c 采集图片数量
-n sensor采集video节点
-o 输入NV12图像video节点
-i 输入NV12图像路径
1,V4L2 sif-isp-vse
模式 采集图像,保存为文件
./v4l2 -w 1920 -h 1080 -c 10 -n 4
2,V4L2 vse alone
模式,单独使用VSE节点,1080p.yuv作为输入图像,缩放后的图片保存为文件
./v4l2 -w 1920 -h 1080 -c 10 -n 2 -o 2 -i ./1080p.yuv
多媒体应用
hbn
模式和V4L2 sif-isp-vse
模式使用同一套示例程序,hobot-spdev会根据当前的驱动自动选择工作模式,两者的打印信息略有不同
多媒体示例会根据srpi-config
配置自动选择摄像头,请确保摄像头配置正确。如果cam0
cam1
都配置,则默认选择cam1
支持的例程
涉及到hdmi显示,需要先关闭桌面
sudo systemctl stop lightdm
/app/cdev_demo/vio2display
/app/cdev_demo/vio_capture
/app/cdev_demo/vio2encoder
/app/cdev_demo/bpu ./sample -f /app/model/basic/yolov5s_672x672_nv12.bin -m 0
/app/pydev_demo/03_mipi_camera_sample
已知问题
1,取VSE流时,强制选择1920x1080分辨率的ISP sensor 配置文件;
2,V4L2 vse alone
模式,仅支持使用VSE通道2,回灌图像,获取处理结果;