如今,为appsrc设置上限的几种方法中的哪一种是正确的?

时间:2018-01-23 23:15:46

标签: gstreamer

我正在Linux上用C ++编写实验性gstreamer应用程序。在尝试创建一个apprc来发出算法生成的帧时,我在网上找到了几种设置appsrc的源码头上限的方法。我认为有些已经过时了。有些可能是旧的gst 0.1而不是使用。我发现示例代码未标记为gstreamer版本。这是一个混乱。我发现的大多数方法都可以在这段代码中进行总结:

    source = gst_element_factory_make("appsrc",  "MyAwesomeSource");

#if (1)
  #if (1)
    auto caps = gst_caps_new_simple("video/x-raw", 
//  auto caps = gst_video_format_new_caps("video/x-raw", 
                    "format",  G_TYPE_STRING, "RGB",
                    "width",  G_TYPE_INT,     FrameWidth,
                    "height",  G_TYPE_INT,     FrameHeight,
                    "framerate",  GST_TYPE_FRACTION, framerate, 1, 
                    "interlace-mode", G_TYPE_STRING, "progressive",
                    nullptr);
  #else
    auto caps = gst_caps_new_simple ("video/x-raw-rgb",
          "bpp",G_TYPE_INT,24,
          "depth",G_TYPE_INT,24,
          "width", G_TYPE_INT, 640,
          "height", G_TYPE_INT, 480,
          NULL);                        
  #endif 
#else
    GstVideoInfo vi;
    gst_video_info_set_format(&vi, GST_VIDEO_FORMAT_RGBx, FrameWidth, FrameHeight);
    auto caps = gst_video_info_to_caps(&vi);
#endif
    g_object_set(source, "caps",  caps,
       ...

我正在寻找一个明确的解释,在gstreamer-1.0中正确的,正确的方法是什么,以及理解为什么其他方法不那么好。我想解决的一些细节:当已经将“format”属性设置为“RGB”时,video / x-raw和video / x-raw-rgb之间的区别是什么。并且是“RGBx”文字中的“x”,alpha通道的可选“A”的占位符,或者每个通道的“8”,“16”或某些此类位数的占位符,还是其他什么?< / p>

1 个答案:

答案 0 :(得分:2)

正确的方法是第二个选项(gst_caps_new_simple(..))caps

video / x-raw-rgb是设置大写字母的旧样式(0.10样式) 应该使用Gstreamer-1.0 video / x-raw,format =(string)(supported media types&#34; gst-inspect-1.0 | grep typefindfunctions&#34;应该列出)。并且&#34; x&#34; in&#34; RGBx&#34;字面意义不是一个占位符,它只是媒体类型的定义概念。