FreeCalypso > hg > gsm-codec-lib
comparison efrtest/etsi-enc.c @ 151:a13b1605142b
gsmefr-etsi-enc: add BE support
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 14 Dec 2022 22:25:31 +0000 |
parents | ff0372186b59 |
children | d4f47d0962e7 |
comparison
equal
deleted
inserted
replaced
150:da17c7f02c6c | 151:a13b1605142b |
---|---|
11 #include <stdio.h> | 11 #include <stdio.h> |
12 #include <stdint.h> | 12 #include <stdint.h> |
13 #include <stdlib.h> | 13 #include <stdlib.h> |
14 #include <string.h> | 14 #include <string.h> |
15 #include <strings.h> | 15 #include <strings.h> |
16 #include <unistd.h> | |
16 #include "../libgsmefr/gsm_efr.h" | 17 #include "../libgsmefr/gsm_efr.h" |
17 | 18 |
18 static int | 19 static int |
19 read_input(inf, pcm, filename_for_errs) | 20 read_input(inf, pcm, filename_for_errs, big_endian) |
20 FILE *inf; | 21 FILE *inf; |
21 int16_t *pcm; | 22 int16_t *pcm; |
22 char *filename_for_errs; | 23 char *filename_for_errs; |
23 { | 24 { |
24 uint8_t file_bytes[320], *sp; | 25 uint8_t file_bytes[320], *sp; |
33 filename_for_errs); | 34 filename_for_errs); |
34 exit(1); | 35 exit(1); |
35 } | 36 } |
36 sp = file_bytes; | 37 sp = file_bytes; |
37 for (n = 0; n < 160; n++) { | 38 for (n = 0; n < 160; n++) { |
38 pcm[n] = sp[0] | (sp[1] << 8); | 39 if (big_endian) |
40 pcm[n] = (sp[0] << 8) | sp[1]; | |
41 else | |
42 pcm[n] = sp[0] | (sp[1] << 8); | |
39 sp += 2; | 43 sp += 2; |
40 } | 44 } |
41 return 1; | 45 return 1; |
42 } | 46 } |
43 | 47 |
58 } | 62 } |
59 } | 63 } |
60 } | 64 } |
61 | 65 |
62 static void | 66 static void |
63 emit_output(outf, bits, nbits) | 67 emit_output(outf, bits, nbits, big_endian) |
64 FILE *outf; | 68 FILE *outf; |
65 uint8_t *bits; | 69 uint8_t *bits; |
66 unsigned nbits; | 70 unsigned nbits; |
67 { | 71 { |
68 unsigned n; | 72 unsigned n; |
69 | 73 |
70 for (n = 0; n < nbits; n++) { | 74 for (n = 0; n < nbits; n++) { |
71 putc(bits[n], outf); | 75 if (big_endian) { |
72 putc(0, outf); | 76 putc(0, outf); |
77 putc(bits[n], outf); | |
78 } else { | |
79 putc(bits[n], outf); | |
80 putc(0, outf); | |
81 } | |
73 } | 82 } |
74 } | 83 } |
75 | 84 |
76 main(argc, argv) | 85 main(argc, argv) |
77 char **argv; | 86 char **argv; |
79 char *infname, *outfname; | 88 char *infname, *outfname; |
80 FILE *inf, *outf; | 89 FILE *inf, *outf; |
81 struct EFR_encoder_state *state; | 90 struct EFR_encoder_state *state; |
82 int16_t pcm[160]; | 91 int16_t pcm[160]; |
83 uint8_t frame[EFR_RTP_FRAME_LEN], bits[250]; | 92 uint8_t frame[EFR_RTP_FRAME_LEN], bits[250]; |
84 int dtx, rc, sp, vad; | 93 int opt, dtx = 0, rc, sp, vad, big_endian = 0; |
94 extern int optind; | |
85 | 95 |
86 if (argc == 3 && argv[1][0] != '-') { | 96 while ((opt = getopt(argc, argv, "bd")) != EOF) { |
87 dtx = 0; | 97 switch (opt) { |
88 infname = argv[1]; | 98 case 'b': |
89 outfname = argv[2]; | 99 big_endian = 1; |
90 } else if (argc == 4 && !strcmp(argv[1], "-d")) { | 100 continue; |
91 dtx = 1; | 101 case 'd': |
92 infname = argv[2]; | 102 dtx = 1; |
93 outfname = argv[3]; | 103 continue; |
94 } else { | 104 default: |
95 fprintf(stderr, "usage: %s [-d] input.inp output.cod\n", | 105 usage: |
96 argv[0]); | 106 fprintf(stderr, |
97 exit(1); | 107 "usage: %s [-b] [-d] input.inp output.cod\n", |
108 argv[0]); | |
109 exit(1); | |
110 } | |
98 } | 111 } |
112 if (argc != optind + 2) | |
113 goto usage; | |
114 infname = argv[optind]; | |
115 outfname = argv[optind+1]; | |
116 | |
99 inf = fopen(infname, "r"); | 117 inf = fopen(infname, "r"); |
100 if (!inf) { | 118 if (!inf) { |
101 perror(infname); | 119 perror(infname); |
102 exit(1); | 120 exit(1); |
103 } | 121 } |
110 if (!state) { | 128 if (!state) { |
111 perror("EFR_encoder_create()"); | 129 perror("EFR_encoder_create()"); |
112 exit(1); | 130 exit(1); |
113 } | 131 } |
114 for (;;) { | 132 for (;;) { |
115 rc = read_input(inf, pcm, argv[1]); | 133 rc = read_input(inf, pcm, infname, big_endian); |
116 if (!rc) | 134 if (!rc) |
117 break; | 135 break; |
118 EFR_encode_frame(state, pcm, frame, &sp, &vad); | 136 EFR_encode_frame(state, pcm, frame, &sp, &vad); |
119 frame2bits(frame, bits); | 137 frame2bits(frame, bits); |
120 bits[248] = vad; | 138 bits[248] = vad; |
121 bits[249] = sp; | 139 bits[249] = sp; |
122 emit_output(outf, bits + 4, 246); | 140 emit_output(outf, bits + 4, 246, big_endian); |
123 } | 141 } |
124 fclose(outf); | 142 fclose(outf); |
125 exit(0); | 143 exit(0); |
126 } | 144 } |