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

posted @ 2018-02-04 20:04  green_crosswalk  阅读(1053)  评论(0编辑  收藏  举报