audiodecoder: don't make negative timestamp
authorWim Taymans <wim.taymans@collabora.co.uk>
Sun, 31 Mar 2013 11:46:30 +0000 (13:46 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Sun, 31 Mar 2013 11:46:30 +0000 (13:46 +0200)
Clamp timestamp interpollation to 0 to avoid going negative. This should not
happen, really, but until the interpolation is improved this seems better.

gst-libs/gst/audio/gstaudiodecoder.c

index 9901d0c..e8908a1 100644 (file)
@@ -1488,13 +1488,20 @@ gst_audio_decoder_flush_decode (GstAudioDecoder * dec)
   timestamp = GST_CLOCK_TIME_NONE;
   while (priv->queued) {
     GstBuffer *buf = GST_BUFFER_CAST (priv->queued->data);
+    GstClockTime duration;
+
+    duration = GST_BUFFER_DURATION (buf);
 
     /* duration should always be valid for raw audio */
-    g_assert (GST_BUFFER_DURATION_IS_VALID (buf));
+    g_assert (GST_CLOCK_TIME_IS_VALID (duration));
 
     /* interpolate (backward) if needed */
-    if (G_LIKELY (timestamp != -1))
-      timestamp -= GST_BUFFER_DURATION (buf);
+    if (G_LIKELY (timestamp != -1)) {
+      if (timestamp > duration)
+        timestamp -= duration;
+      else
+        timestamp = 0;
+    }
 
     if (!GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
       GST_LOG_OBJECT (dec, "applying reverse interpolated ts %"