summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-04-18 01:35:53 +0000
committerLennart Poettering <lennart@poettering.net>2004-04-18 01:35:53 +0000
commit783b56d54788f177881d68ae2ec7a7cb4bb38ac4 (patch)
tree77555207fa13c137e0c8dab8726f2ed96538e075 /main.c
parentf069d236c79a7cb89542eba5ddc454d03ead5394 (diff)
Initial commit
git-svn-id: file:///home/lennart/svn/public/vfax/trunk@3 541b366f-4dd8-0310-ae39-b2612fd50714
Diffstat (limited to 'main.c')
-rw-r--r--main.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..5356f47
--- /dev/null
+++ b/main.c
@@ -0,0 +1,87 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <inttypes.h>
+#include <assert.h>
+
+#include "v17mod.h"
+#include "v17tcm.h"
+#include "util.h"
+
+int16_t *conv_float_16sle(float *p, int l) {
+ int i;
+ int16_t *r = (int16_t*) p, *target = (int16_t*) p;
+
+ assert(2*sizeof(int16_t) == sizeof(float));
+
+ for (i = 0; i < l; i++) {
+ int v = (int) (0x3FFF * *p);
+
+ if (v < -0x8000) {
+ v = -0x8000;
+ fprintf(stderr, "UNDERFLOW: %f\n", *p);
+ }
+
+ if (v > 0x7fff) {
+ v = 0x7fff;
+ fprintf(stderr, "OVERFLOW\n");
+ }
+
+
+ *(target++) = (int16_t) v;
+ *(target++) = (int16_t) v;
+
+ p++;
+ }
+
+ return r;
+}
+
+#ifndef TEST
+
+int main() {
+ struct v17mod_state mod;
+ struct v17tcm_state tcm;
+
+ v17mod_init(&mod);
+ v17tcm_init(&tcm);
+
+ for (;;) {
+ ssize_t l;
+ uint8_t buf[64];
+ int i, n;
+ float f[1024];
+
+ //fprintf(stderr, "ITERATE\n");
+
+ if ((l = read(0, buf, sizeof(buf))) <= 0) {
+ //if (l < 0)
+ fprintf(stderr, "read failure\n");
+
+
+ goto finish;
+ }
+
+ for (i = 0; i < l; i++)
+ buf[i] = v17tcm_encode(&tcm, buf[i] & 7);
+
+ v17mod_push(&mod, buf, l);
+
+ n = v17mod_pull(&mod, f, sizeof(f)/sizeof(float));
+
+
+
+ if (loop_write(1, conv_float_16sle(f, n), n*sizeof(int16_t)*2) < 0) {
+ fprintf(stderr, "write failure\n");
+ goto finish;
+ }
+ }
+
+
+finish:
+
+ v17mod_done(&mod);
+
+ return 0;
+}
+
+#endif