将v4l2src格式用作BGR,将io-mode用作dmabuf时,为什么gstreamer管道会失败?

时间:2018-12-05 04:55:13

标签: gstreamer gstreamer-1.0

我正在ubunutu 16.04 LTS上使用gstreamer版本1.8.3。 我正在尝试使用gst-launch-1.0在终端上使用以下命令来运行管道。 命令:

gst-launch-1.0 -v v4l2src io-mode=4 ! video/x-raw,format=BGR ! videoconvert ! autovideosink --gst-debug=2

我收到调试消息

  

0:00:00.682056977 4806 0x1c624a0错误fdmemory gstfdmemory.c:114:gst_fd_mem_map:0x1c5d5f0:fd 20:mmap失败:无效的参数   0:00:00.682092724 4806 0x1c624a0错误GST_MEMORY gstmemory.c:324:gst_memory_map:mem 0x1c5d5f0:子类映射失败   0:00:00.682124299 4806 0x1c624a0错误fdmemory gstfdmemory.c:114:gst_fd_mem_map:0x1c5d5f0:fd 20:mmap失败:无效的参数   0:00:00.682138286 4806 0x1c624a0错误GST_MEMORY gstmemory.c:324:gst_memory_map:mem 0x1c5d5f0:子类映射失败   0:00:00.682152551 4806 0x1c624a0错误默认视频帧.c:161:gst_video_frame_map_id:无法映射视频帧平面0   0:00:00.682171269 4806 0x1c624a0警告videofilter gstvideofilter.c:292:gst_video_filter_transform:警告:收到无效的视频缓冲区   警告:从元素/ GstPipeline:pipeline0 / GstVideoConvert:videoconvert0:内部GStreamer错误:未实现代码。请在http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer提交错误。   其他调试信息:   gstvideofilter.c(292):gst_video_filter_transform():/ GstPipeline:pipeline0 / GstVideoConvert:videoconvert0:   收到无效的视频缓冲区   “

但是,如果我更改format = YUY2,则相同的管道也可以工作。 工作命令:

gst-launch-1.0 -v v4l2src io-mode=4 ! video/x-raw,format=YUY2 ! videoconvert ! autovideosink --gst-debug=2

从调试消息中,我发现使用BGR格式和dmabuf时mmap失败。

我怀疑数据的大小可能会导致mmap。对于BGR,map为2.7 MB,对于YUY2,一帧缓冲区为1.8 MB。 因此,在进行mmap之前,我将BGR的大小固定为1.8 MB。然后mmap并没有引发任何错误,但是显然管道在其他地方中断了,因为它将使数据无效。

有人可以帮助我解决这个问题吗?我想建立一个BGR格式的管道,作为v4l2src的输出,它应该使用dmabuf作为io-mode。

0 个答案:

没有答案