From 92db150488bdadf6577a4968feabd5a3ab694c5e Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 25 May 2016 18:13:51 +0200 Subject: Add helper functions for AMR codec * add functions to encode/decode various codec paramters from RTP payload with AMR frame according to RFC 4867 * those functions are extended version based on code from osmo-bts' amr.c by Andreas Eversberg * add corresponding enum types and strings for logging * add regression tests It's useful both to replace manual parsing in osmo-bts with fuctions covered by test suite and as a debugging helpers for issues related to AMR. Change-Id: Ia217679a07d3fbc970f435e20f6eac33d34bd597 Related: OS#1562 Reviewed-on: https://gerrit.osmocom.org/118 Tested-by: Jenkins Builder Reviewed-by: Holger Freyther --- include/osmocom/codec/codec.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'include/osmocom/codec/codec.h') diff --git a/include/osmocom/codec/codec.h b/include/osmocom/codec/codec.h index d126e0f7..b7bcc788 100644 --- a/include/osmocom/codec/codec.h +++ b/include/osmocom/codec/codec.h @@ -2,6 +2,8 @@ #include +#include + extern const uint16_t gsm610_bitorder[]; /* FR */ extern const uint16_t gsm620_unvoiced_bitorder[]; /* HR unvoiced */ extern const uint16_t gsm620_voiced_bitorder[]; /* HR voiced */ @@ -15,3 +17,32 @@ extern const uint16_t gsm690_6_7_bitorder[]; /* AMR 6.7 kbits */ extern const uint16_t gsm690_5_9_bitorder[]; /* AMR 5.9 kbits */ extern const uint16_t gsm690_5_15_bitorder[]; /* AMR 5.15 kbits */ extern const uint16_t gsm690_4_75_bitorder[]; /* AMR 4.75 kbits */ + +extern const struct value_string osmo_amr_type_names[]; + +enum osmo_amr_type { + AMR_4_75 = 0, + AMR_5_15 = 1, + AMR_5_90 = 2, + AMR_6_70 = 3, + AMR_7_40 = 4, + AMR_7_95 = 5, + AMR_10_2 = 6, + AMR_12_2 = 7, + AMR_SID = 8, + AMR_GSM_EFR_SID = 9, + AMR_TDMA_EFR_SID = 10, + AMR_PDC_EFR_SID = 11, + AMR_NO_DATA = 15, +}; + +enum osmo_amr_quality { + AMR_BAD = 0, + AMR_GOOD = 1 +}; + +int osmo_amr_rtp_enc(uint8_t *payload, uint8_t cmr, enum osmo_amr_type ft, + enum osmo_amr_quality bfi); +int osmo_amr_rtp_dec(const uint8_t *payload, int payload_len, uint8_t *cmr, + int8_t *cmi, enum osmo_amr_type *ft, + enum osmo_amr_quality *bfi, int8_t *sti); -- cgit v1.2.3