芯片资讯
- 发布日期:2024-01-09 12:55 点击次数:91 一. 简介
RK3588从入门到精通
开发板:ArmSoM-W3
Kernel:5.10.160
OS:Debian11
上篇文档介绍了rockchip平台怎么配置MIPI-CSI的通路,本⽂主要介绍在Rockchip平台下Camera相关测试命令
二. 摄像头连接ArmSoM-W3开发板与imx415连接图如下:
w3-camera-hardware注意
排线的金属引脚朝向板子
三. 使用摄像头连接摄像头模块并上电后,可查看开机日志。
如果没有报错,那表明模块在正常运行,在Linux系统中,你可以使用多种方法来访问和利用该摄像头设备。
3.1 使用命令行工具media-ctl 和 v4l2-ctl 是在Linux环境下用于配置和管理视频和多媒体设备的命令行工具。它们通常与V4L2(Video for Linux 2)子系统一起使用,用于管理摄像头、视频采集卡、显示设备和其他多媒体硬件的设置和参数。
media-ctl工具的操作是通过/dev/medio0等media 设备,它管理的是Media的拓扑结构中各个节点的 format、大小、 链接。 v4l2-ctl工具则是针对/dev/video0,/dev/video1等 video设备,它在video设备上进行set_fmt、 reqbuf、qbuf、dqbuf、stream_on、stream_off 等一系列操作。
n为4的倍数(0,1,2,3…) /dev/videon+0:视频输出 SP主通道 /dev/videon+1:视频输出 MP自身通道 /dev/videon+2:3A统计 /dev/videon+3:3A参数设置
3.1.1 显示拓扑结构使用以下命令可以显示拓扑结构:
media-ctl -p -d /dev/media0
主要关注的是有没有找到Sensor的Entity。如果没有找到Sensor的Entity,说明Sensor注册有问题。
开发板上接上摄像头后可以看到如下的输出:
3.2.2 查看摄像头信息使用命令列出所有摄像头设备:
其中/dev/video11就是这个摄像头的设备。
查看设备的预览支持格式:
查看设备的所有信息:
3.2.3 显示图像使用v4l2-ctl抓一帧图片:
参数说明:
-d: 摄像头对应设备文件 --set-fmt-video:指定了宽高及pxielformat(用FourCC表示)。NV12即用FourCC表示的pixelformat --stream-mmap:指定buffer的类型为mmap,即由kernel分配的物理连续的或经过iommu映射的buffer --stream-to:指定帧数据保存的文件路径 --stream-skip:指定丢弃(不保存到文件)前3帧 --stream-count:指定抓取的帧数,不包括--stream-skip丢弃的数量
抓取的图片使用adb工具拷贝到Windows下用7YUV工具打开,也可以用ffplay命令打开
ffplay是FFmpeg提供的一个极为简单的音视频媒体播放器(由ffmpeg库和SDL库开发),可以用于音视频播放、可视化分析 ,提供音视频显示和播放相关的图像信息、音频的波形等信息,也可以用作FFmpeg API的测试工具使用。
使用 ffplay 非常简单,只需在终端中运行以下命令来播放媒体文件:
ffplay /data/4k_nv12.yuv -f rawvideo -pixel_format nv12 -video_size 3840x2160
3.2.3 显示视频使用v4l2可以录制视频:
使用ffplay播放:
ffplay -f rawvideo -video_size 3840x2160 -pixel_format nv12 out.yuv
3.3 使用多媒体框架应用程序GStreamer:GStreamer是一种多媒体框架,你可以使用它来构建自定义的多媒体应用程序,捕获摄像头视频,进行处理和展示。
你可以使用以下GStreamer管道捕获视频:
gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink
1. v4l2src:从 /dev/video11 捕获视频数据。
2. video/x-raw:指定输出数据格式为原始视频,format 参数设置为 NV12,width 设置为 3840,height 设置为 2160,framerate 设置为 30fps。
3. videoconvert:执行格式转换,确保输出数据适用于后续的元素。
4. autovideosink:自动选择适当的视频输出插件,将视频显示在屏幕上。
显示如下:
camera-screenshot注意:显示器的分辨率是1920x1080, 亿配芯城 摄像头的分辨率是3840x2160,导致如左上角画面显示不全,双击边框可以得到分辨率是1920x1080的画面。
下面有一个简单的Python示例,用于创建一个GStreamer管道并启动捕获视频可供参考:
3.4.自定义应用程序开发特定的定制功能,一般是使用编程语言(如C++或Python)开发自己的摄像头应用程序
总的来说,应用程序通过API接口采集视频数据大致分为五个步骤:
首先,打开视频设备文件,进行视频采集的参数初始化,设置视频图像的采集窗口、采集的点阵大小和格式;
其次,申请若干视频采集的帧缓冲区,并将这些帧缓冲区从内核空间映射到用户空间,便于应用程序读取/处理视频数据;
第三,将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集;
第四,驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据;
第五,停止视频采集。
四. 结语根据需求,选择最适合的方法来访问和使用摄像头设备,每个具体型号的摄像头可能有其独特的设置和要求,各个系统下的使用摄像头的方法也有很多,如果你有疑问或者需要帮助,可以在ArmSom论坛提出问题,与其他开发者分享经验和获取支持。