使用gstbuffer时内存泄漏

时间:2016-03-30 06:32:45

标签: memory-leaks gstreamer free

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

对于处理,我需要将缓冲区拉到 appsink ,并使用 appsrc 元素将其推送到管道中。

推动我使用 gst_buffer_new_wrapped 功能。

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

我曾尝试过gst_buffer_unref(buffer);

然后得到以下错误。

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

我已将数据转换为unsigned char指针,然后根据大小包装到gstbuffer中。

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

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

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

该功能将持续调用单独的线程。

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

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

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

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如何将缓冲区推送到appsrc?

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

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

HTH