FreeCalypso > hg > gsm-codec-lib
comparison amrconv/cod-parse.c @ 211:78d1a6513393
amrconv: new program amr-cod-parse
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 20 Apr 2023 01:30:46 +0000 |
parents | efrtest/cod-parse.c@bbe5669f0f29 |
children | 0beafaa0623f |
comparison
equal
deleted
inserted
replaced
210:7e490a8efe8a | 211:78d1a6513393 |
---|---|
1 /* | |
2 * This program reads an ETSI/3GPP AMR *.cod file and parses it into | |
3 * a human-readable form. | |
4 */ | |
5 | |
6 #include <stdio.h> | |
7 #include <stdint.h> | |
8 #include <stdlib.h> | |
9 #include <string.h> | |
10 #include <strings.h> | |
11 #include "amr_defs.h" | |
12 | |
13 extern char *amr_mode_names[16]; | |
14 extern unsigned amr_bit_lengths[9]; | |
15 | |
16 static char *type_names[4] = { | |
17 "Speech", | |
18 "SID_FIRST", | |
19 "SID_UPDATE", | |
20 "NO_DATA" | |
21 }; | |
22 | |
23 main(argc, argv) | |
24 char **argv; | |
25 { | |
26 char *infname; | |
27 FILE *inf; | |
28 int big_endian; | |
29 unsigned frame_no, type, mode; | |
30 uint8_t input_bits[COD_FORMAT_NWORDS]; | |
31 uint16_t params[MAX_PRM_SIZE]; | |
32 int rc; | |
33 | |
34 if (argc == 2 && argv[1][0] != '-') { | |
35 big_endian = 0; | |
36 infname = argv[1]; | |
37 } else if (argc == 3 && !strcmp(argv[1], "-b")) { | |
38 big_endian = 1; | |
39 infname = argv[2]; | |
40 } else { | |
41 fprintf(stderr, "usage: %s [-b] file.cod\n", argv[0]); | |
42 exit(1); | |
43 } | |
44 inf = fopen(infname, "r"); | |
45 if (!inf) { | |
46 perror(infname); | |
47 exit(1); | |
48 } | |
49 for (frame_no = 0; ; frame_no++) { | |
50 rc = read_cod_bits(inf, big_endian, input_bits, infname); | |
51 if (!rc) | |
52 break; | |
53 type = input_bits[0]; | |
54 mode = input_bits[245]; | |
55 printf("#%u: Type=%u Mode=%u", frame_no, type, mode); | |
56 if (type > TX_NO_DATA || mode > MR122) { | |
57 printf(" (unsupported)\n"); | |
58 continue; | |
59 } | |
60 printf(" (%s %s)\n", amr_mode_names[mode], type_names[type]); | |
61 switch (type) { | |
62 case TX_SPEECH_GOOD: | |
63 preen_frame_bits(input_bits+1, amr_bit_lengths[mode], | |
64 infname, frame_no); | |
65 reassemble_amr_params(input_bits+1, params, mode); | |
66 dump_amr_params(params, mode); | |
67 break; | |
68 case TX_SID_FIRST: | |
69 case TX_SID_UPDATE: | |
70 preen_frame_bits(input_bits+1, AMR_NBITS_SID, infname, | |
71 frame_no); | |
72 reassemble_amr_params(input_bits+1, params, MRDTX); | |
73 dump_amr_params(params, MRDTX); | |
74 break; | |
75 } | |
76 } | |
77 exit(0); | |
78 } |