plugins/elements/gstidentity.c: Print additional debug info when the stream isn't...
authorTim-Philipp Müller <tim@centricular.net>
Sat, 16 Dec 2006 19:33:26 +0000 (19:33 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Sat, 16 Dec 2006 19:33:26 +0000 (19:33 +0000)
Original commit message from CVS:
* plugins/elements/gstidentity.c: (gst_identity_check_perfect):
Print additional debug info when the stream isn't perfectly
timestamped; don't try to use invalid durations.

ChangeLog
plugins/elements/gstidentity.c

index dbf1f2a..17b27a9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2006-12-16  Tim-Philipp Müller  <tim at centricular dot net>
 
+       * plugins/elements/gstidentity.c: (gst_identity_check_perfect):
+         Print additional debug info when the stream isn't perfectly
+         timestamped; don't try to use invalid durations.
+
+2006-12-16  Tim-Philipp Müller  <tim at centricular dot net>
+
        * docs/design/Makefile.am:
          Dist new design docs.
 
index 8960eb9..04992ac 100644 (file)
@@ -318,15 +318,22 @@ gst_identity_check_perfect (GstIdentity * identity, GstBuffer * buf)
   /* invalid timestamp drops us out of check.  FIXME: maybe warn ? */
   if (timestamp != GST_CLOCK_TIME_NONE) {
     /* check if we had a previous buffer to compare to */
-    if (identity->prev_timestamp != GST_CLOCK_TIME_NONE) {
-      guint64 offset;
-
-      if (identity->prev_timestamp + identity->prev_duration != timestamp) {
+    if (identity->prev_timestamp != GST_CLOCK_TIME_NONE &&
+        identity->prev_duration != GST_CLOCK_TIME_NONE) {
+      guint64 offset, t_expected;
+      gint64 dt;
+
+      t_expected = identity->prev_timestamp + identity->prev_duration;
+      dt = timestamp - t_expected;
+      if (dt != 0) {
         GST_WARNING_OBJECT (identity,
             "Buffer not time-contiguous with previous one: " "prev ts %"
             GST_TIME_FORMAT ", prev dur %" GST_TIME_FORMAT ", new ts %"
-            GST_TIME_FORMAT, GST_TIME_ARGS (identity->prev_timestamp),
-            GST_TIME_ARGS (identity->prev_duration), GST_TIME_ARGS (timestamp));
+            GST_TIME_FORMAT " (expected ts %" GST_TIME_FORMAT ", delta=%c%"
+            GST_TIME_FORMAT ")", GST_TIME_ARGS (identity->prev_timestamp),
+            GST_TIME_ARGS (identity->prev_duration), GST_TIME_ARGS (timestamp),
+            GST_TIME_ARGS (t_expected), (dt < 0) ? '-' : '+',
+            GST_TIME_ARGS ((dt < 0) ? (GstClockTime) (-dt) : dt));
       }
 
       offset = GST_BUFFER_OFFSET (buf);
@@ -336,7 +343,11 @@ gst_identity_check_perfect (GstIdentity * identity, GstBuffer * buf)
             "prev offset_end %" G_GINT64_FORMAT ", new offset %"
             G_GINT64_FORMAT, identity->prev_offset_end, offset);
       }
+    } else {
+      GST_DEBUG_OBJECT (identity, "can't check time-contiguity, no timestamp "
+          "and/or duration were set on previous buffer");
     }
+
     /* update prev values */
     identity->prev_timestamp = timestamp;
     identity->prev_duration = GST_BUFFER_DURATION (buf);