From 5f9d9e22431636de4c218cd0f0fbf5c4c7332f9c Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Wed, 1 Apr 2009 17:23:33 -0700 Subject: [PATCH] rtpvorbispay: in packed headers, properly flag multibyte lengths. In the sequence of header lengths, for headers >127 bytes, we use multiple bytes to encode the length. Bytes other than the last must have the top (flag) bit set. --- gst/rtp/gstrtpvorbispay.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gst/rtp/gstrtpvorbispay.c b/gst/rtp/gstrtpvorbispay.c index 4e3820e66a..dcf282a500 100644 --- a/gst/rtp/gstrtpvorbispay.c +++ b/gst/rtp/gstrtpvorbispay.c @@ -338,6 +338,7 @@ gst_rtp_vorbis_pay_finish_headers (GstBaseRTPPayload * basepayload) for (walk = rtpvorbispay->headers; walk; walk = g_list_next (walk)) { GstBuffer *buf = GST_BUFFER_CAST (walk->data); guint bsize, size, temp; + guint flag; /* only need to store the length when it's not the last header */ if (!g_list_next (walk)) @@ -355,10 +356,12 @@ gst_rtp_vorbis_pay_finish_headers (GstBaseRTPPayload * basepayload) bsize = GST_BUFFER_SIZE (buf); /* write the size backwards */ + flag = 0; while (size) { size--; - data[size] = bsize & 0x7f; + data[size] = (bsize & 0x7f) | flag; bsize >>= 7; + flag = 0x80; /* Flag bit on all bytes of the length except the last */ } data += temp; }