[gst-cvs] gst-plugins-base: baseaudiosink: fix initial calibration
Wim Taymans
wtay at kemper.freedesktop.org
Wed Nov 18 08:11:34 PST 2009
Module: gst-plugins-base
Branch: master
Commit: 0e6b9e596d88b34098bc069bef1eced3b9b97a47
URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=0e6b9e596d88b34098bc069bef1eced3b9b97a47
Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date: Wed Nov 18 17:09:28 2009 +0100
baseaudiosink: fix initial calibration
When we are calibrating the internal clock against the external clock take into
account the time offset applied to our internal clock because we will subtract
that in the render_function again.
---
gst-libs/gst/audio/gstbaseaudiosink.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/gst-libs/gst/audio/gstbaseaudiosink.c b/gst-libs/gst/audio/gstbaseaudiosink.c
index d84c6f6..a4d2dc8 100644
--- a/gst-libs/gst/audio/gstbaseaudiosink.c
+++ b/gst-libs/gst/audio/gstbaseaudiosink.c
@@ -295,6 +295,7 @@ gst_base_audio_sink_init (GstBaseAudioSink * baseaudiosink,
if (strcmp (gst_plugin_feature_get_name (feature), "pulsesink") == 0) {
if (!gst_plugin_feature_check_version (feature, 0, 10, 17)) {
/* we're dealing with an old pulsesink, we need to disable time corection */
+ GST_DEBUG ("disable time offset");
baseaudiosink->priv->do_time_offset = FALSE;
}
}
@@ -1196,6 +1197,7 @@ gst_base_audio_sink_sync_latency (GstBaseSink * bsink, GstMiniObject * obj)
* time of the external clock) */
etime = GST_ELEMENT_CAST (sink)->base_time + time;
itime = gst_audio_clock_get_time (sink->provided_clock);
+ itime = gst_audio_clock_adjust (sink->provided_clock, itime);
if (status == GST_CLOCK_EARLY) {
/* when we prerolled late, we have to take into account the lateness */
@@ -1457,10 +1459,16 @@ gst_base_audio_sink_render (GstBaseSink * bsink, GstBuffer * buf)
&render_start, &render_stop);
}
+ GST_DEBUG_OBJECT (sink,
+ "final timestamps: start %" GST_TIME_FORMAT " - stop %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (render_start), GST_TIME_ARGS (render_stop));
+
/* bring to position in the ringbuffer */
if (sink->priv->do_time_offset) {
time_offset =
GST_AUDIO_CLOCK_CAST (sink->provided_clock)->abidata.ABI.time_offset;
+ GST_DEBUG_OBJECT (sink,
+ "time offset %" GST_TIME_FORMAT, GST_TIME_ARGS (time_offset));
if (render_start > time_offset)
render_start -= time_offset;
else
More information about the Gstreamer-commits
mailing list