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