basesrc: Only set DTS to segment.start on the first buffer if subclass did not provid...
authorSebastian Dröge <sebastian@centricular.com>
Sun, 12 Apr 2015 11:13:32 +0000 (13:13 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Mon, 13 Apr 2015 07:23:02 +0000 (09:23 +0200)
Otherwise we're going to set a rather arbitrary DTS of segment.start (usually
0) for live sources, which confuses synchronization if the source started
capturing at a later time. And it's especially wrong for raw media, for which
we should not set any DTS at all.

https://bugzilla.gnome.org/show_bug.cgi?id=747731

libs/gst/base/gstbasesrc.c

index 8b819af..ecb77fb 100644 (file)
@@ -2244,7 +2244,7 @@ gst_base_src_do_sync (GstBaseSrc * basesrc, GstBuffer * buffer)
     if (!GST_CLOCK_TIME_IS_VALID (dts)) {
       if (do_timestamp) {
         dts = running_time;
-      } else {
+      } else if (!GST_CLOCK_TIME_IS_VALID (pts)) {
         if (GST_CLOCK_TIME_IS_VALID (basesrc->segment.start)) {
           dts = basesrc->segment.start;
         } else {