![如何在gstreamer中从一个缓冲区复制到另一个缓冲区?](https://linux22.com/image/814889/%E5%A6%82%E4%BD%95%E5%9C%A8gstreamer%E4%B8%AD%E4%BB%8E%E4%B8%80%E4%B8%AA%E7%BC%93%E5%86%B2%E5%8C%BA%E5%A4%8D%E5%88%B6%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%BC%93%E5%86%B2%E5%8C%BA%EF%BC%9F.png)
我正在尝试从原始缓冲区buf
(在chain
函数中)复制到使用以下命令创建的另一个缓冲区:
GstBuffer *buffer;
glong size;
size = GST_BUFFER_SIZE(buf);
buffer = gst_buffer_new ();
GST_BUFFER_SIZE (buffer) = size;
GST_BUFFER_MALLOCDATA (buffer) = g_malloc (size);
GST_BUFFER_DATA (buffer) = GST_BUFFER_MALLOCDATA (buffer);
memcpy(buffer,buf,size);
但我遇到了分段错误。这里面有什么问题吗?
答案1
您不是在写入正在管理的数据GstBuffer
,而是GstBuffer
用最终memcpy
调用覆盖对象本身。相反,您想写入GST_BUFFER_DATA (buffer)
。
话虽如此,如果您只是想要一个具有相同数据的新缓冲区,那么使用该函数似乎更容易gst_buffer_copy()
。
答案2
GstBuffer *buffer;
glong size;
size = GST_BUFFER_SIZE(inp);
buffer = gst_buffer_new();
GST_BUFFER_SIZE(buffer) = size;
GST_BUFFER_MALLOCDATA(buffer) = g_malloc(size);
GST_BUFFER_DATA(buffer) = GST_BUFFER_MALLOCDATA(buffer);
buffer = GST_BUFFER_DATA(inp);
// 现在您可以使用缓冲区指向的数据,使用 fwrite 将其写入文件中