From 556ce36ce43c429d8df4032057fe9bcbbb2b69a9 Mon Sep 17 00:00:00 2001 From: Jakub Adam Date: Mon, 24 May 2021 19:11:51 +0200 Subject: [PATCH] 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: --- gst-libs/gst/rtp/gstrtpbasepayload.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/gst-libs/gst/rtp/gstrtpbasepayload.c b/gst-libs/gst/rtp/gstrtpbasepayload.c index 21012123ba..d092fc75e6 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);