# HG changeset patch # User Mychaela Falconia # Date 1669254109 0 # Node ID 9639a44ae2e7ae2fb60fe8b89766cf5dac8e3add # Parent 19a90fa1f608ad221536a98d6805221e953b6ed9 dev: efr-bit-packing helper program diff -r 19a90fa1f608 -r 9639a44ae2e7 .hgignore --- a/.hgignore Wed Nov 23 08:40:08 2022 +0000 +++ b/.hgignore Thu Nov 24 01:41:49 2022 +0000 @@ -2,6 +2,8 @@ \.[oa]$ +^dev/efr-bit-packing$ +^dev/efr-bit-packing\.out$ ^dev/gsm0611-silence-fr$ ^dev/gsm0611-silence-fr\.out$ diff -r 19a90fa1f608 -r 9639a44ae2e7 dev/Makefile --- a/dev/Makefile Wed Nov 23 08:40:08 2022 +0000 +++ b/dev/Makefile Thu Nov 24 01:41:49 2022 +0000 @@ -1,10 +1,16 @@ CC= gcc CFLAGS= -O2 -PROGS= gsm0611-silence-fr -DATAOUT=gsm0611-silence-fr.out +PROGS= efr-bit-packing gsm0611-silence-fr +DATAOUT=efr-bit-packing.out gsm0611-silence-fr.out all: ${PROGS} ${DATAOUT} +efr-bit-packing: efr-bit-packing.c + ${CC} ${CFLAGS} -o $@ $@.c + +efr-bit-packing.out: efr-bit-packing + ./efr-bit-packing > $@ + gsm0611-silence-fr: gsm0611-silence-fr.c ${CC} ${CFLAGS} -o $@ $@.c -lgsm diff -r 19a90fa1f608 -r 9639a44ae2e7 dev/efr-bit-packing.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dev/efr-bit-packing.c Thu Nov 24 01:41:49 2022 +0000 @@ -0,0 +1,34 @@ +/* + * We would like to generate our EFR RTP frame packing and unpacking code + * using bitter and sweet utilities from libgsm, so we'll end up packing + * and unpacking EFR just like good old FR. However, because of our + * slightly different approach, entering the spec file for bitter and sweet + * manually would be tedious and error-prone, hence we are going to + * generate it with this program. + */ + +#include +#include + +#define PRM_NO 57 + +/* table from ETSI EFR code */ +static const unsigned bitno[PRM_NO] = +{ + 7, 8, 9, 8, 6, /* LSP VQ */ + 9, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5, /* first subframe */ + 6, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5, /* second subframe */ + 9, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5, /* third subframe */ + 6, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 5 /* fourth subframe */ +}; + +main(argc, argv) + char **argv; +{ + unsigned n; + + printf("EFR_MAGIC\t4\n"); + for (n = 0; n < PRM_NO; n++) + printf("params[%u]\t%u\n", n, bitno[n]); + exit(0); +}