为什么在函数内部分配 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);
我正在编写一些单元测试来测试我编写的 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);