diff --git a/sys/decklink/gstdecklink.cpp b/sys/decklink/gstdecklink.cpp
index 184f124..2a79741 100644
--- a/sys/decklink/gstdecklink.cpp
+++ b/sys/decklink/gstdecklink.cpp
@@ -617,7 +617,6 @@
 {
   GstSystemClock clock;
 
-  GstDecklinkInput *input;
   GstDecklinkOutput *output;
 };
 
@@ -722,99 +721,108 @@
     GstElement *videosrc = NULL, *audiosrc = NULL;
     void (*got_video_frame) (GstElement * videosrc,
         IDeckLinkVideoInputFrame * frame, GstDecklinkModeEnum mode,
-        GstClockTime capture_time, GstClockTime capture_duration, guint hours,
-        guint minutes, guint seconds, guint frames, BMDTimecodeFlags bflags) =
-        NULL;
+        GstClockTime capture_time, GstClockTime stream_time,
+        GstClockTime stream_duration, guint hours, guint minutes, guint seconds,
+        guint frames, BMDTimecodeFlags bflags) = NULL;
     void (*got_audio_packet) (GstElement * videosrc,
         IDeckLinkAudioInputPacket * packet, GstClockTime capture_time,
-        gboolean discont) = NULL;
+        GstClockTime packet_time) = NULL;
     GstDecklinkModeEnum mode;
-    BMDTimeValue capture_time = GST_CLOCK_TIME_NONE, capture_duration =
-        GST_CLOCK_TIME_NONE;
+    GstClockTime capture_time = GST_CLOCK_TIME_NONE;
+    GstClockTime base_time;
+    GstClock *clock = NULL;
     HRESULT res;
-    IDeckLinkTimecode *dtc;
-    uint8_t hours, minutes, seconds, frames;
-    BMDTimecodeFlags bflags;
-
-    hours = minutes = seconds = frames = bflags = 0;
-    if (video_frame == NULL)
-      goto no_video_frame;
-
-    res =
-        video_frame->GetHardwareReferenceTimestamp (GST_SECOND, &capture_time,
-        &capture_duration);
-    if (res != S_OK) {
-      GST_ERROR ("Failed to get capture time: 0x%08x", res);
-      capture_time = GST_CLOCK_TIME_NONE;
-      capture_duration = GST_CLOCK_TIME_NONE;
-    }
-
-    if (m_input->videosrc) {
-      /* FIXME: Avoid circularity between gstdecklink.cpp and
-       * gstdecklinkvideosrc.cpp */
-      videosrc = GST_ELEMENT_CAST (gst_object_ref (m_input->videosrc));
-      res =
-          video_frame->
-          GetTimecode (GST_DECKLINK_VIDEO_SRC (videosrc)->timecode_format,
-          &dtc);
-
-      if (res != S_OK) {
-        GST_DEBUG_OBJECT (videosrc, "Failed to get timecode: 0x%08x", res);
-        dtc = NULL;
-      } else {
-        res = dtc->GetComponents (&hours, &minutes, &seconds, &frames);
-        if (res != S_OK) {
-          GST_ERROR ("Could not get components for timecode %p: 0x%08x", dtc,
-              res);
-          hours = 0;
-          minutes = 0;
-          seconds = 0;
-          frames = 0;
-          bflags = 0;
-        } else {
-          GST_DEBUG_OBJECT (videosrc, "Got timecode %02d:%02d:%02d:%02d", hours,
-              minutes, seconds, frames);
-          bflags = dtc->GetFlags ();
-        }
-      }
-    }
 
     g_mutex_lock (&m_input->lock);
