本帖最后由 damiaa 于 2024-3-8 09:11 编辑
【Luckfox幸狐 RV1106 Linux 开发板测评】08 摄像头设备应用一 v4l2-ctl测试摄像头
摄像头接线
Luckfox幸狐 RV1106 Linux 开发板有摄像头接口,适配的是 SC3336 3MP Camera (A) 摄像头。正好咸鱼整了个摄像头过来。接上试试。
我手上的板子是Luckfox Pico Plus/Pro/Max,接线方向和03的那个正好相反!就是蓝色的部分靠近接线头,靠芯片的是接触的针(金属部分),不要搞错。如下图:
查看摄像头是否连上
连上usb线,使用adb连接电脑,查看userdata目录里面是否有rkipc.ini。如果有就是板子识别到摄像头了。
l
VLC media player查看摄像
下载并安装 VLC media player,在媒体—>打开网络串流输入默认的 IP 地址:rtsp://172.32.0.93/live/0
点击播放就可以看到摄像画面了。
V4L2 简介
V4L2( Video for Linux 2),是Linux操作系统上用于支持视频设备的内核框架。( Video for Linux 1据说太老,废了)。提供了一组 AP I和驱动程序接口,使用户空间应用程序能够与各种视频设备(如摄像头、电视卡等)交互。V4L2 是 Linux 内核的一部分,用于处理视频输入和输出。
V4L2 框架
User Space(用户空间)
应用程序通常通过libv4l库来操作摄像头,也可以选择基于字符设备/dev/videoX自行编写应用程序。
guvcview通常适用于USB 摄像头,因为它提供了用户友好的图形界面,适合在桌面环境中操作。(Luckfox Pico 暂时不支持)
yavta通常适用于 CSI 摄像头,因为 CSI 摄像头通常在嵌入式系统中使用,yavta是一个轻量级的命令行工具,适合在终端环境中进行测试和调试。(默认不开启)
v4l2 utilities: v4l-utils 工具包主要包含两个常用工具,分别是 media-ctl 和 v4l2-ctl
Kernel Space(内核空间)
RKVICAP 和 RKISP 驱动主要是基于v4l2 / media框架实现硬件的配置、中断处理、控制 buffer轮转,以及控制 subdevice (如 MIPI D-PHY及sensor)的上下电等功能。(更多详细信息查看文档Rockchip_Driver_Guide_VI_CN_v1.1.3.pdf)
MIPI D-PHY是 MIPI 联盟定义的一种物理层协,通常用于连接图像传感器和图像处理器
Video Buffer 2 是 Linux 内核中的一个子系统, vb2 负责在 Linux 系统中处理视频缓冲区的内存管理和设备I/O操作,通常用于处理摄像头和其他视频输入设备
摄像头通过D-PHY 将视频数据传输到处理单元,并在此过程中,vb2负责分配和管理用于存储视频帧的内存缓冲区
CCI(Camera Control Interface,摄像头控制接口):摄像头控制接口是一种用于从图像处理器向摄像头发送控制命令的接口。主要是通过GPIO(供电、片选)、I2C(下发配置命令给sensor)实现配置 sensor
Hardware(硬件)
CSIC Controller: 主要功能是实现图像传感器和图像处理器之间的高速数据传输。
I2C Controller: 用于与图像传感器的I2C块进行通信,这通常用于配置和控制传感器的参数,如曝光时间、增益等。
GPIO Controller: 用于与图像传感器进行通信,通常用于提供电源或选择传感器,可能是通过控制传感器的供电或片选引脚。
EHCI/OHCI:OHCI 主要用于 USB 1.1 设备,而 EHCI 用于支持 USB 2.0 高速设备。这两者的结合使得计算机可以同时支持不同速度的 USB 设备,并为 USB 控制器提供了一致的软硬件接口。这里指的是USB类型摄像头
External Devices(外设)
摄像头的接口:CSI(2 x 2Lanes or 1 x 4Lanes 2.5Gbps/Lane)、DVP(BT601 / BT656 / BT1120 pclk: 150MHz)和 USB 2.0。
内核开启V4L2-utils工具包
V4L2-utils 是一组用于测试和配置 V4L2 设备的实用工具,通过命令行界面提供了对 V4L2 接口的访问。Luckfox SDK 的buildroot包中已经包含了 v4l2-utils软件包中的工具,我们现在手动开启它。
- 开启buildroot配置 ~/luckfox-pico$ ./build.sh clean 会清除buildroot-2023.02.6目录,时间会比较长,以前搞过的可以不操作它,除非编译有问题再搞。
~/luckfox-pico$ ./build.sh lunch 选择8
~/luckfox-pico$ ./build.sh 这样才能产生buildroot-2023.02.6目录,进入目录
z@z-virtual-machine:~/rv-xxxx/rv1106-spinand/luckfox-pico/sysdrv/source/buildroot$ cd buildroot-2023.02.6/
make luckfox_pico_defconfig
make menuconfig
进行配置
先按/查找 fswebcam,找到后按1跳到配置,选中。然后按/查找libv4l2,找到后按1跳转到配置地方配置libv4l和v4l-utils tools 保存退出。
也可以直接菜单里面找
记得每次save一下 然后退出,后面命令行操作:
make savedefconfig
make
中间有这些提示
4,然后退到目录
z@z-virtual-machine:~/rv-xxxx/rv1106-spinand/luckfox-pico$
./build.sh lunch 选择8
./build.sh编译
输出文件如下
因为今天前面编译了一下,烧录就重新全部烧录一遍吧。
v4l2-ctl工具做摄像实验
用adb连接RV1106板子,然后输入
v4l2-ctl –list-devices列出摄像头的设备
media-ctl -d /dev/media1 -e "rkisp_selfpath"列出可以输出的视频设备
v4l2-ctl --device=/dev/video11 --list-formats-ext 列出参数
说明 video11为输出视频 还有参数 列出 为后面操作提供参数
显示摄像头参数
v4l2-ctl --device=/dev/video11 --list-ctrls
录制视频 2个
killall rkipc
v4l2-ctl --device=/dev/video11 --set-fmt-video=width=640,height=480,pixelformat=NV12 --stream-mmap --stream-to=video50.yuv --stream-count=60
v4l2-ctl --device=/dev/video11 --set-fmt-video=width=640,height=480,pixelformat=NV12 --stream-mmap --stream-to=video50b.yuv --stream-count=60
文件拷贝到电脑Ubuntu里面播放
ffplay -video_size 640x480 -pixel_format nv12 -framerate 10 -i video50.yuv
ffplay -video_size 640x480 -pixel_format nv12 -framerate 10 -i video50b.yuv
转换格式为mp4
ffmpeg -f rawvideo -pixel_format nv12 -video_size 640x480 -framerate 30 -i video50.yuv -c:v libx264 output.mp4
实验先汇报到这里,谢谢大家。