summaryrefslogtreecommitdiffstats
path: root/sys/oss
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2004-03-07 02:09:45 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2004-03-07 02:09:45 +0000
commitbc6e4f585ce770947a61f5c191622586e9839d65 (patch)
treec92f01f4f94aaf3548565fa0cdfdcd8d15337e17 /sys/oss
parent89bbfdc3683c00f14cf7142cd19faadaf2ccc1c8 (diff)
sys/oss/gstosssink.c: get_delay() may return values lower than 0. In those cases, we should not actually cast to *uns...
Original commit message from CVS: * sys/oss/gstosssink.c: (gst_osssink_get_delay), (gst_osssink_get_time): get_delay() may return values lower than 0. In those cases, we should not actually cast to *unsigned* int64, that will break stuff horribly. In my case, it screwed up A/V sync in movies in totem rather badly.
Diffstat (limited to 'sys/oss')
-rw-r--r--sys/oss/gstosssink.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/oss/gstosssink.c b/sys/oss/gstosssink.c
index dd01b284..6e91bdba 100644
--- a/sys/oss/gstosssink.c
+++ b/sys/oss/gstosssink.c
@@ -257,7 +257,7 @@ gst_osssink_sinkconnect (GstPad *pad, const GstCaps *caps)
return GST_PAD_LINK_OK;
}
-static inline gint64
+static inline gint
gst_osssink_get_delay (GstOssSink *osssink)
{
gint delay = 0;
@@ -280,6 +280,7 @@ gst_osssink_get_delay (GstOssSink *osssink)
delay = (info.fragstotal * info.fragsize) - info.bytes;
}
}
+
return delay;
}
@@ -298,7 +299,9 @@ gst_osssink_get_time (GstClock *clock, gpointer data)
/* sometimes delay is bigger than the number of bytes sent to the device,
* which screws up this calculation, we assume that everything is still
* in the device then */
- if (((guint64)delay) > osssink->handled) {
+ if (delay < 0) {
+ delay = 0;
+ } else if (((guint64) delay) > osssink->handled) {
delay = osssink->handled;
}
res = (osssink->handled - delay) * GST_SECOND / GST_OSSELEMENT (osssink)->bps;