mpegpsdemux: Ignore DTS if PTS < DTS
authorSeungha Yang <seungha@centricular.com>
Thu, 29 Dec 2022 15:49:27 +0000 (00:49 +0900)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Sat, 28 Jan 2023 15:20:44 +0000 (15:20 +0000)
It's possibly timestamp rollover case. But PTS < DTS is already
invalid case anyway.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3836>

subprojects/gst-plugins-bad/gst/mpegdemux/gstmpegdemux.c

index bfbe0d9..9448e29 100644 (file)
@@ -712,6 +712,16 @@ gst_ps_demux_send_data (GstPsDemux * demux, GstPsStream * stream,
 
   gst_ps_demux_send_segment (demux, stream, pts);
 
+  /* Ignores DTS if PTS < DTS. Maybe additional sanity checking is possible
+   * by comparing 33bits timestap rollover case, but PTS < DTS is already
+   * invalid case */
+  if (GST_CLOCK_TIME_IS_VALID (pts) && GST_CLOCK_TIME_IS_VALID (dts) &&
+      dts > pts) {
+    GST_WARNING_OBJECT (demux, "PTS (%" GST_TIME_FORMAT ") < DTS (%"
+        GST_TIME_FORMAT ")", GST_TIME_ARGS (pts), GST_TIME_ARGS (dts));
+    dts = GST_CLOCK_TIME_NONE;
+  }
+
   /* OK, sent new segment now prepare the buffer for sending */
   GST_BUFFER_PTS (buf) = pts;
   GST_BUFFER_DTS (buf) = dts;