我正在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>
答案 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;字面意义不是一个占位符,它只是媒体类型的定义概念。