FreeCalypso > hg > gsm-codec-lib
view libtwamr/tw_amr.h @ 514:67b13a6a63c9
libgsmhr1: implement validation for *.dec frames
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 25 Aug 2024 19:14:40 +0000 |
parents | fa0652115168 |
children |
line wrap: on
line source
/* * This header file is the external public interface to libtwamr; * it should be installed in the same system include directory * as <tw_gsmfr.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, int use_vad2); struct amr_decoder_state *amr_decoder_create(void); /* reset state to initial */ void amr_encoder_reset(struct amr_encoder_state *st, int dtx, int use_vad2); 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, enum Mode mode, 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 */ int amr_txtype_to_rxtype(enum TXFrameType tx_type, enum RXFrameType *rx_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); /* stateless function and const data for DHF detection */ int amr_check_dhf(const struct amr_param_frame *frame, int first_sub_only); extern const int16_t amr_dhf_mr475[AMR_MAX_PRM]; extern const int16_t amr_dhf_mr515[AMR_MAX_PRM]; extern const int16_t amr_dhf_mr59[AMR_MAX_PRM]; extern const int16_t amr_dhf_mr67[AMR_MAX_PRM]; extern const int16_t amr_dhf_mr74[AMR_MAX_PRM]; extern const int16_t amr_dhf_mr795[AMR_MAX_PRM]; extern const int16_t amr_dhf_mr102[AMR_MAX_PRM]; extern const int16_t amr_dhf_mr122[AMR_MAX_PRM]; extern const int16_t amr_dhf_gsmefr[AMR_MAX_PRM]; /* DHF transformation on encoder output, for AMR-EFR emulation */ void amr_dhf_subst_efr(struct amr_param_frame *frame); void amr_dhf_subst_efr2(struct amr_param_frame *frame, const int16_t *pcm); /* public const datum: RFC 4867 file header */ extern const uint8_t amr_file_header_magic[AMR_IETF_HDR_LEN]; #endif /* include guard */