summaryrefslogtreecommitdiff
path: root/src/scale.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/scale.c')
-rw-r--r--src/scale.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/scale.c b/src/scale.c
new file mode 100644
index 0000000..b2b6fad
--- /dev/null
+++ b/src/scale.c
@@ -0,0 +1,17 @@
+#include <math.h>
+#include <stdint.h>
+
+/*
+ * In order to correctly scale by fractions of 120 (used by
+ * wp_fractional_scale_v1), we need to bias the result before rounding.
+ */
+
+uint32_t scale_apply(uint32_t base, uint32_t scale)
+{
+ return round(base * (scale / 120.) + 1e-6);
+}
+
+uint32_t scale_apply_inverse(uint32_t base, uint32_t scale)
+{
+ return round(base * (120. / scale) + 1e-6);
+}