about summary refs log tree commit diff
path: root/src/wavpack/float.c
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2007-05-22 15:03:32 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2007-05-22 15:03:32 +0000
commit73aa9b71c1d8b5c5065d1e474f13601da3ca6b20 (patch)
tree88b6a0a4a2ebdd33a88f4a25682581d329d33f6b /src/wavpack/float.c
downloadzcatch-73aa9b71c1d8b5c5065d1e474f13601da3ca6b20.tar.gz
zcatch-73aa9b71c1d8b5c5065d1e474f13601da3ca6b20.zip
started the major restructure of svn
Diffstat (limited to 'src/wavpack/float.c')
-rw-r--r--src/wavpack/float.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/wavpack/float.c b/src/wavpack/float.c
new file mode 100644
index 00000000..4b9b44ee
--- /dev/null
+++ b/src/wavpack/float.c
@@ -0,0 +1,50 @@
+////////////////////////////////////////////////////////////////////////////

+//                           **** WAVPACK ****                            //

+//                  Hybrid Lossless Wavefile Compressor                   //

+//              Copyright (c) 1998 - 2006 Conifer Software.               //

+//                          All Rights Reserved.                          //

+//      Distributed under the BSD Software License (see license.txt)      //

+////////////////////////////////////////////////////////////////////////////

+

+// float.c

+

+#include "wavpack.h"

+

+int read_float_info (WavpackStream *wps, WavpackMetadata *wpmd)

+{

+    int bytecnt = wpmd->byte_length;

+    char *byteptr = wpmd->data;

+

+    if (bytecnt != 4)

+        return FALSE;

+

+    wps->float_flags = *byteptr++;

+    wps->float_shift = *byteptr++;

+    wps->float_max_exp = *byteptr++;

+    wps->float_norm_exp = *byteptr;

+    return TRUE;

+}

+

+void float_values (WavpackStream *wps, int32_t *values, int32_t num_values)

+{

+    int shift = wps->float_max_exp - wps->float_norm_exp + wps->float_shift;

+

+    if (shift > 32)

+        shift = 32;

+    else if (shift < -32)

+        shift = -32;

+

+    while (num_values--) {

+        if (shift > 0)

+            *values <<= shift;

+        else if (shift < 0)

+            *values >>= -shift;

+

+        if (*values > 8388607L)

+            *values = 8388607L;

+        else if (*values < -8388608L)

+            *values = -8388608L;

+

+        values++;

+    }

+}