FreeCalypso > hg > gsm-codec-lib
comparison frtest/encode-r.c @ 295:962861d46ccf
gsmfr-encode-r: add -h option for encoder homing
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 14 Apr 2024 20:05:58 +0000 |
parents | e0b46ac2c326 |
children |
comparison
equal
deleted
inserted
replaced
294:cab6690535ec | 295:962861d46ccf |
---|---|
1 /* | 1 /* |
2 * gsmfr-encode-r is just like gsmfr-encode, but reads the source | 2 * gsmfr-encode-r is just like gsmfr-encode, but reads the source |
3 * linear PCM data to be encoded from a raw BE file ("robe") | 3 * linear PCM data to be encoded from a raw BE file ("robe") |
4 * instead of WAV. | 4 * instead of WAV. |
5 * | |
6 * Addendum: gsmfr-encode-r -h flag enables the later-spec feature | |
7 * of encoder homing. This option is not replicated in WAV-reading | |
8 * gsmfr-encode because it is deemed to be of no use with WAV. | |
5 */ | 9 */ |
6 | 10 |
7 #include <stdio.h> | 11 #include <stdio.h> |
8 #include <stdint.h> | 12 #include <stdint.h> |
9 #include <stdlib.h> | 13 #include <stdlib.h> |
14 #include <string.h> | |
15 #include <strings.h> | |
10 #include "../libgsmfr2/tw_gsmfr.h" | 16 #include "../libgsmfr2/tw_gsmfr.h" |
11 #include "../libtest/roberead.h" | 17 #include "../libtest/roberead.h" |
12 | 18 |
13 main(argc, argv) | 19 main(argc, argv) |
14 char **argv; | 20 char **argv; |
15 { | 21 { |
22 char *infname, *outfname; | |
16 FILE *inf, *binf; | 23 FILE *inf, *binf; |
17 struct gsmfr_0610_state *enc_state; | 24 struct gsmfr_0610_state *enc_state; |
18 int16_t pcm[160]; | 25 int16_t pcm[160]; |
19 uint8_t frame[33]; | 26 uint8_t frame[33]; |
20 int rc; | 27 int homing, rc; |
21 | 28 |
22 if (argc != 3) { | 29 if (argc == 3 && argv[1][0] != '-') { |
23 fprintf(stderr, "usage: %s input.robe output.gsm\n", argv[0]); | 30 homing = 0; |
31 infname = argv[1]; | |
32 outfname = argv[2]; | |
33 } else if (argc == 4 && !strcmp(argv[1], "-h")) { | |
34 homing = 1; | |
35 infname = argv[2]; | |
36 outfname = argv[3]; | |
37 } else { | |
38 fprintf(stderr, "usage: %s [-h] input.robe output.gsm\n", | |
39 argv[0]); | |
24 exit(1); | 40 exit(1); |
25 } | 41 } |
26 inf = fopen(argv[1], "r"); | 42 inf = fopen(infname, "r"); |
27 if (!inf) { | 43 if (!inf) { |
28 perror(argv[1]); | 44 perror(infname); |
29 exit(1); | 45 exit(1); |
30 } | 46 } |
31 binf = fopen(argv[2], "w"); | 47 binf = fopen(outfname, "w"); |
32 if (!binf) { | 48 if (!binf) { |
33 perror(argv[2]); | 49 perror(outfname); |
34 exit(1); | 50 exit(1); |
35 } | 51 } |
36 enc_state = gsmfr_0610_create(); | 52 enc_state = gsmfr_0610_create(); |
37 if (!enc_state) { | 53 if (!enc_state) { |
38 fprintf(stderr, "gsmfr_0610_create() failed!\n"); | 54 fprintf(stderr, "gsmfr_0610_create() failed!\n"); |
41 for (;;) { | 57 for (;;) { |
42 rc = robe_get_pcm_block(inf, pcm); | 58 rc = robe_get_pcm_block(inf, pcm); |
43 if (!rc) | 59 if (!rc) |
44 break; | 60 break; |
45 gsmfr_0610_encode_frame(enc_state, pcm, frame); | 61 gsmfr_0610_encode_frame(enc_state, pcm, frame); |
62 if (homing) | |
63 gsmfr_0610_encoder_homing(enc_state, pcm); | |
46 fwrite(frame, 1, sizeof frame, binf); | 64 fwrite(frame, 1, sizeof frame, binf); |
47 } | 65 } |
48 fclose(binf); | 66 fclose(binf); |
49 exit(0); | 67 exit(0); |
50 } | 68 } |