1

我基于gstreamer-1.0编写了一个简单的代码,使用playbin对某个文件进行循环解码,并且每次playbin创建元素mpeg2dec元素时,该元素都有一个新名称。最开始的名称可能是“mepg2dec0”,然后再次播放文件时,它将后缀索引增加到“mpeg2dec1”,“mpeg2dec2”等等。

以下是部分代码引用:

do {
    playbin=gst_element_factory_make("playbin", "play");
    g_object_set(G_OBJECT(playbin), "uri", "file:///home/gst/Videos/1.ts", NULL);
    /* add message receivers ... */
    gst_element_set_state(GST_ELEMENT(playbin), GST_STATE_PAUSED);
    gst_element_set_state(GST_ELEMENT(playbin), GST_STATE_PLAY);
    /* wait until got EOS */
    gst_element_set_state(GST_ELEMENT(playbin), GST_STATE_PAUSED);
    gst_element_set_state(GST_ELEMENT(playbin), GST_STATE_NULL);
    gst_object_unref(GST_ELEMENT(playbin));
} while(1);

这个后缀索引增加是否意味着未释放的元素可能存在内存泄漏?

4

1 回答 1

0

后缀的递增主要意味着某些东西会跟踪当前的后缀。

可能是,gstreamer 分配所有元素并维护它们的列表。当添加一个新元素时,gstreamer 可以检查当前分配的元素名称并根据此知识生成一个新元素(例如,首先尝试“mepg2dec0”作为名称,如果已经使用,请尝试“mepg2dec1”等等, 直到找到一个自由名称)。

然而,这个东西也可以是一个单一的整数(每个元素类型),它是单调递增的(没有索引重用),无论何时创建一个新元素(并且完全忽略是否以及哪些元素被破坏)。

所以回答你的问题:

,每个元素都有一个新名称并不能表明是否存在内存泄漏。

于 2013-04-22T12:18:25.120 回答