我正在尝试使用 gstreamer在Coral DevBoard上制作UI-3370CP-C-HQ R2 相机。
由于摄像头不是标准的 v4l2 摄像头,所以我在开发板上下载并编译了ueyesrc
gst 插件(https://github.com/atdgroup/gst-plugin-ueye)。
在我的应用程序中,我需要将框架作为 opengl 纹理,并且我一直在构建一个工作管道。
到目前为止,我设法从相机中获取东西的唯一方法是将帧保存为 jpeg:
gst-launch-1.0 tee ueyesrc num-buffers=10 ! jpegenc ! filesinklocation=ueyesrc-frame.jpg
ueyesrc 提供的管道示例gst-launch-1.0 ueyesrc ! videoconvert ! xvimagesink
在我的情况下不起作用,因为设备上没有 X-Server(但 Wayland)
gst-launch-1.0 ueyesrc ! videoconvert ! glimagesink
返回以下错误:
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Got context from element 'sink': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplayWayland\)\ gldisplaywayland0";
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstGLImageSinkBin:glimagesinkbin0/GstGLImageSink:sink: Failed to convert multiview video buffer
Additional debug info:
gstglimagesink.c(1741): gst_glimage_sink_prepare (): /GstPipeline:pipeline0/GstGLImageSinkBin:glimagesinkbin0/GstGLImageSink:sink
Execution ended after 0:00:00.486558117
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
使用标准 USB 网络摄像头(Logitech HD Pro Webcam C920),gst-launch-1.0 v4l2src ! videoconvert ! glimagesink
工作正常。
我真的不明白出了什么问题或如何找到有关它的更多线索,我想我在中间错过了一个转换步骤,但我不知道如何解决它。有人有想法吗?
编辑1:这确实是一个转换问题。我通过在videoconvert
大写字母中指定格式来让它工作:gst-launch-1.0 ueyesrc exposure=2 ! videoconvert ! video/x-raw,format=YUY2 ! glimagesink sync=False
尽管 CPU 使用率非常高(iMx8 的所有 4 个内核上 > 90%)并且帧速率最高达到 6.5 fps。