From 783b56d54788f177881d68ae2ec7a7cb4bb38ac4 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 18 Apr 2004 01:35:53 +0000 Subject: Initial commit git-svn-id: file:///home/lennart/svn/public/vfax/trunk@3 541b366f-4dd8-0310-ae39-b2612fd50714 --- main.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 main.c (limited to 'main.c') 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 +#include +#include +#include + +#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 -- cgit