made tsrc a little more generic
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 25 Jan 2017 06:55:34 +0000 (06:55 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Wed, 25 Jan 2017 06:55:34 +0000 (06:55 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@2997 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/unittest/tsrc.c

index e15d0394a9080de6f9bfcf582b03574250de3356..f73243a1e676ec92e59e50a37cdc61d72e6f9cff 100644 (file)
 
 #include <assert.h>
 #include <math.h>
+#include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <samplerate.h>
 
-#define N8   160                     /* processing buffer size at 8 kHz       */
-#define FS   8000                    /* nominal input sample rate             */
-#define N48  ((int)N8*(48000/8000))  /* buf size assuming 48k max sample rate */
+#define N    10000                   /* processing buffer size */
 
 int main(int argc, char *argv[]) {
-    FILE       *f8k, *fout;
-    short       in8k_short[N8];
-    float       in8k[N8];
-    float       out[N48];
-    short       out_short[N48];
+    FILE       *fin, *fout;
+    short       in_short[N], out_short[N];
+    float       in[N], out[N];
     SRC_STATE  *src;
     SRC_DATA    data;
-    int         error;
+    int         error, nin, nremaining, i;
 
     if (argc != 4) {
        printf("usage %s inputRawFile OutputRawFile OutSampleRatio\n", argv[0]);
@@ -35,10 +32,10 @@ int main(int argc, char *argv[]) {
     }
 
     if (strcmp(argv[1], "-") == 0) 
-        f8k = stdin;
+        fin = stdin;
     else
-        f8k = fopen(argv[1], "rb");
-    assert(f8k != NULL);
+        fin = fopen(argv[1], "rb");
+    assert(fin != NULL);
 
     if (strcmp(argv[2], "-") == 0) 
         fout = stdout;
@@ -50,26 +47,42 @@ int main(int argc, char *argv[]) {
     //src = src_new(SRC_LINEAR, 1, &error);
     assert(src != NULL);
 
-    data.data_in = in8k;
+    data.data_in = in;
     data.data_out = out;
-    data.input_frames = N8;
-    data.output_frames = N48;
+    data.input_frames = N;
+    data.output_frames = N;
     data.end_of_input = 0;
     data.src_ratio = atof(argv[3]);
 
-    while(fread(in8k_short, sizeof(short), N8, f8k) == N8) {
-       src_short_to_float_array(in8k_short, in8k, N8);
-       src_process(src, &data);
-       //fprintf(stderr, "%d %d\n", (int)data.output_frames , (int)data.output_frames_gen);
-       assert(data.output_frames_gen <= N48);
+    int total_in = 0;
+    int total_out = 0;
+
+    nin = N;
+    nremaining = 0;
+    while(fread(&in_short[nremaining], sizeof(short), nin, fin) == nin) {
+       src_short_to_float_array(in_short, in, N);
+       error = src_process(src, &data);
+        assert(error == 0);
        src_float_to_short_array(out, out_short, data.output_frames_gen);
+
        fwrite(out_short, sizeof(short), data.output_frames_gen, fout);
         if (fout == stdout) fflush(stdout);
-        if (f8k == stdin) fflush(stdin);
-   }
+
+        nremaining = N - data.input_frames_used;
+        nin = data.input_frames_used;
+       //fprintf(stderr, "input frames: %d output_frames %d nremaining: %d\n", 
+        //        (int)data.input_frames_used, (int)data.output_frames_gen, nremaining);
+        for(i=0; i<nremaining; i++)
+            in_short[i] = in_short[i+nin];
+
+        total_in  += data.input_frames_used;
+        total_out += data.output_frames_gen;
+    }
+
+    //fprintf(stderr, "total_in: %d total_out: %d\n", total_in, total_out);
 
     fclose(fout);
-    fclose(f8k);
+    fclose(fin);
 
     return 0;
 }