tsdemux: Always use current PTS/DTS
authorEdward Hervey <edward.hervey@collabora.co.uk>
Fri, 13 Jul 2012 14:56:11 +0000 (16:56 +0200)
committerEdward Hervey <edward.hervey@collabora.co.uk>
Tue, 14 Aug 2012 17:07:33 +0000 (19:07 +0200)
This avoids setting old PTS and/or DTS

gst/mpegtsdemux/tsdemux.c

index f7aa9d38626ff8d2982206e293cb8b5f057013f4..ebe6180790e09990c51ec9f3db4a00c0744c8ace 100644 (file)
@@ -1139,6 +1139,11 @@ gst_ts_demux_record_pts (GstTSDemux * demux, TSDemuxStream * stream,
 {
   MpegTSBaseStream *bs = (MpegTSBaseStream *) stream;
 
+  if (pts == -1) {
+    stream->pts = GST_CLOCK_TIME_NONE;
+    return;
+  }
+
   GST_LOG ("pid 0x%04x pts:%" G_GUINT64_FORMAT " at offset %"
       G_GUINT64_FORMAT, bs->pid, pts, offset);
 
@@ -1185,6 +1190,11 @@ gst_ts_demux_record_dts (GstTSDemux * demux, TSDemuxStream * stream,
 {
   MpegTSBaseStream *bs = (MpegTSBaseStream *) stream;
 
+  if (dts == -1) {
+    stream->dts = GST_CLOCK_TIME_NONE;
+    return;
+  }
+
   GST_LOG ("pid 0x%04x dts:%" G_GUINT64_FORMAT " at offset %"
       G_GUINT64_FORMAT, bs->pid, dts, offset);
 
@@ -1244,18 +1254,12 @@ gst_ts_demux_parse_pes_header (GstTSDemux * demux, TSDemuxStream * stream,
     goto discont;
   }
 
-  if (header.DTS != -1)
-    gst_ts_demux_record_dts (demux, stream, header.DTS, bufferoffset);
-
-  if (header.PTS != -1) {
-    gst_ts_demux_record_pts (demux, stream, header.PTS, bufferoffset);
+  gst_ts_demux_record_dts (demux, stream, header.DTS, bufferoffset);
+  gst_ts_demux_record_pts (demux, stream, header.PTS, bufferoffset);
 
-    GST_DEBUG_OBJECT (base,
-        "stream PTS %" GST_TIME_FORMAT " DTS %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (stream->pts),
-        GST_TIME_ARGS (MPEGTIME_TO_GSTTIME (header.DTS)));
-
-  }
+  GST_DEBUG_OBJECT (base,
+      "stream PTS %" GST_TIME_FORMAT " DTS %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (stream->pts), GST_TIME_ARGS (stream->dts));
 
   /* Remove PES headers */
   GST_DEBUG ("Moving data forward by %d bytes (packet_size:%d, have:%d)",
@@ -1500,8 +1504,9 @@ gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream)
         demux->program->pcr_pid);
 
   GST_DEBUG_OBJECT (stream->pad,
-      "Pushing buffer with timestamp: %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
+      "Pushing buffer with PTS: %" GST_TIME_FORMAT " , DTS: %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (GST_BUFFER_PTS (buffer)),
+      GST_TIME_ARGS (GST_BUFFER_DTS (buffer)));
 
   res = gst_pad_push (stream->pad, buffer);
   GST_DEBUG_OBJECT (stream->pad, "Returned %s", gst_flow_get_name (res));