rtxsend: fix wrong memory layout assumption
authorMathieu Duponchelle <mathieu@centricular.com>
Tue, 3 Apr 2018 23:48:44 +0000 (01:48 +0200)
committerMathieu Duponchelle <mathieu@centricular.com>
Fri, 6 Apr 2018 18:25:04 +0000 (20:25 +0200)
The code responsible for creating retransmitted buffers
assumed the stored buffer had been created with
rtp_buffer_new_allocate when copying the extension data,
which isn't necessarily the case, for example when
the rtp buffers come from a udpsrc.

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

gst/rtpmanager/gstrtprtxsend.c

index 4329d84..58892f3 100644 (file)
@@ -400,7 +400,10 @@ gst_rtp_rtx_buffer_new (GstRtpRtxSend * rtx, GstBuffer * buffer)
 
   /* copy extension if any */
   if (rtp.size[1]) {
-    mem = gst_memory_copy (rtp.map[1].memory, 0, rtp.size[1]);
+    mem = gst_allocator_alloc (NULL, rtp.size[1], NULL);
+    gst_memory_map (mem, &map, GST_MAP_WRITE);
+    memcpy (map.data, rtp.data[1], rtp.size[1]);
+    gst_memory_unmap (mem, &map);
     gst_buffer_append_memory (new_buffer, mem);
   }