diff libtwamr/tw_amr.h @ 252:57b4053559ff

libtwamr: beginning of project
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 05 Apr 2024 01:02:23 +0000
parents
children 6b33f3ba4289
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtwamr/tw_amr.h	Fri Apr 05 01:02:23 2024 +0000
@@ -0,0 +1,101 @@
+/*
+ * This header file is the external public interface to libtwamr;
+ * it should be installed in the same system include directory
+ * as <gsm.h> and <gsm_efr.h> for more classic GSM codecs.
+ */
+
+#ifndef	__THEMWI_AMR_H
+#define	__THEMWI_AMR_H
+
+#include <stdint.h>
+
+/* AMR definitions that matter for the public interface */
+
+#define	AMR_MAX_PRM		57	/* max. num. of params      */
+#define	AMR_IETF_MAX_PL		32	/* max bytes in RFC 4867 frame */
+#define	AMR_IETF_HDR_LEN	6	/* .amr file header bytes */
+#define	AMR_COD_WORDS		250	/* # of words in 3GPP test seq format */
+
+enum RXFrameType {
+	RX_SPEECH_GOOD = 0,
+	RX_SPEECH_DEGRADED,
+	RX_ONSET,
+	RX_SPEECH_BAD,
+	RX_SID_FIRST,
+	RX_SID_UPDATE,
+	RX_SID_BAD,
+	RX_NO_DATA,
+	RX_N_FRAMETYPES		/* number of frame types */
+};
+
+enum TXFrameType {
+	TX_SPEECH_GOOD = 0,
+	TX_SID_FIRST,
+	TX_SID_UPDATE,
+	TX_NO_DATA,
+	TX_SPEECH_DEGRADED,
+	TX_SPEECH_BAD,
+	TX_SID_BAD,
+	TX_ONSET,
+	TX_N_FRAMETYPES		/* number of frame types */
+};
+
+enum Mode {
+	MR475 = 0,
+	MR515,            
+	MR59,
+	MR67,
+	MR74,
+	MR795,
+	MR102,
+	MR122,            
+	MRDTX
+};
+
+#define	AMR_FT_NODATA		15
+
+/* libtwamr encoder and decoder state */
+
+struct amr_encoder_state;	/* opaque to external users */
+struct amr_decoder_state;	/* ditto */
+
+struct amr_encoder_state *amr_encoder_create(int dtx);
+struct amr_decoder_state *amr_decoder_create(void);
+
+/* special freeing functions to deal with extra internal structs */
+void amr_encoder_free(struct amr_encoder_state *st);
+void amr_decoder_free(struct amr_decoder_state *st);
+
+/* reset state to initial */
+void amr_encoder_reset(struct amr_encoder_state *st);
+void amr_decoder_reset(struct amr_decoder_state *st);
+
+/* interface structure for passing frames of codec parameters */
+
+struct amr_param_frame {
+	uint8_t	type;
+	uint8_t	mode;
+	int16_t	param[AMR_MAX_PRM];
+};
+
+/* encoder and decoder main functions */
+
+void amr_encode_frame(struct amr_encoder_state *st, const int16_t *pcm,
+			struct amr_param_frame *frame);
+
+void amr_decode_frame(struct amr_decoder_state *st,
+			const struct amr_param_frame *frame, int16_t *pcm);
+
+/* stateless utility functions: format conversions */
+
+enum RXFrameType amr_txtype_to_rxtype(enum TXFrameType tx_type);
+
+unsigned amr_frame_to_ietf(const struct amr_param_frame *frame, uint8_t *bytes);
+int amr_frame_from_ietf(const uint8_t *bytes, struct amr_param_frame *frame);
+int amr_ietf_grok_first_octet(uint8_t fo);
+
+void amr_frame_to_tseq(const struct amr_param_frame *frame, uint16_t *cod);
+int amr_frame_from_tseq(const uint16_t *cod, int use_rxtype,
+			struct amr_param_frame *frame);
+
+#endif	/* include guard */