+2005-12-02 Wim Taymans <wim@fluendo.com>
+
+ * gst/gstutils.c: (gst_util_uint64_scale_int64),
+ (gst_util_uint64_scale_int):
+ Small cleanup.
+
+ * libs/gst/base/gstbasesink.c: (gst_base_sink_handle_object):
+ Add debug log line.
+
+ * libs/gst/base/gstbasetransform.c: (gst_base_transform_event):
+ Add FIXME.
+
2005-12-02 Thomas Vander Stichele <thomas at apestaart dot org>
* win32/MANIFEST:
gst_util_uint64_scale_int64 (guint64 val, guint64 num, guint64 denom)
{
GstUInt64 a0, a1, b0, b1, c0, ct, c1, result;
- GstUInt64 v, n, d;
+ GstUInt64 v, n;
/* prepare input */
v.ll = val;
n.ll = num;
- d.ll = denom;
/* do 128 bits multiply
* nh nl
gst_util_uint64_scale_int (guint64 val, gint num, gint denom)
{
GstUInt64 result;
+ GstUInt64 low, high;
g_return_val_if_fail (denom > 0, G_MAXUINT64);
g_return_val_if_fail (num >= 0, G_MAXUINT64);
if (num == 1 && denom == 1)
return val;
- if (val <= G_MAXUINT32) {
+ if (val <= G_MAXUINT32)
/* simple case */
- result.ll = val * num / denom;
- } else {
- GstUInt64 low, high;
+ return val * num / denom;
+
+ /* do 96 bits mult/div */
+ low.ll = val;
+ result.ll = ((guint64) low.l.low) * num;
+ high.ll = ((guint64) low.l.high) * num + (result.l.high);
- /* do 96 bits mult/div */
- low.ll = val;
- result.ll = ((guint64) low.l.low) * num;
- high.ll = ((guint64) low.l.high) * num + (result.l.high);
+ low.ll = high.ll / denom;
+ result.l.high = high.ll % denom;
+ result.ll /= denom;
- low.ll = high.ll / denom;
- result.l.high = high.ll % denom;
- result.ll /= denom;
+ /* avoid overflow */
+ if (low.ll + result.l.high > G_MAXUINT32)
+ goto overflow;
- /* avoid overflow */
- if (low.ll + result.l.high > G_MAXUINT32)
- goto overflow;
+ result.l.high += low.l.low;
- result.l.high += low.l.low;
- }
return result.ll;
overflow: