FreeCalypso > hg > gsm-codec-lib
changeset 105:ecfbced76fea
gsm-amr2efr: add -w option to simulate common wrong implementation
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 27 Nov 2022 05:59:10 +0000 |
parents | 7f43089e9a7a |
children | e7c8d739c4c8 |
files | miscutil/amr2efr.c |
diffstat | 1 files changed, 24 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/miscutil/amr2efr.c Sun Nov 27 05:43:26 2022 +0000 +++ b/miscutil/amr2efr.c Sun Nov 27 05:59:10 2022 +0000 @@ -18,27 +18,37 @@ main(argc, argv) char **argv; { + char *infname, *outfname; FILE *inf, *outf; - int hdrb; + int wrong_flag, hdrb; uint8_t frm_in[31], frm_out[31]; unsigned bit_a, bit_n; - if (argc != 3) { - fprintf(stderr, "usage: %s input.amr output.gsmx\n", argv[0]); + if (argc == 3 && argv[1][0] != '-') { + wrong_flag = 0; + infname = argv[1]; + outfname = argv[2]; + } else if (argc == 4 && !strcmp(argv[1], "-w")) { + wrong_flag = 1; + infname = argv[2]; + outfname = argv[3]; + } else { + fprintf(stderr, "usage: %s [-w] input.amr output.gsmx\n", + argv[0]); exit(1); } - inf = fopen(argv[1], "r"); + inf = fopen(infname, "r"); if (!inf) { - perror(argv[1]); + perror(infname); exit(1); } if (fread(frm_in, 1, 6, inf) != 6 || bcmp(frm_in, amr_file_hdr, 6)) { - fprintf(stderr, "error: %s is not in AMR format\n", argv[1]); + fprintf(stderr, "error: %s is not in AMR format\n", infname); exit(1); } - outf = fopen(argv[2], "w"); + outf = fopen(outfname, "w"); if (!outf) { - perror(argv[2]); + perror(outfname); exit(1); } for (;;) { @@ -47,17 +57,20 @@ break; if ((hdrb & 0x78) != 0x38) { fprintf(stderr, "error: unexpected content in %s\n", - argv[1]); + infname); exit(1); } if (fread(frm_in, 1, 31, inf) != 31) { - fprintf(stderr, "error: short read from %s\n", argv[1]); + fprintf(stderr, "error: short read from %s\n", infname); exit(1); } bzero(frm_out, 31); frm_out[0] = 0xC0; for (bit_a = 0; bit_a < 244; bit_a++) { - bit_n = amr_122_bit_order[bit_a]; + if (wrong_flag) + bit_n = bit_a; + else + bit_n = amr_122_bit_order[bit_a]; msb_set_bit(frm_out, 4 + bit_n, msb_get_bit(frm_in, bit_a)); }