当我尝试在 imx8mp-evk 板上使用 ov5640 相机时遇到失败,需要指导和帮助。
我确认 ov5640 相机模块(与 evk 板一起购买)在 imx8mm-evk 板上工作,命令为:gst-launch-1.0 v4l2src device=/dev/video0!带图像的自动视频接收器:LF_v5.15.32-2.0.0_images_IMX8MMEVK.zip。
我手头只有一个摄像头:ov5640,所以我将摄像头连接到 imx8mp-evk 板 J12(CSI1 MIPI)。imx8mp-evk 板与图像一起下载:LF_v5.15.32-2.0.0_images_IMX8MPEVK.zip。
系统检测到摄像头,v4l2 设备看起来正常:
$ v4l2-ctl --list-devices
():
/dev/v4l-subdev0
mxc-isi-cap (platform:32e00000.isi:cap_devic):
/dev/video3
mxc-isi-m2m (platform:32e00000.isi:m2m_devic):
/dev/video2
FSL Capture Media Device (platform:mxc-md):
/dev/media0
vsi_v4l2dec (platform:vsi_v4l2dec):
/dev/video1
vsi_v4l2enc (platform:vsi_v4l2enc):
/dev/video0
我们可以看到呈现的捕获设备是/dev/video3(ov5640使用ISI,这是正确的)
我尝试使用不同的工具来使用ov5640相机,看起来没有错误但是挂在这里,所以我认为start_stream IOCTL没有问题,但是没有数据返回到用户空间,所以用户空间工具在那里等待数据。
$ gst-launch-1.0 -e v4l2src device=/dev/video3 ! video/x-raw ! autovideosink
Set
ting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
[ 1802.093915] bypass csc
[ 1802.096289] input fmt YUV4
[ 1802.099019] output fmt YUYV
$ /unit_tests/V4L2/mx8_v4l2_cap_drm.out -cam 8 -fmt NV12 -ow 1920 -oh 1080 -num 1 -of
init channel[3] save_file_name=3.NV12
init channel[3] v4l2_dev_name=/dev/video3 w/h=(1280,800)
open 3.NV12 success
open /dev/video3 success
planes=2 WxH@fps = 1920x1080@30
bypass csc
input fmt YUV4
output fmt NV12
channel[3] v4l_dev=0x4 start capturing
$ ls -l
-rw-r----- 1 root root 0 Oct 9 20:03 3.NV12
$ v4l2-ctl -d /dev/video3 --set-fmt-video=width=1280,height=720,pixelformat='NV12' --stream-mmap --stream-count=5
[ 981.256852] bypass csc
[ 981.259229] input fmt YUV4
[ 981.261954] output fmt NV12
使用 gst-launch-1.0 预览时,没有看到任何 HDMI 捕获。当用mx8_v4l2_cap_drm.out保存相机数据时,保存文件的大小总是0。当用v4l2-ctl获取相机数据时,没有数据出现(如果有数据,可以看到类似<<<<<<<<<< <<<<<<<<<<<<<<<< 来自控制台)。
我还尝试将相机连接到 CSI2 并使用 dtb 文件:imx8mp-evk-basler-ov5640.dtb。在这种情况下,ov5640 捕获设备是 /dev/video2。我也尝试了以上三个工具,结果是一样的。