From 6ceca6153b269d3e4e490392804bb27f2f49ac1c Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 24 Nov 2005 18:03:15 +0000 Subject: [PATCH] gst/gstutils.c: Chain trivial case to _scale_int. Original commit message from CVS: * gst/gstutils.c: (gst_util_uint64_scale), (gst_util_uint64_scale_int): Chain trivial case to _scale_int. --- ChangeLog | 6 ++++++ gst/gstutils.c | 16 +++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8fe32c9..d827f31 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2005-11-24 Wim Taymans + * gst/gstutils.c: (gst_util_uint64_scale), + (gst_util_uint64_scale_int): + Chain trivial case to _scale_int. + +2005-11-24 Wim Taymans + * check/gst/gstutils.c: (GST_START_TEST), (gst_utils_suite): Added test for scaling. diff --git a/gst/gstutils.c b/gst/gstutils.c index d955719..7944006 100644 --- a/gst/gstutils.c +++ b/gst/gstutils.c @@ -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; } /** -- 2.7.4