matroskamux: correctly handle negative relative timestamps
authorMark Nauwelaerts <mnauw@users.sourceforge.net>
Sat, 23 Nov 2013 11:15:40 +0000 (12:15 +0100)
committerMark Nauwelaerts <mnauw@users.sourceforge.net>
Sat, 23 Nov 2013 11:25:05 +0000 (12:25 +0100)
... rather than scaling these as unsigned.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=712744

Based on patch by Krzysztof Kotlenga <pocek@users.sf.net>

gst/matroska/matroska-mux.c

index e8b64f6..e1cf9ea 100644 (file)
@@ -3381,12 +3381,15 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux, GstMatroskaPad * collect_pad,
   if (relative_timestamp64 >= 0) {
     /* round the timestamp */
     relative_timestamp64 += gst_util_uint64_scale (mux->time_scale, 1, 2);
+    relative_timestamp = gst_util_uint64_scale (relative_timestamp64, 1,
+        mux->time_scale);
   } else {
     /* round the timestamp */
     relative_timestamp64 -= gst_util_uint64_scale (mux->time_scale, 1, 2);
+    relative_timestamp =
+        -((gint16) gst_util_uint64_scale (-relative_timestamp64, 1,
+            mux->time_scale));
   }
-  relative_timestamp = gst_util_uint64_scale (relative_timestamp64, 1,
-      mux->time_scale);
 
   if (is_video_invisible)
     flags |= 0x08;