【发布时间】:2013-04-10 23:30:11
【问题描述】:
如何在 gstreamer 元素/插件中找到内存泄漏问题?如何分析内存/对象泄漏/引用计数的 gst 引用计数?有什么例子吗? 我正在使用appsrc 和appsink 将缓冲区推入和拉出gstreamer 管道。这些元素似乎存在一些内存问题。我有将数据提供给管道的实时源,通常要在 appsrc 和 appsink 上为实时源设置哪些属性? 谢谢-opensid
【问题讨论】:
如何在 gstreamer 元素/插件中找到内存泄漏问题?如何分析内存/对象泄漏/引用计数的 gst 引用计数?有什么例子吗? 我正在使用appsrc 和appsink 将缓冲区推入和拉出gstreamer 管道。这些元素似乎存在一些内存问题。我有将数据提供给管道的实时源,通常要在 appsrc 和 appsink 上为实时源设置哪些属性? 谢谢-opensid
【问题讨论】:
您可以使用 valgrind (memcheck) 或 asan (address sanitizer) 等工具来检查此类问题。 Refcount 问题很难找到。
【讨论】:
如果您使用的是 AppSrc 示例,那么有一个相当简单的解决方案,即将 Gst.Buffer 分配包装在 using 语句中。
例如改变如下方法
static void PushAppData (object o, Gst.App.NeedDataArgs args) {
ulong mseconds = 0;
if (appsrc.Clock != null)
mseconds = appsrc.Clock.Time / Clock.MSecond;
Gst.Buffer buffer = DrawData (mseconds);
appsrc.PushBuffer (buffer);
}
到这里
static void PushAppData (object o, Gst.App.NeedDataArgs args) {
ulong mseconds = 0;
if (appsrc.Clock != null)
mseconds = appsrc.Clock.Time / Clock.MSecond;
using(Gst.Buffer buffer = DrawData (mseconds))
appsrc.PushBuffer (buffer);
}
以前我的这个示例会在
【讨论】:
【讨论】: