summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Schrab <alexas@axis.com>2013-05-07 07:49:00 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2013-05-20 11:25:17 +0200
commita049b102da7c1b68a31c49717a4b37b351ea4b34 (patch)
treedbac98a8f5e2ce6256a8a940ad5fd9fa3c029043
parent0bc25f03251fa5ddd091716ea41534936b7f198f (diff)
alsasrc: Make using driver timestamps possible
https://bugzilla.gnome.org/show_bug.cgi?id=699744
-rw-r--r--ext/alsa/gstalsasrc.c20
-rw-r--r--gst-libs/gst/audio/gstaudiobasesrc.c2
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: