# HG changeset patch # User Mychaela Falconia # Date 1715475402 0 # Node ID 2bdcd2ed9a1c4da8253f8a87a55dc5029aeb81fb # Parent 6bcb8e4ea669c2f7864e67efb3bd0285125f4ab0 pcmu2efr: generate AMR-EFR version diff -r 6bcb8e4ea669 -r 2bdcd2ed9a1c .hgignore --- a/.hgignore Wed Apr 17 00:03:31 2024 +0000 +++ b/.hgignore Sun May 12 00:56:42 2024 +0000 @@ -9,6 +9,7 @@ ^dmw/gen-dmw-bin$ ^dmw/dmw-[au]law\. +^pcmu2efr/amrefr-out$ ^pcmu2efr/stdefr-diff$ ^pcmu2efr/stdefr-out$ diff -r 6bcb8e4ea669 -r 2bdcd2ed9a1c pcmu2efr/Makefile --- a/pcmu2efr/Makefile Wed Apr 17 00:03:31 2024 +0000 +++ b/pcmu2efr/Makefile Sun May 12 00:56:42 2024 +0000 @@ -1,12 +1,16 @@ CC= gcc CFLAGS= -O2 -PROGS= stdefr-diff stdefr-out +PROGS= amrefr-out stdefr-diff stdefr-out +AMREFR_OBJS= amrefr-out.o gen-amrefr.o gen160.o seqsyncu.o ulaw-expand.o STDEFR_OBJS= gen-efr.o gen160.o seqsyncu.o stdefr-out.o ulaw-expand.o STDEFRD_OBJS= gen-efr.o gen160.o seqsyncu.o stdefr-diff.o ulaw-expand.o all: ${PROGS} +amrefr-out: ${AMREFR_OBJS} + ${CC} ${CFLAGS} -o $@ ${AMREFR_OBJS} -lgsmefr -ltwamr + stdefr-diff: ${STDEFRD_OBJS} ${CC} ${CFLAGS} -o $@ ${STDEFRD_OBJS} -lgsmefr diff -r 6bcb8e4ea669 -r 2bdcd2ed9a1c pcmu2efr/amrefr-out.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pcmu2efr/amrefr-out.c Sun May 12 00:56:42 2024 +0000 @@ -0,0 +1,31 @@ +/* + * This program computes 160 possible EFR encoder outputs using AMR-EFR hybrid, + * and writes the result out to a gsmx file. + */ + +#include +#include +#include + +extern uint8_t amr_efr[160][31]; + +main(argc, argv) + char **argv; +{ + FILE *outf; + + if (argc != 2) { + fprintf(stderr, "usage: %s gsmx-out-file\n", argv[0]); + exit(1); + } + generate_linear_inputs(); + generate_amr_efr(); + outf = fopen(argv[1], "w"); + if (!outf) { + perror(argv[1]); + exit(1); + } + fwrite(amr_efr, 31, 160, outf); + fclose(outf); + exit(0); +} diff -r 6bcb8e4ea669 -r 2bdcd2ed9a1c pcmu2efr/gen-amrefr.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pcmu2efr/gen-amrefr.c Sun May 12 00:56:42 2024 +0000 @@ -0,0 +1,35 @@ +/* + * The code in this module takes linear_inputs[][] from gen160.c + * and generates EFR-format frames by way of libtwamr encoder. + */ + +#include +#include +#include +#include +#include + +extern uint16_t linear_inputs[160][160]; + +uint8_t amr_efr[160][31]; + +void +generate_amr_efr(void) +{ + struct amr_encoder_state *st; + struct amr_param_frame amr_frame; + unsigned m; + + st = amr_encoder_create(0, 0); + if (!st) { + fprintf(stderr, "error: amr_encoder_create() failed\n"); + exit(1); + } + for (m = 0; m < 160; m++) { + amr_encoder_reset(st, 0, 0); + amr_encode_frame(st, MR122, (const int16_t *) linear_inputs[m], + &amr_frame); + EFR_params2frame(amr_frame.param, amr_efr[m]); + } + free(st); +}