gst/gstutils.c: Chain trivial case to _scale_int.
authorWim Taymans <wim.taymans@gmail.com>
Thu, 24 Nov 2005 18:03:15 +0000 (18:03 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Thu, 24 Nov 2005 18:03:15 +0000 (18:03 +0000)
Original commit message from CVS:
* gst/gstutils.c: (gst_util_uint64_scale),
(gst_util_uint64_scale_int):
Chain trivial case to _scale_int.

ChangeLog
gst/gstutils.c

index 8fe32c9..d827f31 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2005-11-24  Wim Taymans  <wim@fluendo.com>
 
+       * gst/gstutils.c: (gst_util_uint64_scale),
+       (gst_util_uint64_scale_int):
+       Chain trivial case to _scale_int.
+
+2005-11-24  Wim Taymans  <wim@fluendo.com>
+
        * check/gst/gstutils.c: (GST_START_TEST), (gst_utils_suite):
        Added test for scaling.
 
index d955719..7944006 100644 (file)
@@ -369,9 +369,19 @@ typedef union
 guint64
 gst_util_uint64_scale (guint64 val, guint64 num, guint64 denom)
 {
-  /* implement me with fixed point, if you care */
-  return gst_gdouble_to_guint64 (gst_guint64_to_gdouble (val) *
-      ((gst_guint64_to_gdouble (num)) / gst_guint64_to_gdouble (denom)));
+  guint64 result;
+
+  g_return_val_if_fail (denom != 0, G_MAXUINT64);
+
+  if (num <= G_MAXINT32 && denom <= G_MAXINT32) {
+    result = gst_util_uint64_scale_int (val, (gint) num, (gint) denom);
+  } else {
+    /* implement me with fixed point, if you care */
+    result = gst_gdouble_to_guint64 (gst_guint64_to_gdouble (val) *
+        ((gst_guint64_to_gdouble (num)) / gst_guint64_to_gdouble (denom)));
+  }
+
+  return result;
 }
 
 /**