diff options
author | Jakub Adam <jakub.adam@ktknet.cz> | 2021-05-24 19:11:51 +0200 |
---|---|---|
committer | Jakub Adam <jakub.adam@collabora.com> | 2021-06-28 19:28:41 +0200 |
commit | 556ce36ce43c429d8df4032057fe9bcbbb2b69a9 (patch) | |
tree | 6b2de7c42637c099bd568ab3b5f14db2b930e5ab | |
parent | d294d7da36ac3625ffdb5983958c208d9610805e (diff) | |
download | gstreamer-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.c | 14 |
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); |