FreeCalypso > hg > gsm-codec-lib
changeset 245:6de564ef70d3
frtest: new program gsmfr-cod2std
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 09 May 2023 22:32:48 +0000 |
parents | fcc0887ff0d0 |
children | a55fcc8b6daf |
files | .hgignore frtest/Makefile frtest/cod2std.c |
diffstat | 3 files changed, 94 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Tue May 09 17:28:19 2023 +0000 +++ b/.hgignore Tue May 09 22:32:48 2023 +0000 @@ -43,6 +43,7 @@ ^efrtest/gsmefr-etsi-enc$ ^efrtest/gsmefr-rec2etsi$ +^frtest/gsmfr-cod2std$ ^frtest/gsmfr-decode$ ^frtest/gsmfr-decode-r$ ^frtest/gsmfr-dlcap-gsmx$
--- a/frtest/Makefile Tue May 09 17:28:19 2023 +0000 +++ b/frtest/Makefile Tue May 09 22:32:48 2023 +0000 @@ -1,7 +1,8 @@ CC= gcc CFLAGS= -O2 -PROGS= gsmfr-decode gsmfr-decode-r gsmfr-dlcap-gsmx gsmfr-dlcap-parse \ - gsmfr-encode gsmfr-encode-r gsmfr-hand-test gsmfr-max-out gsmfr-preproc +PROGS= gsmfr-cod2std gsmfr-decode gsmfr-decode-r gsmfr-dlcap-gsmx \ + gsmfr-dlcap-parse gsmfr-encode gsmfr-encode-r gsmfr-hand-test \ + gsmfr-max-out gsmfr-preproc LIBPP= ../libgsmfrp/libgsmfrp.a LIBTEST=../libtest/libtest.a LIBDEC= ${LIBTEST} ${LIBPP} @@ -9,6 +10,9 @@ all: ${PROGS} +gsmfr-cod2std: cod2std.o + ${CC} ${CFLAGS} -o $@ cod2std.o -lgsm + gsmfr-decode: decode.o ${LIBDEC} ${CC} ${CFLAGS} -o $@ decode.o ${LIBDEC} -lgsm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/frtest/cod2std.c Tue May 09 22:32:48 2023 +0000 @@ -0,0 +1,87 @@ +/* + * This program reads an FR codec parameters file in ETSI *.cod test sequence + * format and converts it into classic libgsm format. + */ + +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include <gsm.h> + +static void +bytes_to_params(bytes, params, big_endian) + uint8_t *bytes; + gsm_signal *params; +{ + uint8_t *sp; + unsigned n; + uint16_t val; + + sp = bytes; + for (n = 0; n < 76; n++) { + if (big_endian) + val = ((uint16_t) sp[0] << 8) | ((uint16_t) sp[1]); + else + val = ((uint16_t) sp[1] << 8) | ((uint16_t) sp[0]); + params[n] = val; + sp += 2; + } +} + +main(argc, argv) + char **argv; +{ + char *infname, *outfname; + FILE *inf, *outf; + gsm dummy_state; + int big_endian; + unsigned frame_no; + uint8_t input_bytes[76*2], frame[33]; + gsm_signal params[76]; + int cc; + + if (argc == 3 && argv[1][0] != '-') { + big_endian = 0; + infname = argv[1]; + outfname = argv[2]; + } else if (argc == 4 && !strcmp(argv[1], "-b")) { + big_endian = 1; + infname = argv[2]; + outfname = argv[3]; + } else { + fprintf(stderr, "usage: %s [-b] input.cod output.gsm\n", + argv[0]); + exit(1); + } + inf = fopen(infname, "r"); + if (!inf) { + perror(infname); + exit(1); + } + outf = fopen(outfname, "w"); + if (!outf) { + perror(outfname); + exit(1); + } + dummy_state = gsm_create(); + if (!dummy_state) { + fprintf(stderr, "gsm_create() failed!\n"); + exit(1); + } + for (frame_no = 0; ; frame_no++) { + cc = fread(input_bytes, 2, 76, inf); + if (cc == 0) + break; + if (cc != 76) { + fprintf(stderr, "error: short read from %s\n", infname); + exit(1); + } + bytes_to_params(input_bytes, params, big_endian); + gsm_implode(dummy_state, params, frame); + fwrite(frame, 1, sizeof frame, outf); + } + fclose(outf); + exit(0); +}