flvmux: Use the last DTS for the metadata timestamp
authorJan Alexander Steffens (heftig) <jsteffens@make.tv>
Thu, 12 Dec 2019 09:59:35 +0000 (10:59 +0100)
committerJan Alexander Steffens (heftig) <jsteffens@make.tv>
Thu, 12 Dec 2019 10:09:31 +0000 (11:09 +0100)
This avoids creating a timestamp regression during a stream.

https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/merge_requests/429

gst/flv/gstflvmux.c

index 33e4e7d849454e1e2b07b552ff943aecd1eba112..8f9d64d4e2e8fbcf341cc252200e45ae138d1eee 100644 (file)
@@ -833,12 +833,21 @@ gst_flv_mux_create_metadata (GstFlvMux * mux)
   const GstTagList *tags;
   GstBuffer *script_tag, *tmp;
   GstMapInfo map;
+  guint32 dts;
   guint8 *data;
   gint i, n_tags, tags_written = 0;
 
   tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (mux));
 
-  GST_DEBUG_OBJECT (mux, "tags = %" GST_PTR_FORMAT, tags);
+  dts = mux->last_dts;
+
+  /* Timestamp must start at zero */
+  if (GST_CLOCK_STIME_IS_VALID (mux->first_timestamp)) {
+    dts -= mux->first_timestamp / GST_MSECOND;
+  }
+
+  GST_DEBUG_OBJECT (mux, "Creating metadata, dts %i, tags = %" GST_PTR_FORMAT,
+      dts, tags);
 
   /* FIXME perhaps some bytewriter'ing here ... */
 
@@ -852,7 +861,8 @@ gst_flv_mux_create_metadata (GstFlvMux * mux)
   data[3] = 0;
 
   /* Timestamp */
-  data[4] = data[5] = data[6] = data[7] = 0;
+  GST_WRITE_UINT24_BE (data + 4, dts);
+  data[7] = (((guint) dts) >> 24) & 0xff;
 
   /* Stream ID */
   data[8] = data[9] = data[10] = 0;