rtpjitterbuffer: Calculate DTS from the clock if we had none for the first packet...
authorSebastian Dröge <sebastian@centricular.com>
Wed, 8 Jul 2015 16:59:13 +0000 (19:59 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 8 Jul 2015 20:19:52 +0000 (23:19 +0300)
https://bugzilla.gnome.org/show_bug.cgi?id=749536

gst/rtpmanager/gstrtpjitterbuffer.c

index 9cf90f5..673a5ad 100644 (file)
@@ -2586,6 +2586,28 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent,
     }
   } else {
     GST_DEBUG_OBJECT (jitterbuffer, "First buffer #%d", seqnum);
+
+    /* If we have no DTS here, i.e. no capture time, get one from the
+     * clock now to have something to calculate with in the future.
+     */
+    if (dts == GST_CLOCK_TIME_NONE) {
+      GstClock *clock = gst_element_get_clock (GST_ELEMENT_CAST (jitterbuffer));
+
+      if (clock) {
+        GstClockTime base_time =
+            gst_element_get_base_time (GST_ELEMENT_CAST (jitterbuffer));
+        GstClockTime clock_time = gst_clock_get_time (clock);
+
+        if (clock_time > base_time)
+          dts = clock_time - base_time;
+        else
+          dts = 0;
+        pts = dts;
+
+        gst_object_unref (clock);
+      }
+    }
+
     /* we don't know what the next_in_seqnum should be, wait for the last
      * possible moment to push this buffer, maybe we get an earlier seqnum
      * while we wait */