4 #include <osmocom/core/endian.h> 46 #if OSMO_IS_LITTLE_ENDIAN 55 #elif OSMO_IS_BIG_ENDIAN 57 uint8_t cmr:4, pad1:4;
58 uint8_t f:1, ft:4, q:1, pad2:2;
61 } __attribute__((packed));
63 static inline void *osmo_amr_get_payload(
struct amr_hdr *amrh)
65 return (uint8_t *)amrh +
sizeof(
struct amr_hdr);
87 #define AMR_FT_0_LEN_BITS 95 88 #define AMR_FT_1_LEN_BITS 103 89 #define AMR_FT_2_LEN_BITS 118 90 #define AMR_FT_3_LEN_BITS 134 91 #define AMR_FT_4_LEN_BITS 148 92 #define AMR_FT_5_LEN_BITS 159 93 #define AMR_FT_6_LEN_BITS 204 94 #define AMR_FT_7_LEN_BITS 244 95 #define AMR_FT_SID_LEN_BITS 39 101 #define AMR_FT_0_LEN ((AMR_FT_0_LEN_BITS+7)/8) 102 #define AMR_FT_1_LEN ((AMR_FT_1_LEN_BITS+7)/8) 103 #define AMR_FT_2_LEN ((AMR_FT_2_LEN_BITS+7)/8) 104 #define AMR_FT_3_LEN ((AMR_FT_3_LEN_BITS+7)/8) 105 #define AMR_FT_4_LEN ((AMR_FT_4_LEN_BITS+7)/8) 106 #define AMR_FT_5_LEN ((AMR_FT_5_LEN_BITS+7)/8) 107 #define AMR_FT_6_LEN ((AMR_FT_6_LEN_BITS+7)/8) 108 #define AMR_FT_7_LEN ((AMR_FT_7_LEN_BITS+7)/8) 109 #define AMR_FT_SID_LEN ((AMR_FT_SID_LEN_BITS+7)/8) 111 int osmo_amr_ft_valid(uint8_t amr_ft);
112 size_t osmo_amr_bytes(uint8_t amr_cmr);
113 size_t osmo_amr_bits(uint8_t amr_ft);
115 bool osmo_amr_is_oa(uint8_t *payload,
unsigned int payload_len);
116 int osmo_amr_oa_to_bwe(uint8_t *payload,
unsigned int payload_len);
117 int osmo_amr_bwe_to_oa(uint8_t *payload,
unsigned int payload_len,
118 unsigned int payload_maxlen);
119 int osmo_amr_bwe_to_iuup(uint8_t *payload,
unsigned int payload_len);
120 int osmo_amr_iuup_to_bwe(uint8_t *payload,
unsigned int payload_len,
121 unsigned int payload_maxlen);
122 int osmo_amr_bytes_to_ft(
size_t bytes);