summaryrefslogtreecommitdiffstats
path: root/gst/matroska/ebml-read.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/matroska/ebml-read.c')
-rw-r--r--gst/matroska/ebml-read.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gst/matroska/ebml-read.c b/gst/matroska/ebml-read.c
index fd4a4899..e9dbe504 100644
--- a/gst/matroska/ebml-read.c
+++ b/gst/matroska/ebml-read.c
@@ -487,7 +487,6 @@ gst_ebml_read_sint (GstEbmlRead * ebml, guint32 * id, gint64 * num)
if (!gst_ebml_read_buffer (ebml, id, &buf))
return FALSE;
- data = GST_BUFFER_DATA (buf);
size = GST_BUFFER_SIZE (buf);
if (size < 1 || size > 8) {
GST_ELEMENT_ERROR (ebml, STREAM, DEMUX, (NULL),
@@ -496,10 +495,16 @@ gst_ebml_read_sint (GstEbmlRead * ebml, guint32 * id, gint64 * num)
gst_buffer_unref (buf);
return FALSE;
}
+
+ buf = gst_buffer_make_writable (buf);
+
+ data = GST_BUFFER_DATA (buf);
+
if (data[0] & 0x80) {
negative = 1;
data[0] &= ~0x80;
}
+
*num = 0;
while (n < size) {
*num = (*num << 8) | data[n++];