changeset 32:9639a44ae2e7

dev: efr-bit-packing helper program
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 24 Nov 2022 01:41:49 +0000
parents 19a90fa1f608
children 88468d5b3590
files .hgignore dev/Makefile dev/efr-bit-packing.c
diffstat 3 files changed, 44 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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$
 
--- 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
 
--- /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 <stdio.h>
+#include <stdlib.h>
+
+#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);
+}