我正在使用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()函数如何工作以便它需要它?也许它仍然可以停止工作或崩溃或其他条件下的其他东西? 感谢