annotate hrutil/etsi-dec.c @ 606:bc57dcfa91d0

hrutil: new program gsmhr-etsi-dec
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 04 Dec 2025 21:36:51 +0000
parents efrtest/etsi-dec.c@9f354d2aea13
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
606
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
2 * gsmhr-etsi-dec is a test program for our GSM-HR decoder: it reads ETSI's
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * .dec format as input and writes raw 16-bit PCM (same as ETSI's *.out)
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * as output, allowing our decoder to be tested with ETSI's official test
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * sequences.
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 *
606
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
7 * ETSI input and output files are read and written in the local machine's
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
8 * native byte order by default; -b and -l options can be used to force
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
9 * BE or LE, respectively.
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 */
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include <stdio.h>
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 #include <stdint.h>
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 #include <stdlib.h>
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #include <string.h>
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 #include <strings.h>
606
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
17 #include <unistd.h>
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
18 #include "../libgsmhr1/tw_gsmhr.h"
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
19 #include "../libtest/local_endian.h"
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 main(argc, argv)
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 char **argv;
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 {
150
da17c7f02c6c gsmefr-etsi-dec: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents: 145
diff changeset
24 char *infname, *outfname;
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 FILE *inf, *outf;
606
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
26 int opt, rc, big_endian;
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
27 struct gsmhr_decoder_state *state;
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 unsigned frame_no;
606
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
29 int16_t params[GSMHR_NUM_PARAMS_DEC];
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 int16_t pcm[160];
606
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
31 extern int optind;
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32
606
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
33 big_endian = is_native_big_endian();
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
34 while ((opt = getopt(argc, argv, "bl")) != EOF) {
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
35 switch (opt) {
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
36 case 'b':
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
37 big_endian = 1;
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
38 continue;
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
39 case 'l':
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
40 big_endian = 0;
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
41 continue;
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
42 default:
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
43 usage:
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
44 fprintf(stderr,
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
45 "usage: %s [-b|-l] input.dec output.out\n",
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
46 argv[0]);
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
47 exit(1);
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
48 }
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 }
606
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
50 if (argc != optind + 2)
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
51 goto usage;
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
52 infname = argv[optind];
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
53 outfname = argv[optind+1];
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
54
150
da17c7f02c6c gsmefr-etsi-dec: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents: 145
diff changeset
55 inf = fopen(infname, "r");
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 if (!inf) {
150
da17c7f02c6c gsmefr-etsi-dec: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents: 145
diff changeset
57 perror(infname);
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 exit(1);
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 }
150
da17c7f02c6c gsmefr-etsi-dec: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents: 145
diff changeset
60 outf = fopen(outfname, "w");
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 if (!outf) {
150
da17c7f02c6c gsmefr-etsi-dec: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents: 145
diff changeset
62 perror(outfname);
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 exit(1);
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 }
606
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
65 state = gsmhr_decoder_create();
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 if (!state) {
606
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
67 perror("gsmhr_decoder_create()");
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 exit(1);
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 }
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 for (frame_no = 0; ; frame_no++) {
606
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
71 rc = read_dec_frame(inf, big_endian, params, infname, frame_no);
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 if (!rc)
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 break;
606
bc57dcfa91d0 hrutil: new program gsmhr-etsi-dec
Mychaela Falconia <falcon@freecalypso.org>
parents: 435
diff changeset
74 gsmhr_decode_frame(state, params, pcm);
150
da17c7f02c6c gsmefr-etsi-dec: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents: 145
diff changeset
75 if (big_endian)
da17c7f02c6c gsmefr-etsi-dec: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents: 145
diff changeset
76 write_pcm_be(outf, pcm);
da17c7f02c6c gsmefr-etsi-dec: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents: 145
diff changeset
77 else
da17c7f02c6c gsmefr-etsi-dec: add BE support
Mychaela Falconia <falcon@freecalypso.org>
parents: 145
diff changeset
78 write_pcm_le(outf, pcm);
96
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 }
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 fclose(outf);
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 exit(0);
9cf1355bc071 gsmefr-etsi-dec test program written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 }