From bc6e4f585ce770947a61f5c191622586e9839d65 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Sun, 7 Mar 2004 02:09:45 +0000 Subject: [PATCH] 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. --- ChangeLog | 9 +++++++++ sys/oss/gstosssink.c | 7 +++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9e1a5c621..3663c1fe4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2004-03-06 Ronald Bultje + + * 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. + 2004-03-06 Christophe Fergeau * ext/faac/gstfaac.c: (gst_faac_chain): diff --git a/sys/oss/gstosssink.c b/sys/oss/gstosssink.c index dd01b284a..6e91bdba4 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; -- 2.34.1