rtpvrawdepay: fix major memory leak and performance issue
authorTim-Philipp Müller <tim@centricular.com>
Thu, 7 Jan 2016 20:27:29 +0000 (20:27 +0000)
committerTim-Philipp Müller <tim@centricular.com>
Fri, 8 Jan 2016 16:40:28 +0000 (16:40 +0000)
We call gst_rtp_buffer_get_payload() which creates a sub-buffer
of each input buffer, just to copy over metas, and then leak it.

https://bugzilla.gnome.org/show_bug.cgi?id=760289

gst/rtp/gstrtpvrawdepay.c

index 051e312..b5e6dfd 100644 (file)
@@ -330,7 +330,7 @@ gst_rtp_vraw_depay_process_packet (GstRTPBaseDepayload * depayload,
   gint width, height, xinc, yinc;
   GstVideoFrame *frame;
   gboolean marker;
-  GstBuffer *buf, *outbuf = NULL;
+  GstBuffer *outbuf = NULL;
 
   rtpvrawdepay = GST_RTP_VRAW_DEPAY (depayload);
 
@@ -398,7 +398,6 @@ gst_rtp_vraw_depay_process_packet (GstRTPBaseDepayload * depayload,
 
   payload = gst_rtp_buffer_get_payload (rtp);
   payload_len = gst_rtp_buffer_get_payload_len (rtp);
-  buf = gst_rtp_buffer_get_payload_buffer (rtp);
 
   if (payload_len < 3)
     goto short_packet;
@@ -410,8 +409,8 @@ gst_rtp_vraw_depay_process_packet (GstRTPBaseDepayload * depayload,
   /* remember header position */
   headers = payload;
 
-  gst_rtp_copy_meta (GST_ELEMENT_CAST (rtpvrawdepay), frame->buffer, buf,
-      g_quark_from_static_string (GST_META_TAG_VIDEO_STR));
+  gst_rtp_copy_meta (GST_ELEMENT_CAST (rtpvrawdepay), frame->buffer,
+      rtp->buffer, g_quark_from_static_string (GST_META_TAG_VIDEO_STR));
 
   /* find data start */
   do {