FreeCalypso > hg > gsm-codec-lib
annotate hrutil/decode-r.c @ 608:d4e42ec4a688 default tip
hrutil: new program gsmhr-decode-r
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Fri, 05 Dec 2025 09:01:14 +0000 |
| parents | hrutil/decode.c@cdf3f5c618b8 |
| children |
| rev | line source |
|---|---|
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
|
608
d4e42ec4a688
hrutil: new program gsmhr-decode-r
Mychaela Falconia <falcon@freecalypso.org>
parents:
607
diff
changeset
|
2 * This file is the main module for gsmhr-decode-r utility. This utility |
|
d4e42ec4a688
hrutil: new program gsmhr-decode-r
Mychaela Falconia <falcon@freecalypso.org>
parents:
607
diff
changeset
|
3 * is intended to serve as a precision tinkering-oriented decoder for |
|
d4e42ec4a688
hrutil: new program gsmhr-decode-r
Mychaela Falconia <falcon@freecalypso.org>
parents:
607
diff
changeset
|
4 * GSM-HR encoded speech, reading TW-TS-005 Annex B as input and emitting |
|
d4e42ec4a688
hrutil: new program gsmhr-decode-r
Mychaela Falconia <falcon@freecalypso.org>
parents:
607
diff
changeset
|
5 * 16-bit linear PCM output in robe format. |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 */ |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdio.h> |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <stdint.h> |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdlib.h> |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
11 #include "../libgsmhr1/tw_gsmhr.h" |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
12 #include "../libtest/tw5reader.h" |
|
608
d4e42ec4a688
hrutil: new program gsmhr-decode-r
Mychaela Falconia <falcon@freecalypso.org>
parents:
607
diff
changeset
|
13 #include "../libtest/robewrite.h" |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 main(argc, argv) |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 char **argv; |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 { |
|
608
d4e42ec4a688
hrutil: new program gsmhr-decode-r
Mychaela Falconia <falcon@freecalypso.org>
parents:
607
diff
changeset
|
18 FILE *hexf, *outf; |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
19 unsigned lineno; |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
20 struct gsmhr_decoder_state *state; |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
21 uint8_t frame[TWTS005_MAX_FRAME]; |
|
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
22 unsigned frame_len; |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
23 int16_t params[GSMHR_NUM_PARAMS_DEC]; |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 int16_t pcm[160]; |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
25 int rc; |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 if (argc != 3) { |
|
608
d4e42ec4a688
hrutil: new program gsmhr-decode-r
Mychaela Falconia <falcon@freecalypso.org>
parents:
607
diff
changeset
|
28 fprintf(stderr, "usage: %s input.hex output.robe\n", argv[0]); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 exit(1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 } |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
31 hexf = fopen(argv[1], "r"); |
|
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
32 if (!hexf) { |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 perror(argv[1]); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 exit(1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 } |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
36 lineno = 0; |
|
608
d4e42ec4a688
hrutil: new program gsmhr-decode-r
Mychaela Falconia <falcon@freecalypso.org>
parents:
607
diff
changeset
|
37 outf = fopen(argv[2], "w"); |
|
d4e42ec4a688
hrutil: new program gsmhr-decode-r
Mychaela Falconia <falcon@freecalypso.org>
parents:
607
diff
changeset
|
38 if (!outf) { |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 perror(argv[2]); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 exit(1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 } |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
42 state = gsmhr_decoder_create(); |
|
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
43 if (!state) { |
|
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
44 fprintf(stderr, "gsmhr_decoder_create() failed!\n"); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 exit(1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 } |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 for (;;) { |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
48 rc = twts005_read_frame(hexf, &lineno, frame, &frame_len); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 if (rc < 0) { |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
50 fprintf(stderr, "%s line %u: not valid TW-TS-005\n", |
|
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
51 argv[1], lineno); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 exit(1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 } |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 if (!rc) |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 break; |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
56 rc = gsmhr_rtp_in_direct(frame, frame_len, params); |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
57 if (rc < 0) { |
|
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
58 fprintf(stderr, |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
59 "%s line %u: not a valid GSM-HR frame\n", |
|
537
f9eefb61fb2f
frtest: new program gsmfr-decode-tw5
Mychaela Falconia <falcon@freecalypso.org>
parents:
284
diff
changeset
|
60 argv[1], lineno); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 exit(1); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 } |
|
607
cdf3f5c618b8
hrutil: new program gsmhr-decode
Mychaela Falconia <falcon@freecalypso.org>
parents:
537
diff
changeset
|
63 gsmhr_decode_frame(state, params, pcm); |
|
608
d4e42ec4a688
hrutil: new program gsmhr-decode-r
Mychaela Falconia <falcon@freecalypso.org>
parents:
607
diff
changeset
|
64 write_pcm_to_robe(outf, pcm); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 } |
|
608
d4e42ec4a688
hrutil: new program gsmhr-decode-r
Mychaela Falconia <falcon@freecalypso.org>
parents:
607
diff
changeset
|
66 fclose(outf); |
|
12
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 exit(0); |
|
f88817a233fb
gsmfr-decode test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 } |
