FreeCalypso > hg > gsm-codec-lib
annotate hrutil/etsi-enc.c @ 630:f85ef5c4d044 default tip
libgsmhr1: provide sizes of state structures
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Thu, 12 Mar 2026 06:19:12 +0000 |
| parents | 45e727b53da1 |
| children |
| rev | line source |
|---|---|
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
|
627
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
2 * gsmhr-etsi-enc is a test program for our GSM-HR encoder: it reads raw |
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * 16-bit PCM (matching ETSI's *.inp) as input and writes ETSI's *.cod |
|
432
d4f47d0962e7
efrtest/etsi-enc.c: fix error in head comment
Mychaela Falconia <falcon@freecalypso.org>
parents:
151
diff
changeset
|
4 * format as output, allowing our encoder to be tested with ETSI's |
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * official test sequences. |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * |
|
627
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
7 * ETSI input and output files are read and written in the local machine's |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
8 * native byte order by default; -b and -l options can be used to force |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
9 * BE or LE, respectively. |
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 */ |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <stdio.h> |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <stdint.h> |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <stdlib.h> |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include <string.h> |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 #include <strings.h> |
|
151
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
17 #include <unistd.h> |
|
627
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
18 #include "../libgsmhr1/tw_gsmhr.h" |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
19 #include "../libtest/local_endian.h" |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
20 |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
21 static int |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
22 read_input(inf, pcm, filename_for_errs, big_endian) |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
23 FILE *inf; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
24 int16_t *pcm; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
25 char *filename_for_errs; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
26 { |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
27 uint8_t file_bytes[320], *sp; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
28 int cc; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
29 unsigned n; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
30 |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
31 cc = fread(file_bytes, 2, 160, inf); |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
32 if (cc == 0) |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
33 return 0; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
34 if (cc != 160) { |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
35 fprintf(stderr, "error: short read from %s\n", |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
36 filename_for_errs); |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
37 exit(1); |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
38 } |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
39 sp = file_bytes; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
40 for (n = 0; n < 160; n++) { |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
41 if (big_endian) |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
42 pcm[n] = (sp[0] << 8) | sp[1]; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
43 else |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
44 pcm[n] = sp[0] | (sp[1] << 8); |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
45 sp += 2; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
46 } |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
47 return 1; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
48 } |
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 main(argc, argv) |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 char **argv; |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 { |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 char *infname, *outfname; |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 FILE *inf, *outf; |
|
627
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
55 int opt, rc, big_endian, dtx = 0; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
56 struct gsmhr_encoder_state *state; |
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 int16_t pcm[160]; |
|
627
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
58 int16_t prm_out[GSMHR_NUM_PARAMS_ENC]; |
|
151
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
59 extern int optind; |
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 |
|
627
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
61 big_endian = is_native_big_endian(); |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
62 while ((opt = getopt(argc, argv, "bdl")) != EOF) { |
|
151
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
63 switch (opt) { |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
64 case 'b': |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
65 big_endian = 1; |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
66 continue; |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
67 case 'd': |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
68 dtx = 1; |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
69 continue; |
|
627
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
70 case 'l': |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
71 big_endian = 0; |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
72 continue; |
|
151
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
73 default: |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
74 usage: |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
75 fprintf(stderr, |
|
627
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
76 "usage: %s [-b|-l] [-d] input.inp output.cod\n", |
|
151
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
77 argv[0]); |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
78 exit(1); |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
79 } |
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 } |
|
151
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
81 if (argc != optind + 2) |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
82 goto usage; |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
83 infname = argv[optind]; |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
84 outfname = argv[optind+1]; |
|
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
85 |
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 inf = fopen(infname, "r"); |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 if (!inf) { |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 perror(infname); |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 exit(1); |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 } |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 outf = fopen(outfname, "w"); |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 if (!outf) { |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 perror(outfname); |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 exit(1); |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 } |
|
627
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
96 state = gsmhr_encoder_create(dtx); |
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 if (!state) { |
|
627
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
98 perror("gsmhr_encoder_create()"); |
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 exit(1); |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 } |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 for (;;) { |
|
151
a13b1605142b
gsmefr-etsi-enc: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents:
114
diff
changeset
|
102 rc = read_input(inf, pcm, infname, big_endian); |
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 if (!rc) |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 break; |
|
627
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
105 gsmhr_encode_frame(state, pcm, prm_out); |
|
45e727b53da1
hrutil: new program gsmhr-etsi-enc
Mychaela Falconia <falcon@freecalypso.org>
parents:
433
diff
changeset
|
106 emit_cod_to_endian(outf, prm_out, big_endian); |
|
114
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 } |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 fclose(outf); |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 exit(0); |
|
ff0372186b59
gsmefr-etsi-enc test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 } |
