summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Adam <jakub.adam@ktknet.cz>2021-05-24 19:11:51 +0200
committerJakub Adam <jakub.adam@collabora.com>2021-06-28 19:28:41 +0200
commit556ce36ce43c429d8df4032057fe9bcbbb2b69a9 (patch)
tree6b2de7c42637c099bd568ab3b5f14db2b930e5ab
parentd294d7da36ac3625ffdb5983958c208d9610805e (diff)
downloadgstreamer-plugins-base-556ce36ce43c429d8df4032057fe9bcbbb2b69a9.tar.gz
rtpbasepayload: don't write empty extension header
When some header extensions are present but none decides to write any data to the currently processed RTP buffer, remove the extension data section. Resulting RTP buffer wasn't formatted correctly. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1173>
-rw-r--r--gst-libs/gst/rtp/gstrtpbasepayload.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/gst-libs/gst/rtp/gstrtpbasepayload.c b/gst-libs/gst/rtp/gstrtpbasepayload.c
index 21012123b..d092fc75e 100644
--- a/gst-libs/gst/rtp/gstrtpbasepayload.c
+++ b/gst-libs/gst/rtp/gstrtpbasepayload.c
@@ -1764,13 +1764,17 @@ set_headers (GstBuffer ** buffer, guint idx, gpointer user_data)
g_ptr_array_foreach (data->payload->priv->header_exts,
(GFunc) write_header_extension, &hdrext);
- wordlen = hdrext.written_size / 4 + ((hdrext.written_size % 4) ? 1 : 0);
+ if (hdrext.written_size > 0) {
+ wordlen = hdrext.written_size / 4 + ((hdrext.written_size % 4) ? 1 : 0);
- /* zero-fill the hdrext padding bytes */
- memset (&hdrext.data[hdrext.written_size], 0,
- wordlen * 4 - hdrext.written_size);
+ /* zero-fill the hdrext padding bytes */
+ memset (&hdrext.data[hdrext.written_size], 0,
+ wordlen * 4 - hdrext.written_size);
- gst_rtp_buffer_set_extension_data (&rtp, bit_pattern, wordlen);
+ gst_rtp_buffer_set_extension_data (&rtp, bit_pattern, wordlen);
+ } else {
+ gst_rtp_buffer_remove_extension_data (&rtp);
+ }
}
GST_OBJECT_UNLOCK (data->payload);
gst_rtp_buffer_unmap (&rtp);