summaryrefslogtreecommitdiffstats
path: root/gst/rtp/gstrtpvorbispay.c
diff options
context:
space:
mode:
authorMichael Smith <msmith@songbirdnest.com>2009-04-01 17:23:33 -0700
committerMichael Smith <msmith@songbirdnest.com>2009-04-01 17:23:33 -0700
commit5f9d9e22431636de4c218cd0f0fbf5c4c7332f9c (patch)
tree7749d8c1362c6c343ef06392956c965bd7610fdc /gst/rtp/gstrtpvorbispay.c
parent9b7c9208c3e4fac08c405e39c23577de943140d0 (diff)
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.
Diffstat (limited to 'gst/rtp/gstrtpvorbispay.c')
-rw-r--r--gst/rtp/gstrtpvorbispay.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gst/rtp/gstrtpvorbispay.c b/gst/rtp/gstrtpvorbispay.c
index 4e3820e6..dcf282a5 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;
}