为什么在函数内部分配 GstBuffer 会导致 gst_buffer_add_meta 失败,因为缓冲区不可写?

Why does allocating a GstBuffer inside a function cause gst_buffer_add_meta to fail as the buffer isn't writable?

我正在编写一些单元测试来测试我编写的 GStreamer 元素,但我遇到了一个奇怪的情况,我不能 explain/fix。

如果我如下分配缓冲区,它就可以工作;它已分配,我可以将它传递给其他函数来写入元数据

GstBuffer *crop1_buf = gst_buffer_new_allocate(NULL, 1920 * 1080 * 3, NULL);

如果我做一个简单的函数

void allocate_buffer(GstBuffer *buf)
{
    buf = gst_buffer_new_allocate(NULL, 1920 * 1080 * 3, NULL);
}

然后在我之前分配缓冲区的地方改为:

GstBuffer *crop1_buf;
allocate_buffer(crop1_buf);

我得到 Unexpected critical/warning: gst_buffer_add_meta: assertion 'gst_buffer_is_writable (buffer)' failed

你需要修改指针本身,所以你需要将指针传递给它

void allocate_buffer(GstBuffer **buf)
{
    *buf = gst_buffer_new_allocate(NULL, 1920 * 1080 * 3, NULL);
}

和用法示例:

GstBuffer *mybyff;

allocate_buffer(&mybuff);