首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gstreamer: Gstreamer如何删除它的对象

Gstreamer: Gstreamer如何删除它的对象
EN

Stack Overflow用户
提问于 2022-05-13 03:27:54
回答 1查看 113关注 0票数 1

我对上面的题目和它的问题很困惑。我从教程和网页API中了解到要删除对象,

  • 您应该使用gst_object_unref(obj),这将使引用值计数减少1。
  • 当对象的引用计数达到零时,将自动删除对象

然而,似乎有一些函数会增加对象的内部引用计数,如果我错了,请纠正我。

例如,我编写了一个函数片段,用于将新连接的元素与管道同步。参考计数从1增加到4。

代码语言:javascript
复制
//// 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));

结果:

代码语言:javascript
复制
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的参考计数。

我试图在动态管道中“重新创建/刷新”一个对象,这样每次开始/停止的迭代都会创建/更新一个对象(好,这将创建开销),但是删除一个对象似乎是不可能的。

还是有可能?谢谢你的帮忙

问候

EN

回答 1

Stack Overflow用户

发布于 2022-06-04 20:32:00

我认为这不是解决这个问题的适当办法。

您可以使用GST_OBJECT_REFCOUNT_VALUE宏对"while循环“进行迭代。

代码语言:javascript
复制
while(GST_OBJECT_REFCOUNT_VALUE(obj))
{
    gst_object_unref (obj);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72224147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档