【问题标题】:Prevent GStreamer from changing camera format防止 GStreamer 更改相机格式
【发布时间】:2020-10-18 16:09:14
【问题描述】:

运行从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 只是一个例子,我主要对在代码中执行此操作感兴趣)?

【问题讨论】:

    标签: gstreamer v4l2 gstreamer-1.0


    【解决方案1】:

    当管道元素之间发生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, width=640, height=480, format=YUY2");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-17
      • 2023-02-04
      • 2018-12-01
      • 1970-01-01
      • 2018-09-16
      • 2013-05-08
      • 1970-01-01
      • 2013-03-30
      相关资源
      最近更新 更多