-
-    if (capture_time > (BMDTimeValue) m_input->clock_start_time)
-      capture_time -= m_input->clock_start_time;
-    else
-      capture_time = 0;
-
-    if (capture_time > (BMDTimeValue) m_input->clock_offset)
-      capture_time -= m_input->clock_offset;
-    else
-      capture_time = 0;
-
     if (m_input->videosrc) {
+      videosrc = GST_ELEMENT_CAST (gst_object_ref (m_input->videosrc));
+      clock = gst_element_get_clock (videosrc);
+      base_time = gst_element_get_base_time (videosrc);
       got_video_frame = m_input->got_video_frame;
     }
     mode = gst_decklink_get_mode_enum_from_bmd (m_input->mode->mode);
 
     if (m_input->audiosrc) {
       audiosrc = GST_ELEMENT_CAST (gst_object_ref (m_input->audiosrc));
+      if (!clock) {
+        clock = gst_element_get_clock (GST_ELEMENT_CAST (audiosrc));
+        base_time = gst_element_get_base_time (audiosrc);
+      }
       got_audio_packet = m_input->got_audio_packet;
     }
     g_mutex_unlock (&m_input->lock);
 
-    if (got_video_frame && videosrc) {
-      got_video_frame (videosrc, video_frame, mode, capture_time,
-          capture_duration, (guint8) hours, (guint8) minutes, (guint8) seconds,
-          (guint8) frames, bflags);
+    if (clock) {
+      capture_time = gst_clock_get_time (clock);
+      if (capture_time > base_time)
+        capture_time -= base_time;
+      else
+        capture_time = 0;
     }
 
-  no_video_frame:
+    if (got_video_frame && videosrc && video_frame) {
+      BMDTimeValue stream_time = GST_CLOCK_TIME_NONE;
+      BMDTimeValue stream_duration = GST_CLOCK_TIME_NONE;
+      IDeckLinkTimecode *dtc;
+      uint8_t hours, minutes, seconds, frames;
+      BMDTimecodeFlags bflags;
+
+      hours = minutes = seconds = frames = bflags = 0;
+
+      res =
+          video_frame->GetStreamTime (&stream_time, &stream_duration,
+          GST_SECOND);
+      if (res != S_OK) {
+        GST_ERROR ("Failed to get stream time: 0x%08x", res);
+        stream_time = GST_CLOCK_TIME_NONE;
+        stream_duration = GST_CLOCK_TIME_NONE;
+      }
+
+      if (m_input->videosrc) {
+        /* FIXME: Avoid circularity between gstdecklink.cpp and
+         * gstdecklinkvideosrc.cpp */
+        res =
+            video_frame->
+            GetTimecode (GST_DECKLINK_VIDEO_SRC (videosrc)->timecode_format,
+            &dtc);
+
+        if (res != S_OK) {
+          GST_DEBUG_OBJECT (videosrc, "Failed to get timecode: 0x%08x", res);
+          dtc = NULL;
+        } else {
+          res = dtc->GetComponents (&hours, &minutes, &seconds, &frames);
+          if (res != S_OK) {
+            GST_ERROR ("Could not get components for timecode %p: 0x%08x", dtc,
+                res);
+            hours = 0;
+            minutes = 0;
+            seconds = 0;
+            frames = 0;
+            bflags = 0;
+          } else {
+            GST_DEBUG_OBJECT (videosrc, "Got timecode %02d:%02d:%02d:%02d",
+                hours, minutes, seconds, frames);
+            bflags = dtc->GetFlags ();
+          }
+        }
+      }
+
+      got_video_frame (videosrc, video_frame, mode, capture_time,
+          stream_time, stream_duration, (guint8) hours, (guint8) minutes,
+          (guint8) seconds, (guint8) frames, bflags);
+    }
+
     if (got_audio_packet && audiosrc && audio_packet) {
+      BMDTimeValue packet_time = GST_CLOCK_TIME_NONE;
+
+      res = audio_packet->GetPacketTime (&packet_time, GST_SECOND);
+      if (res != S_OK) {
+        GST_ERROR ("Failed to get stream time: 0x%08x", res);
+        packet_time = GST_CLOCK_TIME_NONE;
+      }
       m_input->got_audio_packet (audiosrc, audio_packet, capture_time,
-          m_input->audio_discont);
-      m_input->audio_discont = FALSE;
+          packet_time);
     } else {
-      m_input->audio_discont = TRUE;
       if (!audio_packet)
         GST_DEBUG ("Received no audio packet at %" GST_TIME_FORMAT,
             GST_TIME_ARGS (capture_time));
@@ -822,6 +830,7 @@
 
     gst_object_replace ((GstObject **) & videosrc, NULL);
     gst_object_replace ((GstObject **) & audiosrc, NULL);
+    gst_object_replace ((GstObject **) & clock, NULL);
 
     return S_OK;
   }
