diff options
author | Alexander Schrab <alexas@axis.com> | 2013-05-07 07:49:00 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2013-05-20 11:25:17 +0200 |
commit | a049b102da7c1b68a31c49717a4b37b351ea4b34 (patch) | |
tree | dbac98a8f5e2ce6256a8a940ad5fd9fa3c029043 | |
parent | 0bc25f03251fa5ddd091716ea41534936b7f198f (diff) |
alsasrc: Make using driver timestamps possible
https://bugzilla.gnome.org/show_bug.cgi?id=699744
-rw-r--r-- | ext/alsa/gstalsasrc.c | 20 | ||||
-rw-r--r-- | gst-libs/gst/audio/gstaudiobasesrc.c | 2 |
2 files changed, 13 insertions, 9 deletions
diff --git a/ext/alsa/gstalsasrc.c b/ext/alsa/gstalsasrc.c index 8613e4c08..67b5c859b 100644 --- a/ext/alsa/gstalsasrc.c +++ b/ext/alsa/gstalsasrc.c @@ -224,7 +224,6 @@ static GstStateChangeReturn gst_alsasrc_change_state (GstElement * element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; - GstAudioBaseSrc *src = GST_AUDIO_BASE_SRC (element); GstAlsaSrc *alsa = GST_ALSA_SRC (element); GstClock *clk; @@ -238,15 +237,20 @@ gst_alsasrc_change_state (GstElement * element, GstStateChange transition) break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: - clk = src->clock; alsa->driver_timestamps = FALSE; - if (GST_IS_SYSTEM_CLOCK (clk)) { - gint clocktype; - g_object_get (clk, "clock-type", &clocktype, NULL); - if (clocktype == GST_CLOCK_TYPE_MONOTONIC) { - GST_INFO ("Using driver timestamps !"); - alsa->driver_timestamps = TRUE; + + clk = gst_element_get_clock (element); + if (clk != NULL) { + if (GST_IS_SYSTEM_CLOCK (clk)) { + gint clocktype; + g_object_get (clk, "clock-type", &clocktype, NULL); + if (clocktype == GST_CLOCK_TYPE_MONOTONIC) { + GST_INFO ("Using driver timestamps !"); + alsa->driver_timestamps = TRUE; + } } + + gst_object_unref (clk); } break; } diff --git a/gst-libs/gst/audio/gstaudiobasesrc.c b/gst-libs/gst/audio/gstaudiobasesrc.c index 8f1721bb0..bd85d8009 100644 --- a/gst-libs/gst/audio/gstaudiobasesrc.c +++ b/gst-libs/gst/audio/gstaudiobasesrc.c @@ -869,7 +869,7 @@ gst_audio_base_src_create (GstBaseSrc * bsrc, guint64 offset, guint length, if (!(clock = GST_ELEMENT_CLOCK (src))) goto no_sync; - if (clock != src->clock) { + if (!GST_CLOCK_TIME_IS_VALID (rb_timestamp) && clock != src->clock) { /* we are slaved, check how to handle this */ switch (src->priv->slave_method) { case GST_AUDIO_BASE_SRC_SLAVE_RESAMPLE: |