如何解决防止GStreamer更改相机格式
从v4l2src
元素开始运行的GStreamer管道可能会隐式更改相机格式。
这里是一个示例(还要注意,/dev/video0
到处都是隐含的。)
我的一台相机支持这些格式
$ v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 1280x800
Interval: Discrete 0.133s (7.500 fps)
Size: Discrete 1280x1024
Interval: Discrete 0.133s (7.500 fps)
当前格式为
$ v4l2-ctl --get-fmt-video
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'YUYV' (YUYV 4:2:2)
Field : None
Bytes per Line : 1280
Size Image : 614400
Colorspace : Default
Transfer Function : Default (maps to Rec. 709)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Limited Range)
Flags :
如果我只是运行此管道
$ gst-launch-1.0 -e v4l2src ! videoconvert ! autovideosink
这会将当前格式(在运行管道之前,但也将保持该状态)更改为
$ v4l2-ctl --get-fmt-video
Format Video Capture:
Width/Height : 1280/1024
Pixel Format : 'YUYV' (YUYV 4:2:2)
Field : None
Bytes per Line : 2560
Size Image : 2621440
Colorspace : Default
Transfer Function : Default (maps to Rec. 709)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Limited Range)
Flags :
这不是我想要的。我要的是让GStreamer使用已经设置的格式而不更改它。我如何通过编程方式完成 (gst-launch-1.0
只是一个例子,我主要对通过代码执行此操作很感兴趣)?
解决方法
当流水线元素之间发生caps-negotiation
时,将使用第一个匹配项。很有可能不是您所设置的。
要强制执行给定格式,请明确定义上限:
gst-launch-1.0 -e v4l2src ! videoconvert ! \
video/x-raw,format=YVYU,width=640,height=480,framerate=15/1 ! \
videoconvert ! xvimagesink
要在C / C ++中设置上限,请使用:
gst_util_set_object_arg(element,"caps","video/x-raw,format=YUY2");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。