使用 gstbuffer 时内存泄漏

Memory Leaks while using gstbuffer

我有一个管道,它从网络摄像头获取数据并进行处理。

为了处理,我需要将该缓冲区拉到 appsink 并使用 appsrc 元素将其推入管道。

推的时候用了gst_buffer_new_wrapped函数

然后每次推送数据时都会分配一个新缓冲区。但是如何释放内存是个问题。

我试过gst_buffer_unref(buffer);

然后出现以下错误。

 Error in `./uuHiesSoaServer': free(): invalid pointer: 0x00007fddf52f6000 

我将数据放入一个无符号字符指针中,然后根据大小包装到一个gstbuffer中。

现在如何释放分配的内存?

g_signal_emit_by_name (Source, "push-buffer", Buffer, &ret);

我使用上面的函数将数据推送到 Source(appsrc)。

该函数将在单独的线程上连续调用。

当数据可用时,线程函数将使用

创建缓冲区
gst_buffer_new_wrapped((void *)data, Size);

在 valgrind 中检查内存泄漏时,上面的行显示为泄漏。

如何解决?

如何将缓冲区推入 appsrc?

如果你使用 gst_app_src_push_buffer 函数我猜你不必释放资源因为 gst_app_src_push_buffer 将拥有缓冲区(这意味着它也释放它) 检查 this example

如果您使用需要数据回调,您可能需要释放数据 - 检查 this example

HTH