8 #include <osmocom/core/endian.h> 31 #if OSMO_IS_LITTLE_ENDIAN 38 #elif OSMO_IS_BIG_ENDIAN 40 uint8_t cmr:4, f:1, ft_hi:3;
41 uint8_t ft_lo:1, q:1, data_start:6;
44 } __attribute__((packed));
47 #define AMR_HDR_BWE_LEN_BITS 10 81 #if OSMO_IS_LITTLE_ENDIAN 90 #elif OSMO_IS_BIG_ENDIAN 92 uint8_t cmr:4, pad1:4;
93 uint8_t f:1, ft:4, q:1, pad2:2;
96 } __attribute__((packed));
98 static inline void *osmo_amr_get_payload(
struct amr_hdr *amrh)
100 return (uint8_t *)amrh +
sizeof(
struct amr_hdr);
115 #define AMR_FT_GSM_EFR_SID 9 116 #define AMR_FT_TDMA_EFR_SID 10 117 #define AMR_FT_PDC_EFR_SID 11 119 #define AMR_FT_NO_DATA 15 120 #define AMR_FT_MAX 16 127 #define AMR_FT_0_LEN_BITS 95 128 #define AMR_FT_1_LEN_BITS 103 129 #define AMR_FT_2_LEN_BITS 118 130 #define AMR_FT_3_LEN_BITS 134 131 #define AMR_FT_4_LEN_BITS 148 132 #define AMR_FT_5_LEN_BITS 159 133 #define AMR_FT_6_LEN_BITS 204 134 #define AMR_FT_7_LEN_BITS 244 135 #define AMR_FT_SID_LEN_BITS 39 136 #define AMR_FT_GSM_EFR_SID_LEN_BITS 43 137 #define AMR_FT_TDMA_EFR_SID_LEN_BITS 38 138 #define AMR_FT_PDC_EFR_SID_LEN_BITS 37 140 #define AMR_FT_NO_DATA_LEN_BITS 0 146 #define AMR_FT_0_LEN ((AMR_FT_0_LEN_BITS+7)/8) 147 #define AMR_FT_1_LEN ((AMR_FT_1_LEN_BITS+7)/8) 148 #define AMR_FT_2_LEN ((AMR_FT_2_LEN_BITS+7)/8) 149 #define AMR_FT_3_LEN ((AMR_FT_3_LEN_BITS+7)/8) 150 #define AMR_FT_4_LEN ((AMR_FT_4_LEN_BITS+7)/8) 151 #define AMR_FT_5_LEN ((AMR_FT_5_LEN_BITS+7)/8) 152 #define AMR_FT_6_LEN ((AMR_FT_6_LEN_BITS+7)/8) 153 #define AMR_FT_7_LEN ((AMR_FT_7_LEN_BITS+7)/8) 154 #define AMR_FT_SID_LEN ((AMR_FT_SID_LEN_BITS+7)/8) 155 #define AMR_FT_GSM_EFR_SID_LEN ((AMR_FT_GSM_EFR_SID_LEN_BITS+7)/8) 156 #define AMR_FT_TDMA_EFR_SID_LEN ((AMR_FT_TDMA_EFR_SID_LEN_BITS+7)/8) 157 #define AMR_FT_PDC_EFR_SID_LEN ((AMR_FT_PDC_EFR_SID_LEN_BITS+7)/8) 159 #define AMR_FT_NO_DATA_LEN ((AMR_FT_NO_DATA_LEN_BITS+7)/8) 161 int osmo_amr_ft_valid(uint8_t amr_ft);
162 size_t osmo_amr_bytes(uint8_t amr_cmr);
163 size_t osmo_amr_bits(uint8_t amr_ft);
165 bool osmo_amr_is_oa(
const uint8_t *payload,
unsigned int payload_len);
166 int osmo_amr_oa_to_bwe(uint8_t *payload,
unsigned int payload_len);
167 int osmo_amr_bwe_to_oa(uint8_t *payload,
unsigned int payload_len,
168 unsigned int payload_maxlen);
169 int osmo_amr_bwe_to_iuup(uint8_t *payload,
unsigned int payload_len);
170 int osmo_amr_iuup_to_bwe(uint8_t *payload,
unsigned int payload_len,
171 unsigned int payload_maxlen);
172 int osmo_amr_bytes_to_ft(
size_t bytes);