From f9f1a03653e67e446e5ee844ff03ddcb290c3a73 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Sat, 1 Jul 2017 18:59:14 +0200 Subject: [PATCH] qtmux: robustify time tracking for sparse subtitle stream --- gst/isomp4/gstqtmux.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c index 13b28a033d..7a81530c21 100644 --- a/gst/isomp4/gstqtmux.c +++ b/gst/isomp4/gstqtmux.c @@ -4226,8 +4226,8 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf) } else { nsamples = 1; sample_size = buffer_size; - if ((buf && GST_BUFFER_DTS_IS_VALID (buf)) - || GST_BUFFER_DTS_IS_VALID (last_buf)) { + if (!pad->sparse && ((buf && GST_BUFFER_DTS_IS_VALID (buf)) + || GST_BUFFER_DTS_IS_VALID (last_buf))) { gint64 scaled_dts; if (buf && GST_BUFFER_DTS_IS_VALID (buf)) { pad->last_dts = GST_BUFFER_DTS (buf); @@ -4355,8 +4355,10 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf) empty_buf = pad->create_empty_buffer (pad, empty_duration); - empty_duration_scaled = gst_util_uint64_scale_round (empty_duration, - atom_trak_get_timescale (pad->trak), GST_SECOND); + pad->last_dts = GST_BUFFER_PTS (buf); + empty_duration_scaled = gst_util_uint64_scale_round (pad->last_dts, + atom_trak_get_timescale (pad->trak), GST_SECOND) + - (last_dts + scaled_duration); empty_size = gst_buffer_get_size (empty_buf); gst_qt_mux_register_buffer_in_chunk (qtmux, pad, empty_size,