# HG changeset patch # User Mychaela Falconia # Date 1715211806 0 # Node ID 1bf1bbcef763f145b15a84d026cde886922c1e37 # Parent 3eadaef8b28fb1a3cf838ca23f8dd1df341e07b7 amrefr: implement amrefr-encode-r utility diff -r 3eadaef8b28f -r 1bf1bbcef763 .hgignore --- a/.hgignore Wed May 08 23:03:28 2024 +0000 +++ b/.hgignore Wed May 08 23:43:26 2024 +0000 @@ -9,6 +9,7 @@ ^amrconv/gsm-amr2efr$ ^amrconv/gsm-efr2amr$ +^amrefr/amrefr-encode-r$ ^amrefr/amrefr-tseq-dec$ ^amrefr/amrefr-tseq-enc$ diff -r 3eadaef8b28f -r 1bf1bbcef763 Makefile --- a/Makefile Wed May 08 23:03:28 2024 +0000 +++ b/Makefile Wed May 08 23:43:26 2024 +0000 @@ -10,7 +10,7 @@ all: ${SUBDIR} amrconv: libtest -amrefr: libgsmefr libtwamr +amrefr: libgsmefr libtest libtwamr amrtest: libtwamr efrtest: libgsmefr libtest frtest: libgsmfr2 libtest diff -r 3eadaef8b28f -r 1bf1bbcef763 amrefr/Makefile --- a/amrefr/Makefile Wed May 08 23:03:28 2024 +0000 +++ b/amrefr/Makefile Wed May 08 23:43:26 2024 +0000 @@ -1,13 +1,18 @@ CC= gcc CFLAGS= -O2 -PROGS= amrefr-tseq-dec amrefr-tseq-enc +PROGS= amrefr-encode-r amrefr-tseq-dec amrefr-tseq-enc LIBEFR= ../libgsmefr/libgsmefr.a LIBAMR= ../libtwamr/libtwamr.a +LIBTEST=../libtest/libtest.a LIBS= ${LIBEFR} ${LIBAMR} +LIBST= ${LIBEFR} ${LIBAMR} ${LIBTEST} INSTBIN=/opt/freecalypso/bin all: ${PROGS} +amrefr-encode-r: encode-r.o ${LIBST} + ${CC} ${CFLAGS} -o $@ $^ + amrefr-tseq-dec: tseq-dec.o tseq-bit-rd.o tseq-pcm-out.o ${LIBS} ${CC} ${CFLAGS} -o $@ $^ diff -r 3eadaef8b28f -r 1bf1bbcef763 amrefr/encode-r.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/amrefr/encode-r.c Wed May 08 23:43:26 2024 +0000 @@ -0,0 +1,56 @@ +/* + * amrefr-encode-r is a counterpart to gsmefr-encode-r, implementing + * "alternative EFR" by way of libtwamr. Unlike standard gsmefr-encode-r, + * there is no -d option and no DTX support in this version. + */ + +#include +#include +#include +#include +#include +#include "../libgsmefr/gsm_efr.h" +#include "../libtwamr/tw_amr.h" +#include "../libtest/roberead.h" + +main(argc, argv) + char **argv; +{ + FILE *inf, *binf; + struct amr_encoder_state *state; + int16_t pcm[160]; + struct amr_param_frame amr_frame; + uint8_t efr_frame[EFR_RTP_FRAME_LEN]; + int rc; + + if (argc != 3) { + fprintf(stderr, "usage: %s input.robe output.gsmx\n", argv[0]); + exit(1); + } + inf = fopen(argv[1], "r"); + if (!inf) { + perror(argv[1]); + exit(1); + } + binf = fopen(argv[2], "w"); + if (!binf) { + perror(argv[2]); + exit(1); + } + state = amr_encoder_create(0, 0); + if (!state) { + perror("amr_encoder_create()"); + exit(1); + } + for (;;) { + rc = robe_get_pcm_block(inf, pcm); + if (!rc) + break; + amr_encode_frame(state, MR122, pcm, &amr_frame); + amr_dhf_subst_efr(&amr_frame); + EFR_params2frame(amr_frame.param, efr_frame); + fwrite(efr_frame, 1, sizeof efr_frame, binf); + } + fclose(binf); + exit(0); +}