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 }