From 8270cbacb49a3f978d6d35f1246773142a3028f5 Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Wed, 4 Apr 2018 01:48:44 +0200 Subject: [PATCH] rtxsend: fix wrong memory layout assumption 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 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gst/rtpmanager/gstrtprtxsend.c b/gst/rtpmanager/gstrtprtxsend.c index 4329d84968..58892f3cf8 100644 --- a/gst/rtpmanager/gstrtprtxsend.c +++ b/gst/rtpmanager/gstrtprtxsend.c @@ -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); }