diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
index e0158ce..843e5f2 100644
--- a/libs/gst/base/gstbaseparse.c
+++ b/libs/gst/base/gstbaseparse.c
@@ -2176,6 +2176,7 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer)
   const guint8 *data;
   guint old_min_size = 0, min_size, av;
   GstClockTime timestamp;
+  guint64 dist;
   GstBaseParseFrame *frame;
 
   parse = GST_BASE_PARSE (GST_OBJECT_PARENT (pad));
@@ -2334,12 +2335,17 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer)
 
     /* move along with upstream timestamp (if any),
      * but interpolate in between */
-    timestamp = gst_adapter_prev_timestamp (parse->priv->adapter, NULL);
-    if (GST_CLOCK_TIME_IS_VALID (timestamp) &&
-        (parse->priv->prev_ts != timestamp)) {
-      parse->priv->prev_ts = parse->priv->next_ts = timestamp;
+    timestamp = gst_adapter_prev_timestamp (parse->priv->adapter, &dist);
+    
+    if (GST_CLOCK_TIME_IS_VALID(timestamp))
+    {
+      timestamp = timestamp + gst_util_uint64_scale(parse->priv->frame_duration, dist, fsize);
+      if (parse->priv->prev_ts != timestamp)
+      {
+        parse->priv->prev_ts = parse->priv->next_ts = timestamp;  
+      }
     }
-
+  
     /* FIXME: Would it be more efficient to make a subbuffer instead? */
     outbuf = gst_adapter_take_buffer (parse->priv->adapter, fsize);
     outbuf = gst_buffer_make_metadata_writable (outbuf);
