FreeCalypso > hg > gsm-codec-lib
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 251:946849291027 | 252:57b4053559ff |
|---|---|
| 1 /* | |
| 2 * This header file is the external public interface to libtwamr; | |
| 3 * it should be installed in the same system include directory | |
| 4 * as <gsm.h> and <gsm_efr.h> for more classic GSM codecs. | |
| 5 */ | |
| 6 | |
| 7 #ifndef __THEMWI_AMR_H | |
| 8 #define __THEMWI_AMR_H | |
| 9 | |
| 10 #include <stdint.h> | |
| 11 | |
| 12 /* AMR definitions that matter for the public interface */ | |
| 13 | |
| 14 #define AMR_MAX_PRM 57 /* max. num. of params */ | |
| 15 #define AMR_IETF_MAX_PL 32 /* max bytes in RFC 4867 frame */ | |
| 16 #define AMR_IETF_HDR_LEN 6 /* .amr file header bytes */ | |
| 17 #define AMR_COD_WORDS 250 /* # of words in 3GPP test seq format */ | |
| 18 | |
| 19 enum RXFrameType { | |
| 20 RX_SPEECH_GOOD = 0, | |
| 21 RX_SPEECH_DEGRADED, | |
| 22 RX_ONSET, | |
| 23 RX_SPEECH_BAD, | |
| 24 RX_SID_FIRST, | |
| 25 RX_SID_UPDATE, | |
| 26 RX_SID_BAD, | |
| 27 RX_NO_DATA, | |
| 28 RX_N_FRAMETYPES /* number of frame types */ | |
| 29 }; | |
| 30 | |
| 31 enum TXFrameType { | |
| 32 TX_SPEECH_GOOD = 0, | |
| 33 TX_SID_FIRST, | |
| 34 TX_SID_UPDATE, | |
| 35 TX_NO_DATA, | |
| 36 TX_SPEECH_DEGRADED, | |
| 37 TX_SPEECH_BAD, | |
| 38 TX_SID_BAD, | |
| 39 TX_ONSET, | |
| 40 TX_N_FRAMETYPES /* number of frame types */ | |
| 41 }; | |
| 42 | |
| 43 enum Mode { | |
| 44 MR475 = 0, | |
| 45 MR515, | |
| 46 MR59, | |
| 47 MR67, | |
| 48 MR74, | |
| 49 MR795, | |
| 50 MR102, | |
| 51 MR122, | |
| 52 MRDTX | |
| 53 }; | |
| 54 | |
| 55 #define AMR_FT_NODATA 15 | |
| 56 | |
| 57 /* libtwamr encoder and decoder state */ | |
| 58 | |
| 59 struct amr_encoder_state; /* opaque to external users */ | |
| 60 struct amr_decoder_state; /* ditto */ | |
| 61 | |
| 62 struct amr_encoder_state *amr_encoder_create(int dtx); | |
| 63 struct amr_decoder_state *amr_decoder_create(void); | |
| 64 | |
| 65 /* special freeing functions to deal with extra internal structs */ | |
| 66 void amr_encoder_free(struct amr_encoder_state *st); | |
| 67 void amr_decoder_free(struct amr_decoder_state *st); | |
| 68 | |
| 69 /* reset state to initial */ | |
| 70 void amr_encoder_reset(struct amr_encoder_state *st); | |
| 71 void amr_decoder_reset(struct amr_decoder_state *st); | |
| 72 | |
| 73 /* interface structure for passing frames of codec parameters */ | |
| 74 | |
| 75 struct amr_param_frame { | |
| 76 uint8_t type; | |
| 77 uint8_t mode; | |
| 78 int16_t param[AMR_MAX_PRM]; | |
| 79 }; | |
| 80 | |
| 81 /* encoder and decoder main functions */ | |
| 82 | |
| 83 void amr_encode_frame(struct amr_encoder_state *st, const int16_t *pcm, | |
| 84 struct amr_param_frame *frame); | |
| 85 | |
| 86 void amr_decode_frame(struct amr_decoder_state *st, | |
| 87 const struct amr_param_frame *frame, int16_t *pcm); | |
| 88 | |
| 89 /* stateless utility functions: format conversions */ | |
| 90 | |
| 91 enum RXFrameType amr_txtype_to_rxtype(enum TXFrameType tx_type); | |
| 92 | |
| 93 unsigned amr_frame_to_ietf(const struct amr_param_frame *frame, uint8_t *bytes); | |
| 94 int amr_frame_from_ietf(const uint8_t *bytes, struct amr_param_frame *frame); | |
| 95 int amr_ietf_grok_first_octet(uint8_t fo); | |
| 96 | |
| 97 void amr_frame_to_tseq(const struct amr_param_frame *frame, uint16_t *cod); | |
| 98 int amr_frame_from_tseq(const uint16_t *cod, int use_rxtype, | |
| 99 struct amr_param_frame *frame); | |
| 100 | |
| 101 #endif /* include guard */ |
