From 5686512b77b1abee93148f1d6c0d79c8a8031076 Mon Sep 17 00:00:00 2001 From: Matej Knopp Date: Sat, 23 Mar 2013 05:22:23 +0100 Subject: [PATCH] qtmux: use timestamp delta as duration if possible https://bugzilla.gnome.org/show_bug.cgi?id=696437 --- gst/isomp4/gstqtmux.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c index 5e4bdea0e7..fa9ac9edb4 100644 --- a/gst/isomp4/gstqtmux.c +++ b/gst/isomp4/gstqtmux.c @@ -2178,7 +2178,18 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf) GST_BUFFER_DTS (buf) = GST_BUFFER_DTS (last_buf); } - duration = GST_BUFFER_DURATION (last_buf); + /* duration actually means time delta between samples, so we calculate + * the duration based on the difference in DTS or PTS, falling back + * to DURATION if the other two don't exist, such as with the last + * sample before EOS. */ + if (last_buf && buf && GST_BUFFER_DTS_IS_VALID (buf) + && GST_BUFFER_DTS_IS_VALID (last_buf)) + duration = GST_BUFFER_DTS (buf) - GST_BUFFER_DTS (last_buf); + else if (last_buf && buf && GST_BUFFER_PTS_IS_VALID (buf) + && GST_BUFFER_PTS_IS_VALID (last_buf)) + duration = GST_BUFFER_PTS (buf) - GST_BUFFER_PTS (last_buf); + else + duration = GST_BUFFER_DURATION (last_buf); /* for computing the avg bitrate */ if (G_LIKELY (last_buf)) {