瑞芯微Rockchip开发者社区
直播中

王波

7年用户 1380经验值
私信 关注
[问答]

为什么RK3588通过v4l2-ctl对摄像头进行取流测试会失败呢

1.jpg

问题描述及复现步骤:

通过v4l2-ctl对摄像头进行取流测试,但输出文件大小为0,没有保存任何数据。

使用SDK版本为:rk3588_repo_sdk_v1.0.2a.7z, Bundle:rk3588-v1.0.2a-to-v1.0.2b.7z; rk3588-v1.0.2b-to-v1.0.2c.7z
编译为BuildRoot系统和Debian系统测试结果相同。

测试命令如下:

v4l2-ctl -d /dev/video0 --set-fmt-video=width=640,height=480,pixelformat=NV12 --stream-mmap=3 --stream-to=/tmp/out2.yuv --stream-count=20 --stream-poll --verbose

输出结果:

VIDIOC_QUERYCAP: ok
VIDIOC_G_FMT: ok
VIDIOC_S_FMT: ok
Format Video Capture Multiplanar:
Width/Height      : 640/480
Pixel Format      : 'NV12' (Y/CbCr 4:2:0)
Field             : None
Number of planes  : 1
Flags             :
Colorspace        : Default
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization      : Default
Plane 0           :
Bytes per Line : 640
Size Image     : 460800
VIDIOC_REQBUFS returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_QUERYBUF returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
VIDIOC_QBUF returned 0 (Success)
VIDIOC_STREAMON returned 0 (Success)
cap dqbuf: 0 seq:      0 bytesused: 460800 ts: 3662.352325 delta: 3662352.325 ms (ts-monotonic, ts-src-eof)
cap dqbuf: 1 seq:      1 bytesused: 460800 ts: 3662.385671 (ts-monotonic, ts-src-eof)
cap dqbuf: 2 seq:      2 bytesused: 460800 ts: 3662.418945 (ts-monotonic, ts-src-eof)
cap dqbuf: 0 seq:      3 bytesused: 460800 ts: 3662.452362 (ts-monotonic, ts-src-eof)
cap dqbuf: 1 seq:      4 bytesused: 460800 ts: 3662.485613 fps: 30.01 (ts-monotonic, ts-src-eof)
cap dqbuf: 2 seq:      5 bytesused: 460800 ts: 3662.518964 fps: 30.00 (ts-monotonic, ts-src-eof)
cap dqbuf: 0 seq:      6 bytesused: 460800 ts: 3662.552390 fps: 29.99 (ts-monotonic, ts-src-eof)
cap dqbuf: 1 seq:      7 bytesused: 460800 ts: 3662.585610 fps: 30.01 (ts-monotonic, ts-src-eof)
cap dqbuf: 2 seq:      8 bytesused: 460800 ts: 3662.618955 fps: 30.00 (ts-monotonic, ts-src-eof)
cap dqbuf: 0 seq:      9 bytesused: 460800 ts: 3662.652361 fps: 30.00 (ts-monotonic, ts-src-eof)
cap dqbuf: 1 seq:     10 bytesused: 460800 ts: 3662.685610 fps: 30.00 (ts-monotonic, ts-src-eof)
cap dqbuf: 2 seq:     11 bytesused: 460800 ts: 3662.719061 fps: 29.99 (ts-monotonic, ts-src-eof)
cap dqbuf: 0 seq:     12 bytesused: 460800 ts: 3662.752365 fps: 30.00 (ts-monotonic, ts-src-eof)
cap dqbuf: 1 seq:     13 bytesused: 460800 ts: 3662.785607 fps: 30.00 (ts-monotonic, ts-src-eof)
cap dqbuf: 2 seq:     14 bytesused: 460800 ts: 3662.818992 fps: 30.00 (ts-monotonic, ts-src-eof)
cap dqbuf: 0 seq:     15 bytesused: 460800 ts: 3662.852359 fps: 30.00 (ts-monotonic, ts-src-eof)
cap dqbuf: 1 seq:     16 bytesused: 460800 ts: 3662.885608 fps: 30.00 (ts-monotonic, ts-src-eof)
cap dqbuf: 2 seq:     17 bytesused: 460800 ts: 3662.918945 fps: 30.00 (ts-monotonic, ts-src-eof)
cap dqbuf: 0 seq:     18 bytesused: 460800 ts: 3662.952395 fps: 30.00 (ts-monotonic, ts-src-eof)
cap dqbuf: 1 seq:     19 bytesused: 460800 ts: 3662.985658 fps: 30.00 (ts-monotonic, ts-src-eof)

回帖(3)

张红

2022-11-25 16:21:50
v4l2-utils  好像需要 1.16.5 之前的版本才能取得到流,你可以用 gstreamer 取一下流看看可不可以
举报

王波

2022-11-25 16:21:58
我试了gstreamer,命令如下:
firefly@firefly:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=NV12,width=800,height=600,framerate=30/1 ! kmssink

输出结果如下:
Setting pipeline to PAUSED ...
Using mplane plugin for capture
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstKMSSink:kmssink0: GStreamer encountered a general resource error.
Additional debug info:
../sys/kms/gstkmssink.c(1967): gst_kms_sink_show_frame (): /GstPipeline:pipeline0/GstKMSSink:kmssink0:
drmModeSetPlane failed: Invalid argument (22)
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data stream error.
Execution ended after 0:00:01.193099748
Additional debug info:
../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming stopped, reason error (-5)
Setting pipeline to NULL ...
Freeing pipeline ...

好像还是不行。
另外,我在Debian的固件中使用V4L2 TestBench工具,能够看到摄像头图像,也能够把图像保存到文件中。
那很奇怪,使用v4l2-ctl为什么不行?而且我自己写了一个通过v4l2的取流的程序,读取的buffer为空。
举报

王波

2022-11-25 16:22:13
我试了gstreamer,命令如下:
firefly@firefly:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=NV12,width=800,height=600,framerate=30/1 ! kmssink

输出结果如下:
Setting pipeline to PAUSED ...
Using mplane plugin for capture
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstKMSSink:kmssink0: GStreamer encountered a general resource error.
Additional debug info:
../sys/kms/gstkmssink.c(1967): gst_kms_sink_show_frame (): /GstPipeline:pipeline0/GstKMSSink:kmssink0:
drmModeSetPlane failed: Invalid argument (22)
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data stream error.
Execution ended after 0:00:01.193099748
Additional debug info:
../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming stopped, reason error (-5)
Setting pipeline to NULL ...
Freeing pipeline ...

好像还是不行。
另外,我在Debian的固件中使用V4L2 TestBench工具,能够看到摄像头图像,也能够把图像保存到文件中。
那很奇怪,使用v4l2-ctl为什么不行?而且我自己写了一个通过v4l2的取流的程序,读取的buffer为空。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分