我基于gstreamer-1.0编写了一个简单的代码,使用playbin对某个文件进行循环解码,并且每次playbin创建元素mpeg2dec元素时,该元素都有一个新名称。第一次的名称可以是"mepeg2dec0",然后它将后缀索引增加到"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);
这个后缀索引增加是否意味着未释放的元素可能存在内存泄漏?
后缀的递增主要意味着一些跟踪当前后缀。
this something可以是,该streamer分配所有元素并维护它们的列表。当添加一个新元素时,gstreamer可以检查当前分配的元素名称,并根据这些信息生成一个新的元素名称(例如,先尝试"mepg2dec0"作为名称,如果已经有了,再尝试"mepg2dec1",以此类推,直到找到一个空闲名称)。
然而,这个东西也可以是一个单一的整数(每个元素类型),它是单调递增的(没有索引重用),无论何时创建一个新元素(完全忽略是否和哪些元素被销毁)。
所以回答你的问题:
no,为每个元素使用新名称并不能指示是否存在内存泄漏