FreeCalypso > hg > gsm-codec-lib
comparison efrtest/etsi-enc-common.c @ 433:51678b070c7a
efrtest: split etsi-enc.c for code reuse
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 08 May 2024 01:13:50 +0000 |
parents | efrtest/etsi-enc.c@d4f47d0962e7 |
children |
comparison
equal
deleted
inserted
replaced
432:d4f47d0962e7 | 433:51678b070c7a |
---|---|
1 /* | |
2 * This C module holds some functions that have been split off from | |
3 * etsi-enc.c, with the goal of making it easier to build both | |
4 * standard-EFR and AMR-EFR versions of the ETSI-format EFR encoder. | |
5 */ | |
6 | |
7 #include <stdio.h> | |
8 #include <stdint.h> | |
9 #include <stdlib.h> | |
10 #include <string.h> | |
11 #include <strings.h> | |
12 #include <unistd.h> | |
13 #include "../libgsmefr/gsm_efr.h" | |
14 | |
15 read_input(inf, pcm, filename_for_errs, big_endian) | |
16 FILE *inf; | |
17 int16_t *pcm; | |
18 char *filename_for_errs; | |
19 { | |
20 uint8_t file_bytes[320], *sp; | |
21 int cc; | |
22 unsigned n; | |
23 | |
24 cc = fread(file_bytes, 2, 160, inf); | |
25 if (cc == 0) | |
26 return 0; | |
27 if (cc != 160) { | |
28 fprintf(stderr, "error: short read from %s\n", | |
29 filename_for_errs); | |
30 exit(1); | |
31 } | |
32 sp = file_bytes; | |
33 for (n = 0; n < 160; n++) { | |
34 if (big_endian) | |
35 pcm[n] = (sp[0] << 8) | sp[1]; | |
36 else | |
37 pcm[n] = sp[0] | (sp[1] << 8); | |
38 sp += 2; | |
39 } | |
40 return 1; | |
41 } | |
42 | |
43 void | |
44 frame2bits(frame, bits) | |
45 uint8_t *frame, *bits; | |
46 { | |
47 unsigned nb, byte, mask, bit; | |
48 | |
49 for (nb = 0; nb < EFR_RTP_FRAME_LEN; nb++) { | |
50 byte = *frame++; | |
51 for (mask = 0x80; mask; mask >>= 1) { | |
52 if (byte & mask) | |
53 bit = 1; | |
54 else | |
55 bit = 0; | |
56 *bits++ = bit; | |
57 } | |
58 } | |
59 } | |
60 | |
61 void | |
62 emit_output(outf, bits, nbits, big_endian) | |
63 FILE *outf; | |
64 uint8_t *bits; | |
65 unsigned nbits; | |
66 { | |
67 unsigned n; | |
68 | |
69 for (n = 0; n < nbits; n++) { | |
70 if (big_endian) { | |
71 putc(0, outf); | |
72 putc(bits[n], outf); | |
73 } else { | |
74 putc(bits[n], outf); | |
75 putc(0, outf); | |
76 } | |
77 } | |
78 } |