Start cluster at every keyframe or when we would overflow the previous
cluster's relative timestamp field. This would avoid as much as possible
starting clusters at non-keyframes.
/* reset timers */
mux->time_scale = GST_MSECOND;
+ mux->max_cluster_duration = G_MAXINT16 * mux->time_scale;
mux->duration = 0;
/* reset cluster */
}
if (mux->cluster) {
- /* start a new cluster every two seconds or at keyframe */
- if (mux->cluster_time + GST_SECOND * 2 < GST_BUFFER_TIMESTAMP (buf)
+ /* start a new cluster at every keyframe or when we may be reaching the
+ * limit of the relative timestamp */
+ if (mux->cluster_time +
+ mux->max_cluster_duration < GST_BUFFER_TIMESTAMP (buf)
|| is_video_keyframe) {
if (!mux->streamable)
gst_ebml_write_master_finish (ebml, mux->cluster);
/* timescale in the file */
guint64 time_scale;
+ /* based on timescale, limit of nanoseconds you can have in a cluster */
+ guint64 max_cluster_duration;
/* length, position (time, ns) */
guint64 duration;