Version update 1.2.0 -> 1.3.0 (fix crash on 64bit)
[platform/upstream/opencore-amr.git] / test / amrwb-dec.c
similarity index 73%
rename from test/amrwb-dec.cpp
rename to test/amrwb-dec.c
index 740181d..7a121e8 100644 (file)
 #include <stdio.h>
 #include <stdint.h>
 #include <string.h>
-#include "wav.h"
-extern "C" {
+#include "wavwriter.h"
 #include <dec_if.h>
-}
 
 /* From pvamrwbdecoder_api.h, by dividing by 8 and rounding up */
-const int sizes[] = { 17, 23, 32, 36, 40, 46, 50, 58, 60, 5, -1, -1, -1, -1, -1, -1 };
+const int sizes[] = { 17, 23, 32, 36, 40, 46, 50, 58, 60, 5, -1, -1, -1, -1, -1, 0 };
 
 int main(int argc, char *argv[]) {
-       if (argc < 2) {
-               fprintf(stderr, "%s in.amr\n", argv[0]);
+       FILE* in;
+       char header[9];
+       int n;
+       void *wav, *amr;
+       if (argc < 3) {
+               fprintf(stderr, "%s in.amr out.wav\n", argv[0]);
                return 1;
        }
 
-       FILE* in = fopen(argv[1], "rb");
+       in = fopen(argv[1], "rb");
        if (!in) {
                perror(argv[1]);
                return 1;
        }
-       char header[9];
-       int n = fread(header, 1, 9, in);
+       n = fread(header, 1, 9, in);
        if (n != 9 || memcmp(header, "#!AMR-WB\n", 9)) {
                fprintf(stderr, "Bad header\n");
                return 1;
        }
 
-       WavWriter wav("out.wav", 16000, 16, 1);
-       void* amr = D_IF_init();
-       while (true) {
-               uint8_t buffer[500];
+       wav = wav_write_open(argv[2], 16000, 16, 1);
+       if (!wav) {
+               fprintf(stderr, "Unable to open %s\n", argv[2]);
+               return 1;
+       }
+       amr = D_IF_init();
+       while (1) {
+               uint8_t buffer[500], littleendian[640], *ptr;
+               int size, i;
+               int16_t outbuffer[320];
                /* Read the mode byte */
                n = fread(buffer, 1, 1, in);
                if (n <= 0)
                        break;
                /* Find the packet size */
-               int size = sizes[(buffer[0] >> 3) & 0x0f];
-               if (size <= 0)
+               size = sizes[(buffer[0] >> 3) & 0x0f];
+               if (size < 0)
                        break;
                n = fread(buffer + 1, 1, size, in);
                if (n != size)
                        break;
 
                /* Decode the packet */
-               int16_t outbuffer[320];
                D_IF_decode(amr, buffer, outbuffer, 0);
 
                /* Convert to little endian and write to wav */
-               uint8_t littleendian[640];
-               uint8_t* ptr = littleendian;
-               for (int i = 0; i < 320; i++) {
+               ptr = littleendian;
+               for (i = 0; i < 320; i++) {
                        *ptr++ = (outbuffer[i] >> 0) & 0xff;
                        *ptr++ = (outbuffer[i] >> 8) & 0xff;
                }
-               wav.writeData(littleendian, 640);
+               wav_write_data(wav, littleendian, 640);
        }
        fclose(in);
        D_IF_exit(amr);
+       wav_write_close(wav);
        return 0;
 }