diff libgsmfr2/enc_main.c @ 265:a7b593e68ac3

libgsmfr2: integrate encoder main function from libgsm
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 14 Apr 2024 00:24:21 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libgsmfr2/enc_main.c	Sun Apr 14 00:24:21 2024 +0000
@@ -0,0 +1,64 @@
+/*
+ * This C source file has been adapted from TU-Berlin libgsm source
+ * (src/code.c), original notice follows:
+ *
+ * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
+ * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
+ * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
+ */
+
+#include <stdint.h>
+#include <string.h>
+#include "tw_gsmfr.h"
+#include "typedef.h"
+#include "ed_state.h"
+#include "ed_internal.h"
+
+/*
+ *  4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER
+ */
+
+void gsmfr_0610_encode_params(struct gsmfr_0610_state *S, const int16_t *s,
+			      struct gsmfr_param_frame *outp)
+{
+	int	k;
+	word	* dp  = S->dp0 + 120;	/* [ -120...-1 ] */
+	word	* dpp = dp;		/* [ 0...39 ]	 */
+
+	word	so[160];
+
+	Gsm_Preprocess			(S, s, so);
+	Gsm_LPC_Analysis		(S, so, outp->LARc);
+	Gsm_Short_Term_Analysis_Filter	(S, outp->LARc, so);
+
+	for (k = 0; k <= 3; k++) {
+
+		Gsm_Long_Term_Predictor	( S,
+					 so+k*40, /* d      [0..39] IN	*/
+					 dp,	  /* dp  [-120..-1] IN	*/
+					S->e + 5, /* e      [0..39] OUT	*/
+					dpp,	  /* dpp    [0..39] OUT */
+					&outp->Nc[k],
+					&outp->bc[k]);
+
+		Gsm_RPE_Encoding	( S,
+					S->e + 5,/* e	  ][0..39][ IN/OUT */
+					&outp->xmaxc[k], &outp->Mc[k],
+					outp->xMc[k] );
+		/*
+		 * Gsm_Update_of_reconstructed_short_time_residual_signal
+		 *			( dpp, S->e + 5, dp );
+		 */
+
+		{ register int i;
+		  register longword ltmp;
+		  for (i = 0; i <= 39; i++)
+			dp[ i ] = GSM_ADD( S->e[5 + i], dpp[i] );
+		}
+		dp  += 40;
+		dpp += 40;
+
+	}
+	(void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160),
+		120 * sizeof(*S->dp0) );
+}