aboutsummaryrefslogtreecommitdiff
path: root/dnn/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'dnn/common.h')
-rw-r--r--dnn/common.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/dnn/common.h b/dnn/common.h
new file mode 100644
index 00000000..b3bec730
--- /dev/null
+++ b/dnn/common.h
@@ -0,0 +1,56 @@
+
+
+#ifndef COMMON_H
+#define COMMON_H
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "opus_defines.h"
+
+#define LOG256 5.5451774445f
+static OPUS_INLINE float log2_approx(float x)
+{
+ int integer;
+ float frac;
+ union {
+ float f;
+ int i;
+ } in;
+ in.f = x;
+ integer = (in.i>>23)-127;
+ in.i -= integer<<23;
+ frac = in.f - 1.5f;
+ frac = -0.41445418f + frac*(0.95909232f
+ + frac*(-0.33951290f + frac*0.16541097f));
+ return 1+integer+frac;
+}
+
+#define log_approx(x) (0.69315f*log2_approx(x))
+
+static OPUS_INLINE float ulaw2lin(float u)
+{
+ float s;
+ float scale_1 = 32768.f/255.f;
+ u = u - 128.f;
+ s = u >= 0.f ? 1.f : -1.f;
+ u = fabs(u);
+ return s*scale_1*(exp(u/128.*LOG256)-1);
+}
+
+static OPUS_INLINE int lin2ulaw(float x)
+{
+ float u;
+ float scale = 255.f/32768.f;
+ int s = x >= 0 ? 1 : -1;
+ x = fabs(x);
+ u = (s*(128*log_approx(1+scale*x)/LOG256));
+ u = 128 + u;
+ if (u < 0) u = 0;
+ if (u > 255) u = 255;
+ return (int)floor(.5 + u);
+}
+
+
+
+#endif