summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2003-12-17 22:36:20 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2003-12-17 22:36:20 +0000
commit9b57e0a57de3463bc79d01915229b6e9bf275c6d (patch)
treed3cc5ec8cd3e1296537337b2a56e235a5b844305 /sys
parent21693f54dea28bda8ac05f3013ee18ab92964467 (diff)
Go back to old code, it works good enough...
Original commit message from CVS: Go back to old code, it works good enough...
Diffstat (limited to 'sys')
-rw-r--r--sys/oss/gstosssink.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/sys/oss/gstosssink.c b/sys/oss/gstosssink.c
index 929f7206..d93912ed 100644
--- a/sys/oss/gstosssink.c
+++ b/sys/oss/gstosssink.c
@@ -347,10 +347,10 @@ gst_osssink_chain (GstPad *pad, GstData *_data)
ioctl (GST_OSSELEMENT (osssink)->fd, SNDCTL_DSP_RESET);
if (gst_event_discont_get_value (event, GST_FORMAT_TIME, &value)) {
if (!gst_clock_handle_discont (osssink->clock, value))
- gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssink->provided_clock), FALSE);
+ gst_audio_clock_set_active (GST_AUDIO_CLOCK (osssink->provided_clock), FALSE);
osssink->handled = 0;
}
- osssink->resync = TRUE;
+ osssink->resync = TRUE;
break;
}
@@ -379,15 +379,23 @@ gst_osssink_chain (GstPad *pad, GstData *_data)
if (osssink->clock) {
gint delay = 0;
gint64 queued;
+ GstClockTimeDiff jitter;
delay = gst_osssink_get_delay (osssink);
queued = delay * GST_SECOND / GST_OSSELEMENT (osssink)->bps;
if (osssink->resync && osssink->sync) {
- gst_audio_clock_set_active ((GstAudioClock*)osssink->provided_clock, TRUE);
- gst_clock_handle_discont (osssink->clock, buftime - queued);
- to_write = size;
- osssink->resync = FALSE;
+ GstClockID id = gst_clock_new_single_shot_id (osssink->clock, buftime - queued);
+
+ gst_element_clock_wait (GST_ELEMENT (osssink), id, &jitter);
+ gst_clock_id_free (id);
+
+ if (jitter >= 0) {
+ gst_clock_handle_discont (osssink->clock, buftime - queued + jitter);
+ to_write = size;
+ gst_audio_clock_set_active ((GstAudioClock*)osssink->provided_clock, TRUE);
+ osssink->resync = FALSE;
+ }
}
else {
to_write = size;