要分配的gstreamer缓冲区的大小

时间:2016-08-16 15:19:22

标签: c++ udp streaming video-streaming gstreamer

我正在使用gstreamer.freedesktop.org中的gstreamer样本并使用这段代码:

size = 385 * 288 * 2;
buffer = gst_buffer_new_allocate (NULL, size, NULL);
...
/* setup */
g_object_set (G_OBJECT (appsrc), "caps",
    gst_caps_new_simple ("video/x-raw",
                 "format", G_TYPE_STRING, "RGB16",
                 "width", G_TYPE_INT, 384,
                 "height", G_TYPE_INT, 288,
                 "framerate", GST_TYPE_FRACTION, 0, 1,
                 NULL), NULL);

我想知道为什么用宽度384初始化上限但缓冲区的值为385。 当我尝试在我自己的目的中使用此代码时,仍然需要使用宽度+ 1值分配缓冲区,因此我的代码如下所示:

guint size = (nWidth + 1) * nHeight * sizeof(BUFFER_ELEMENT);    // IDK Y, but nWidth needs to be +1 as it made in a sample
buffer = gst_buffer_new_allocate(NULL, size, NULL);

如果删除了“+ 1”,我将在autovideosink中获得黑屏

所以问题是:这个技巧的神奇之处是什么以及gst_buffer_new_allocate()函数如何工作以便它需要它?也许它仍然可以停止工作或崩溃或其他条件下的其他东西? 感谢

0 个答案:

没有答案