matroskamux: Clip maximum cluster duration to the maximum possible value
authorSebastian Dröge <sebastian@centricular.com>
Wed, 28 Feb 2018 17:19:10 +0000 (19:19 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 28 Feb 2018 17:20:23 +0000 (19:20 +0200)
Only up to timescale * G_MAXINT16 is possible as cluster duration, which
is already higher than our default value. Using higher values would
cause overflows and broken files.

Based on the investigation by Nicola Murino <nicola.murino@gmail.com>

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

gst/matroska/matroska-mux.c

index 0a05ba2..78cffe8 100644 (file)
@@ -3725,7 +3725,8 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux, GstMatroskaPad * collect_pad,
           mux->min_cluster_duration));
   is_max_duration_exceeded = (mux->max_cluster_duration > 0
       && buffer_timestamp > mux->cluster_time
-      && (buffer_timestamp - mux->cluster_time) >= mux->max_cluster_duration);
+      && (buffer_timestamp - mux->cluster_time) >=
+      MIN (G_MAXINT16 * mux->time_scale, mux->max_cluster_duration));
 
   if (mux->cluster) {
     /* start a new cluster at every keyframe, at every GstForceKeyUnit event,