From 76d71da1c4a90730a4dfa5a595bb48e1cdd3fa8f Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sun, 31 Mar 2013 13:46:30 +0200 Subject: [PATCH] audiodecoder: don't make negative timestamp 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 | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c index 9901d0c4f6..e8908a1dc6 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.c +++ b/gst-libs/gst/audio/gstaudiodecoder.c @@ -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 %"