diff libtwamr/tseq_in.c @ 429:3ce30a95769e

libtwamr: implement test sequence input
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 07 May 2024 22:34:11 +0000
parents libtwamr/tseq_out.c@eced57698c03
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtwamr/tseq_in.c	Tue May 07 22:34:11 2024 +0000
@@ -0,0 +1,49 @@
+/*
+ * In this module we implement decoder input conversion from 3GPP
+ * test sequence format to our internal struct amr_param_frame.
+ */
+
+#include <stdint.h>
+#include <string.h>
+#include "tw_amr.h"
+#include "namespace.h"
+#include "typedef.h"
+#include "cnst.h"
+#include "bits2prm.h"
+
+int amr_frame_from_tseq(const uint16_t *cod, int use_rxtype,
+			struct amr_param_frame *frame)
+{
+	enum RXFrameType rx_type;
+	int rc;
+
+	if (use_rxtype) {
+		if (cod[0] >= RX_N_FRAMETYPES)
+			return -1;
+		rx_type = cod[0];
+	} else {
+		rc = amr_txtype_to_rxtype(cod[0], &rx_type);
+		if (rc < 0)
+			return -1;
+	}
+	frame->type = rx_type;
+	if (rx_type == RX_NO_DATA) {
+		frame->mode = 0xFF;
+		return 0;
+	}
+	if (cod[MAX_SERIAL_SIZE+1] > 7)
+		return -2;
+	frame->mode = cod[MAX_SERIAL_SIZE+1];
+	switch (rx_type) {
+	case RX_SPEECH_GOOD:
+	case RX_SPEECH_DEGRADED:
+	case RX_SPEECH_BAD:
+		Bits2prm(frame->mode, cod + 1, frame->param);
+		break;
+	case RX_SID_UPDATE:
+	case RX_SID_BAD:
+		Bits2prm(MRDTX, cod + 1, frame->param);
+		break;
+	}
+	return 0;
+}