FreeCalypso > hg > gsm-codec-lib
changeset 47:89945a3b576e
gsmefr-rec2etsi test program added
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 25 Nov 2022 04:01:13 +0000 |
parents | edd2e20e7090 |
children | af4b075d0313 |
files | .hgignore Makefile efrtest/Makefile efrtest/rec2etsi.c |
diffstat | 4 files changed, 107 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Fri Nov 25 03:06:03 2022 +0000 +++ b/.hgignore Fri Nov 25 04:01:13 2022 +0000 @@ -9,6 +9,8 @@ ^dev/gsm0611-silence-fr$ ^dev/gsm0611-silence-fr\.out$ +^efrtest/gsmefr-rec2etsi$ + ^frtest/gsmfr-cvt-dlcap$ ^frtest/gsmfr-decode$ ^frtest/gsmfr-encode$
--- a/Makefile Fri Nov 25 03:06:03 2022 +0000 +++ b/Makefile Fri Nov 25 04:01:13 2022 +0000 @@ -2,13 +2,14 @@ CFLAGS= -O2 SUBDIR_LIBPROD= libgsmefr libgsmfrp -SUBDIR_UTILS= frtest miscutil pcap +SUBDIR_UTILS= efrtest frtest miscutil pcap SUBDIR_INT= dev libtest SUBDIR= ${SUBDIR_LIBPROD} ${SUBDIR_UTILS} ${SUBDIR_INT} all: ${SUBDIR} +efrtest: libgsmefr libtest frtest: libgsmfrp libtest miscutil: libgsmefr libtest
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/efrtest/Makefile Fri Nov 25 04:01:13 2022 +0000 @@ -0,0 +1,18 @@ +CC= gcc +CFLAGS= -O2 +PROGS= gsmefr-rec2etsi +LIBEFR= ../libgsmefr/libgsmefr.a +LIBTEST=../libtest/libtest.a +INSTBIN=/opt/freecalypso/bin + +all: ${PROGS} + +gsmefr-rec2etsi: rec2etsi.o ${LIBTEST} ${LIBEFR} + ${CC} ${CFLAGS} -o $@ rec2etsi.o ${LIBTEST} ${LIBEFR} + +install: + mkdir -p ${INSTBIN} + install -c ${PROGS} ${INSTBIN} + +clean: + rm -f *.o *.out ${PROGS}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/efrtest/rec2etsi.c Fri Nov 25 04:01:13 2022 +0000 @@ -0,0 +1,85 @@ +/* + * This program reads in an EFR session recording in our binary format + * (presumably obtained by converting from an RTP capture on the network + * side or from a Calypso DSP readout on the mobile side) and converts + * it into ETSI *.dec format, to be fed to ETSI decoder test program. + * + * The output from this program is in the local machine's native byte order. + */ + +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include "../libgsmefr/gsm_efr.h" +#include "../libtest/binreader.h" + +static void +frame2bits(frame, bits) + uint8_t *frame; + uint16_t *bits; +{ + unsigned nb, byte, mask, bit; + + for (nb = 0; nb < 31; nb++) { + byte = *frame++; + for (mask = 0x80; mask; mask >>= 1) { + if (byte & mask) + bit = 1; + else + bit = 0; + *bits++ = bit; + } + } +} + +main(argc, argv) + char **argv; +{ + FILE *binf, *outf; + uint8_t frame[BINFILE_MAX_FRAME]; + uint16_t bits[250]; + int rc; + + if (argc != 3) { + fprintf(stderr, "usage: %s input.rec output.dec\n", argv[0]); + exit(1); + } + binf = fopen(argv[1], "r"); + if (!binf) { + perror(argv[1]); + exit(1); + } + outf = fopen(argv[2], "w"); + if (!outf) { + perror(argv[2]); + exit(1); + } + for (;;) { + rc = binfile_read_frame(binf, frame); + if (rc < 0) { + fprintf(stderr, "error: garbage in %s\n", argv[1]); + exit(1); + } + if (!rc) + break; + if (frame[0] == 0xBF) { + bits[3] = 1; /* BFI */ + bzero(bits + 4, 245 * 2); + bits[249] = frame[1] & 1; /* TAF */ + } else if ((frame[0] & 0xF0) == 0xC0) { + frame2bits(frame, bits); + bits[248] = EFR_sid_classify(frame); + bits[249] = 0; /* TAF */ + } else { + fprintf(stderr, + "error: %s is not in EFR codec format\n", + argv[1]); + exit(1); + } + fwrite(bits + 3, 2, 247, outf); + } + fclose(outf); + exit(0); +}