我对上面的题目和它的问题很困惑。我从教程和网页API中了解到要删除对象,
。
然而,似乎有一些函数会增加对象的内部引用计数,如果我错了,请纠正我。
例如,我编写了一个函数片段,用于将新连接的元素与管道同步。参考计数从1增加到4。
//// record -> mfsink is the splitmux
g_print("ref count (1) splitmuxsink is %d \n", GST_OBJECT_REFCOUNT(record->mfsink));
/// set to playing
if (!gst_element_sync_state_with_parent (GST_ELEMENT (record->mfsink)))
{
g_error ("Failed to go into PLAYING state");
return -4;
}
else
{
g_print("Splitmux set to playing \n);
}
g_print("thread Live: ref count (2) of splitmuxsink is %d \n", GST_OBJECT_REFCOUNT(record->mfsink));结果:
ref count of (1) splitmuxsink is 1
Splitmux set to playing.
ref count of (2) splitmuxsink is 4 在其他地方,如果我们调用gst_object_unref()函数,它只会取消引用1的引用计数器。
与其他一些功能类似,gst_element_set_state和gst_element_request_pad将分别增加3和2的参考计数。
我试图在动态管道中“重新创建/刷新”一个对象,这样每次开始/停止的迭代都会创建/更新一个对象(好,这将创建开销),但是删除一个对象似乎是不可能的。
还是有可能?谢谢你的帮忙
问候
发布于 2022-06-04 20:32:00
我认为这不是解决这个问题的适当办法。
您可以使用GST_OBJECT_REFCOUNT_VALUE宏对"while循环“进行迭代。
while(GST_OBJECT_REFCOUNT_VALUE(obj))
{
gst_object_unref (obj);
}https://stackoverflow.com/questions/72224147
复制相似问题