@@ -919,9 +928,6 @@
           ret);
     } else {
       devices[i].input.device = decklink;
-      devices[i].input.clock = gst_decklink_clock_new ("GstDecklinkInputClock");
-      GST_DECKLINK_CLOCK_CAST (devices[i].input.clock)->input =
-          &devices[i].input;
       devices[i].input.
           input->SetCallback (new GStreamerDecklinkInputCallback (&devices[i].
               input));
@@ -1073,7 +1079,6 @@
   g_mutex_lock (&input->lock);
   if (is_audio && !input->audiosrc) {
     input->audiosrc = GST_ELEMENT_CAST (gst_object_ref (src));
-    input->audio_discont = TRUE;
     g_mutex_unlock (&input->lock);
     return input;
   } else if (!input->videosrc) {
@@ -1148,88 +1153,46 @@
   BMDTimeValue time;
   HRESULT ret;
 
-  if (self->input != NULL) {
-    g_mutex_lock (&self->input->lock);
-    start_time = self->input->clock_start_time;
-    offset = self->input->clock_offset;
-    last_time = self->input->clock_last_time;
-    time = -1;
-    if (!self->input->started) {
-      result = last_time;
-      ret = -1;
-    } else {
-      ret =
-          self->input->input->GetHardwareReferenceClock (GST_SECOND, &time,
-          NULL, NULL);
-      if (ret == S_OK && time >= 0) {
-        result = time;
-        if (start_time == GST_CLOCK_TIME_NONE)
-          start_time = self->input->clock_start_time = result;
-
-        if (result > start_time)
-          result -= start_time;
-        else
-          result = 0;
-
-        if (self->input->clock_restart) {
-          self->input->clock_offset = result - last_time;
-          offset = self->input->clock_offset;
-          self->input->clock_restart = FALSE;
-        }
-        result = MAX (last_time, result);
-        result -= offset;
-        result = MAX (last_time, result);
-      } else {
-        result = last_time;
-      }
-
-      self->input->clock_last_time = result;
-    }
-    result += self->input->clock_epoch;
-    g_mutex_unlock (&self->input->lock);
-  } else if (self->output != NULL) {
-    g_mutex_lock (&self->output->lock);
-    start_time = self->output->clock_start_time;
-    offset = self->output->clock_offset;
-    last_time = self->output->clock_last_time;
-    time = -1;
-    if (!self->output->started) {
-      result = last_time;
-      ret = -1;
-    } else {
-      ret =
-          self->output->output->GetHardwareReferenceClock (GST_SECOND, &time,
-          NULL, NULL);
-      if (ret == S_OK && time >= 0) {
-        result = time;
-
-        if (start_time == GST_CLOCK_TIME_NONE)
-          start_time = self->output->clock_start_time = result;
-
-        if (result > start_time)
-          result -= start_time;
-        else
-          result = 0;
-
-        if (self->output->clock_restart) {
-          self->output->clock_offset = result - last_time;
-          offset = self->output->clock_offset;
-          self->output->clock_restart = FALSE;
-        }
-        result = MAX (last_time, result);
-        result -= offset;
-        result = MAX (last_time, result);
-      } else {
-        result = last_time;
-      }
-
-      self->output->clock_last_time = result;
-    }
-    result += self->output->clock_epoch;
-    g_mutex_unlock (&self->output->lock);
+  g_mutex_lock (&self->output->lock);
+  start_time = self->output->clock_start_time;
+  offset = self->output->clock_offset;
+  last_time = self->output->clock_last_time;
+  time = -1;
+  if (!self->output->started) {
+    result = last_time;
+    ret = -1;
   } else {
-    g_assert_not_reached ();
+    ret =
+        self->output->output->GetHardwareReferenceClock (GST_SECOND, &time,
+        NULL, NULL);
+    if (ret == S_OK && time >= 0) {
+      result = time;
+
+      if (start_time == GST_CLOCK_TIME_NONE)
+        start_time = self->output->clock_start_time = result;
+
+      if (result > start_time)
+        result -= start_time;
+      else
+        result = 0;
+
+      if (self->output->clock_restart) {
+        self->output->clock_offset = result - last_time;
+        offset = self->output->clock_offset;
+        self->output->clock_restart = FALSE;
+      }
+      result = MAX (last_time, result);
+      result -= offset;
+      result = MAX (last_time, result);
+    } else {
+      result = last_time;
+    }
+
+    self->output->clock_last_time = result;
   }
+  result += self->output->clock_epoch;
+  g_mutex_unlock (&self->output->lock);
+
   GST_LOG_OBJECT (clock,
       "result %" GST_TIME_FORMAT " time %" GST_TIME_FORMAT " last time %"
       GST_TIME_FORMAT " offset %" GST_TIME_FORMAT " start time %"
diff --git a/sys/decklink/gstdecklink.h b/sys/decklink/gstdecklink.h
index 9f95c56..40cc917 100644
--- a/sys/decklink/gstdecklink.h
+++ b/sys/decklink/gstdecklink.h
@@ -196,25 +196,21 @@
   IDeckLinkInput *input;
   IDeckLinkConfiguration *config;
   IDeckLinkAttributes *attributes;
-  GstClock *clock;
-  GstClockTime clock_start_time, clock_offset, clock_last_time, clock_epoch;
-  gboolean started, clock_restart;
 
   /* Everything below protected by mutex */
   GMutex lock;
 
   /* Set by the video source */
-  void (*got_video_frame) (GstElement *videosrc, IDeckLinkVideoInputFrame * frame, GstDecklinkModeEnum mode, GstClockTime capture_time, GstClockTime capture_duration, guint hours, guint minutes, guint seconds, guint frames, BMDTimecodeFlags bflags);
+  void (*got_video_frame) (GstElement *videosrc, IDeckLinkVideoInputFrame * frame, GstDecklinkModeEnum mode, GstClockTime capture_time, GstClockTime stream_time, GstClockTime stream_duration, guint hours, guint minutes, guint seconds, guint frames, BMDTimecodeFlags bflags);
   /* Configured mode or NULL */
   const GstDecklinkMode *mode;
   BMDPixelFormat format;
 
   /* Set by the audio source */
-  void (*got_audio_packet) (GstElement *videosrc, IDeckLinkAudioInputPacket * packet, GstClockTime capture_time, gboolean discont);
+  void (*got_audio_packet) (GstElement *videosrc, IDeckLinkAudioInputPacket * packet, GstClockTime capture_time, GstClockTime packet_time);
 
   GstElement *audiosrc;
   gboolean audio_enabled;
-  gboolean audio_discont;
   GstElement *videosrc;
   gboolean video_enabled;
   void (*start_streams) (GstElement *videosrc);
diff --git a/sys/decklink/gstdecklinkaudiosrc.cpp b/sys/decklink/gstdecklinkaudiosrc.cpp
index b14c5d4..6f88a9b 100644
--- a/sys/decklink/gstdecklinkaudiosrc.cpp
+++ b/sys/decklink/gstdecklinkaudiosrc.cpp
@@ -57,7 +57,6 @@
 {
   IDeckLinkAudioInputPacket *packet;
   GstClockTime capture_time;
-  gboolean discont;
 } CapturePacket;
 
 static void
@@ -422,27 +421,13 @@
 static void
 gst_decklink_audio_src_got_packet (GstElement * element,
     IDeckLinkAudioInputPacket * packet, GstClockTime capture_time,
-    gboolean discont)
+    GstClockTime packet_time)
 {
   GstDecklinkAudioSrc *self = GST_DECKLINK_AUDIO_SRC_CAST (element);
-  GstDecklinkVideoSrc *videosrc = NULL;
 
-  GST_LOG_OBJECT (self, "Got audio packet at %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (capture_time));
-
-  g_mutex_lock (&self->input->lock);
-  if (self->input->videosrc)
-    videosrc =
-        GST_DECKLINK_VIDEO_SRC_CAST (gst_object_ref (self->input->videosrc));
-  g_mutex_unlock (&self->input->lock);
-
-  if (videosrc) {
-    gst_decklink_video_src_convert_to_external_clock (videosrc, &capture_time,
-        NULL);
-    gst_object_unref (videosrc);
-    GST_LOG_OBJECT (self, "Actual timestamp %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (capture_time));
-  }
+  GST_LOG_OBJECT (self,
+      "Got audio packet at %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (capture_time), GST_TIME_ARGS (packet_time));
 
   g_mutex_lock (&self->lock);
   if (!self->flushing) {
@@ -457,8 +442,8 @@
 
     p = (CapturePacket *) g_malloc0 (sizeof (CapturePacket));
     p->packet = packet;
-    p->capture_time = capture_time;
-    p->discont = discont;
+    p->capture_time =
+        capture_time != GST_CLOCK_TIME_NONE ? capture_time : packet_time;
     packet->AddRef ();
     g_queue_push_tail (&self->current_packets, p);
     g_cond_signal (&self->cond);
@@ -523,7 +508,6 @@
   ap->input->AddRef ();
 
   timestamp = p->capture_time;
-  discont = p->discont;
 
   // Jitter and discontinuity handling, based on audiobasesrc
   start_time = timestamp;
@@ -538,7 +522,7 @@
 
   duration = end_time - start_time;
 
-  if (discont || self->next_offset == (guint64) - 1) {
+  if (self->next_offset == (guint64) - 1) {
     discont = TRUE;
   } else {
     guint64 diff, max_sample_diff;
diff --git a/sys/decklink/gstdecklinkvideosink.cpp b/sys/decklink/gstdecklinkvideosink.cpp
index c1c93c8..324f86a 100644
--- a/sys/decklink/gstdecklinkvideosink.cpp
+++ b/sys/decklink/gstdecklinkvideosink.cpp
@@ -955,7 +955,8 @@
       gst_decklink_video_sink_stop (self);
       break;
     case GST_STATE_CHANGE_PLAYING_TO_PAUSED:{
-      if (gst_decklink_video_sink_stop_scheduled_playback (self) == GST_STATE_CHANGE_FAILURE)
+      if (gst_decklink_video_sink_stop_scheduled_playback (self) ==
+          GST_STATE_CHANGE_FAILURE)
         ret = GST_STATE_CHANGE_FAILURE;
       break;
     }
diff --git a/sys/decklink/gstdecklinkvideosrc.cpp b/sys/decklink/gstdecklinkvideosrc.cpp
index cdff188..054f69d 100644
--- a/sys/decklink/gstdecklinkvideosrc.cpp
+++ b/sys/decklink/gstdecklinkvideosrc.cpp
@@ -89,7 +89,6 @@
 static GstStateChangeReturn
 gst_decklink_video_src_change_state (GstElement * element,
     GstStateChange transition);
-static GstClock *gst_decklink_video_src_provide_clock (GstElement * element);
 
 static gboolean gst_decklink_video_src_set_caps (GstBaseSrc * bsrc,
     GstCaps * caps);
@@ -128,8 +127,6 @@
 
   element_class->change_state =
       GST_DEBUG_FUNCPTR (gst_decklink_video_src_change_state);
-  element_class->provide_clock =
-      GST_DEBUG_FUNCPTR (gst_decklink_video_src_provide_clock);
 
   basesrc_class->get_caps = GST_DEBUG_FUNCPTR (gst_decklink_video_src_get_caps);
   basesrc_class->set_caps = GST_DEBUG_FUNCPTR (gst_decklink_video_src_set_caps);
@@ -434,97 +431,19 @@
   return caps;
 }
 
-void
-gst_decklink_video_src_convert_to_external_clock (GstDecklinkVideoSrc * self,
-    GstClockTime * timestamp, GstClockTime * duration)
-{
-  GstClock *clock;
-
-  g_assert (timestamp != NULL);
-
-  if (*timestamp == GST_CLOCK_TIME_NONE)
-    return;
-
-  clock = gst_element_get_clock (GST_ELEMENT_CAST (self));
-  if (clock && clock != self->input->clock) {
-    GstClockTime internal, external, rate_n, rate_d;
-    GstClockTimeDiff external_start_time_diff;
-
-    gst_clock_get_calibration (self->input->clock, &internal, &external,
-        &rate_n, &rate_d);
-
-    if (rate_n != rate_d && self->internal_base_time != GST_CLOCK_TIME_NONE) {
-      GstClockTime internal_timestamp = *timestamp;
-
-      // Convert to the running time corresponding to both clock times
-      internal -= self->internal_base_time;
-      external -= self->external_base_time;
-
-      // Get the difference in the internal time, note
-      // that the capture time is internal time.
-      // Then scale this difference and offset it to
-      // our external time. Now we have the running time
-      // according to our external clock.
-      //
-      // For the duration we just scale
-      *timestamp =
-          gst_clock_adjust_with_calibration (NULL, internal_timestamp, internal,
-          external, rate_n, rate_d);
-
-      GST_LOG_OBJECT (self,
-          "Converted %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT " (external: %"
-          GST_TIME_FORMAT " internal %" GST_TIME_FORMAT " rate: %lf)",
-          GST_TIME_ARGS (internal_timestamp), GST_TIME_ARGS (*timestamp),
-          GST_TIME_ARGS (external), GST_TIME_ARGS (internal),
-          ((gdouble) rate_n) / ((gdouble) rate_d));
-
-      if (duration) {
-        GstClockTime internal_duration = *duration;
-
-        *duration = gst_util_uint64_scale (internal_duration, rate_d, rate_n);
-
-        GST_LOG_OBJECT (self,
-            "Converted duration %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT
-            " (external: %" GST_TIME_FORMAT " internal %" GST_TIME_FORMAT
-            " rate: %lf)", GST_TIME_ARGS (internal_duration),
-            GST_TIME_ARGS (*duration), GST_TIME_ARGS (external),
-            GST_TIME_ARGS (internal), ((gdouble) rate_n) / ((gdouble) rate_d));
-      }
-    } else {
-      GST_LOG_OBJECT (self, "No clock conversion needed, relative rate is 1.0");
-    }
-
-    // Add the diff between the external time when we
-    // went to playing and the external time when the
-    // pipeline went to playing. Otherwise we will
-    // always start outputting from 0 instead of the
-    // current running time.
-    external_start_time_diff =
-        gst_element_get_base_time (GST_ELEMENT_CAST (self));
-    external_start_time_diff =
-        self->external_base_time - external_start_time_diff;
-    *timestamp += external_start_time_diff;
-  } else {
-    GST_LOG_OBJECT (self, "No clock conversion needed, same clocks");
-  }
-}
-
 static void
 gst_decklink_video_src_got_frame (GstElement * element,
     IDeckLinkVideoInputFrame * frame, GstDecklinkModeEnum mode,
-    GstClockTime capture_time, GstClockTime capture_duration, guint hours,
-    guint minutes, guint seconds, guint frames, BMDTimecodeFlags bflags)
+    GstClockTime capture_time, GstClockTime stream_time,
+    GstClockTime stream_duration, guint hours, guint minutes, guint seconds,
+    guint frames, BMDTimecodeFlags bflags)
 {
   GstDecklinkVideoSrc *self = GST_DECKLINK_VIDEO_SRC_CAST (element);
 
-  GST_LOG_OBJECT (self, "Got video frame at %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (capture_time));
-
-  gst_decklink_video_src_convert_to_external_clock (self, &capture_time,
-      &capture_duration);
-
-  GST_LOG_OBJECT (self, "Actual timestamp %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (capture_time));
+  GST_LOG_OBJECT (self,
+      "Got video frame at %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT " (%"
+      GST_TIME_FORMAT ")", GST_TIME_ARGS (capture_time),
+      GST_TIME_ARGS (stream_time), GST_TIME_ARGS (stream_duration));
 
   g_mutex_lock (&self->lock);
   if (!self->flushing) {
@@ -542,8 +461,9 @@
 
     f = (CaptureFrame *) g_malloc0 (sizeof (CaptureFrame));
     f->frame = frame;
-    f->capture_time = capture_time;
-    f->capture_duration = capture_duration;
+    f->capture_time =
+        capture_time != GST_CLOCK_TIME_NONE ? capture_time : stream_time;
+    f->capture_duration = stream_duration;
     f->mode = mode;
     f->format = frame->GetPixelFormat ();
     bmode = gst_decklink_get_mode (mode);
@@ -659,7 +579,7 @@
   vf->input = self->input->input;
   vf->input->AddRef ();
 
-  flags = f->frame->GetFlags();
+  flags = f->frame->GetFlags ();
   if (flags & bmdFrameHasNoInputSource) {
     if (!self->no_signal) {
       self->no_signal = TRUE;
@@ -771,10 +691,6 @@
   self->input->mode = mode;
   self->input->got_video_frame = gst_decklink_video_src_got_frame;
   self->input->start_streams = gst_decklink_video_src_start_streams;
-  self->input->clock_start_time = GST_CLOCK_TIME_NONE;
-  self->input->clock_epoch += self->input->clock_last_time;
-  self->input->clock_last_time = 0;
-  self->input->clock_offset = 0;
   g_mutex_unlock (&self->input->lock);
 
   return TRUE;
@@ -832,42 +748,14 @@
           || self->input->audio_enabled)
       && (GST_STATE (self) == GST_STATE_PLAYING
           || GST_STATE_PENDING (self) == GST_STATE_PLAYING)) {
-    GstClock *clock;
-
-    clock = gst_element_get_clock (element);
-    if (!clock) {
-      GST_ELEMENT_ERROR (self, STREAM, FAILED, (NULL),
-          ("Streams supposed to start but we have no clock"));
-      return;
-    }
-
     GST_DEBUG_OBJECT (self, "Starting streams");
 
     res = self->input->input->StartStreams ();
     if (res != S_OK) {
       GST_ELEMENT_ERROR (self, STREAM, FAILED,
           (NULL), ("Failed to start streams: 0x%08x", res));
-      gst_object_unref (clock);
       return;
     }
-
-    self->input->started = TRUE;
-    self->input->clock_restart = TRUE;
-
-    // Need to unlock to get the clock time
-    g_mutex_unlock (&self->input->lock);
-
-    // Current times of internal and external clock when we go to
-    // playing. We need this to convert the pipeline running time
-    // to the running time of the hardware
-    //
-    // We can't use the normal base time for the external clock
-    // because we might go to PLAYING later than the pipeline
-    self->internal_base_time = gst_clock_get_internal_time (self->input->clock);
-    self->external_base_time = gst_clock_get_internal_time (clock);
-
-    gst_object_unref (clock);
-    g_mutex_lock (&self->input->lock);
   } else {
     GST_DEBUG_OBJECT (self, "Not starting streams yet");
   }
@@ -893,35 +781,8 @@
       }
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
-      g_mutex_lock (&self->input->lock);
-      self->input->clock_start_time = GST_CLOCK_TIME_NONE;
-      self->input->clock_epoch += self->input->clock_last_time;
-      self->input->clock_last_time = 0;
-      self->input->clock_offset = 0;
-      g_mutex_unlock (&self->input->lock);
-      gst_element_post_message (element,
-          gst_message_new_clock_provide (GST_OBJECT_CAST (element),
-              self->input->clock, TRUE));
       self->flushing = FALSE;
       break;
-    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:{
-      GstClock *clock;
-
-      clock = gst_element_get_clock (GST_ELEMENT_CAST (self));
-      if (clock) {
-        if (clock != self->input->clock) {
-          gst_clock_set_master (self->input->clock, clock);
-        }
-
-        gst_object_unref (clock);
-      } else {
-        GST_ELEMENT_ERROR (self, STREAM, FAILED,
-            (NULL), ("Need a clock to go to PLAYING"));
-        ret = GST_STATE_CHANGE_FAILURE;
-      }
-
-      break;
-    }
     default:
       break;
   }
@@ -934,19 +795,7 @@
 
   switch (transition) {
     case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_element_post_message (element,
-          gst_message_new_clock_lost (GST_OBJECT_CAST (element),
-              self->input->clock));
-      gst_clock_set_master (self->input->clock, NULL);
-      // Reset calibration to make the clock reusable next time we use it
-      gst_clock_set_calibration (self->input->clock, 0, 0, 1, 1);
-      g_mutex_lock (&self->input->lock);
-      self->input->clock_start_time = GST_CLOCK_TIME_NONE;
-      self->input->clock_epoch += self->input->clock_last_time;
-      self->input->clock_last_time = 0;
-      self->input->clock_offset = 0;
       self->no_signal = FALSE;
-      g_mutex_unlock (&self->input->lock);
 
       gst_decklink_video_src_stop (self);
       break;
@@ -954,9 +803,6 @@
       HRESULT res;
 
       GST_DEBUG_OBJECT (self, "Stopping streams");
-      g_mutex_lock (&self->input->lock);
-      self->input->started = FALSE;
-      g_mutex_unlock (&self->input->lock);
 
       res = self->input->input->StopStreams ();
       if (res != S_OK) {
@@ -964,8 +810,6 @@
             (NULL), ("Failed to stop streams: 0x%08x", res));
         ret = GST_STATE_CHANGE_FAILURE;
       }
-      self->internal_base_time = GST_CLOCK_TIME_NONE;
-      self->external_base_time = GST_CLOCK_TIME_NONE;
       break;
     }
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:{
@@ -986,14 +830,3 @@
 
   return ret;
 }
-
-static GstClock *
-gst_decklink_video_src_provide_clock (GstElement * element)
-{
-  GstDecklinkVideoSrc *self = GST_DECKLINK_VIDEO_SRC_CAST (element);
-
-  if (!self->input)
-    return NULL;
-
-  return GST_CLOCK_CAST (gst_object_ref (self->input->clock));
-}
diff --git a/sys/decklink/gstdecklinkvideosrc.h b/sys/decklink/gstdecklinkvideosrc.h
index 8c7f38a..f6af21e 100644
--- a/sys/decklink/gstdecklinkvideosrc.h
+++ b/sys/decklink/gstdecklinkvideosrc.h
@@ -69,9 +69,6 @@
   gboolean no_signal;
 
   guint buffer_size;
-
-  GstClockTime internal_base_time;
-  GstClockTime external_base_time;
 };
 
 struct _GstDecklinkVideoSrcClass
@@ -80,8 +77,6 @@
 };
 
 GType gst_decklink_video_src_get_type (void);
-void gst_decklink_video_src_convert_to_external_clock (GstDecklinkVideoSrc * self,
-    GstClockTime * timestamp, GstClockTime * duration);
 
 G_END_DECLS
 
