gstreamer的一些debug经验

Posted green-crosswalk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gstreamer的一些debug经验相关的知识,希望对你有一定的参考价值。

gstreamer使用不当,很容易引起内存泄漏。以下是注意事项:

1、gst_element_get_name

使用g_free释放name,并设为null

2、g_io_channel_read_line

g_free释放line,并设为null

3、gst_structure_to_string/gst_caps_to_string

g_free释放返回值,并设为null

4、g_filename_to_uri

g_free释放返回值,并设为null

5、gst_pad_get_name/gst_omx_video_find_nearest_frame

不使用时,需要做unref

6、gst_bus_add_watch

返回的watchid占用source资源,有两种释放方式:

1)callback函数返回FALSE,让gstreamer自动释放

2)主动调用g_source_remove释放;根据经验,只有当handle message函数收到pipeline切换到NULL state后,调用g_source_remove释放资源才有效

7、g_timeout_add

timer资源通常采用callback函数返回FALSE,让gst自动释放

8、gst_pad_get_peer

返回的object,带有ref,因此需要gst_object_unref释放

9、gst_buffer_map

此函数会对buffer做ref,因此需要调用gst_buffer_unmap

10、子类重载父类的dispose,因此在子类调用结束时调用父类的dispose函数,G_OBJECT_CLASS(parent_class)->dispose(object)

11、g_object_get获得GstElement类型变量时,会对返回的element做ref操作,因此elment不再使用时,调用gst_object_unref

以上是关于gstreamer的一些debug经验的主要内容,如果未能解决你的问题,请参考以下文章

GStreamer基础教程13 - 调试Pipeline

在 VC6 上构建 GStreamer 时找不到文件

工作中的一些经验小结

Gstreamer:为啥在显示一些过滤器之前我需要一个视频转换?

前端调试的一些经验教训

从 python 中的 opencv 写入 Gstreamer 管道