summaryrefslogtreecommitdiff
path: root/gst/rtpmanager/rtpjitterbuffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/rtpmanager/rtpjitterbuffer.c')
-rw-r--r--gst/rtpmanager/rtpjitterbuffer.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/gst/rtpmanager/rtpjitterbuffer.c b/gst/rtpmanager/rtpjitterbuffer.c
index f694850d9..5f3b18cdb 100644
--- a/gst/rtpmanager/rtpjitterbuffer.c
+++ b/gst/rtpmanager/rtpjitterbuffer.c
@@ -115,7 +115,10 @@ rtp_jitter_buffer_finalize (GObject * object)
/* We cannot use g_queue_clear() as it would pass the wrong size to
* g_slice_free() which may lead to data corruption in the slice allocator.
*/
- rtp_jitter_buffer_flush (jbuf, NULL, NULL);
+ if (jbuf->item_free_func != NULL)
+ rtp_jitter_buffer_flush (jbuf, jbuf->item_free_func, NULL);
+ else if (jbuf->packets.head != NULL)
+ g_warning ("Leaking RTP jitterbuffer items!");
g_mutex_clear (&jbuf->clock_lock);
@@ -139,6 +142,15 @@ rtp_jitter_buffer_new (void)
return jbuf;
}
+void
+rtp_jitter_buffer_set_item_free_func (RTPJitterBuffer * jbuf, GFunc free_func)
+{
+ g_return_if_fail (jbuf != NULL);
+ g_return_if_fail (free_func != NULL);
+
+ jbuf->item_free_func = free_func;
+}
+
/**
* rtp_jitter_buffer_get_mode:
* @jbuf: an #RTPJitterBuffer