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;
60} __attribute__((packed));
62static inline void *osmo_amr_get_payload(
struct amr_hdr *amrh)
64 return (uint8_t *)amrh +
sizeof(
struct amr_hdr);
86#define AMR_FT_0_LEN_BITS 95
87#define AMR_FT_1_LEN_BITS 103
88#define AMR_FT_2_LEN_BITS 118
89#define AMR_FT_3_LEN_BITS 134
90#define AMR_FT_4_LEN_BITS 148
91#define AMR_FT_5_LEN_BITS 159
92#define AMR_FT_6_LEN_BITS 204
93#define AMR_FT_7_LEN_BITS 244
94#define AMR_FT_SID_LEN_BITS 39
100#define AMR_FT_0_LEN ((AMR_FT_0_LEN_BITS+7)/8)
101#define AMR_FT_1_LEN ((AMR_FT_1_LEN_BITS+7)/8)
102#define AMR_FT_2_LEN ((AMR_FT_2_LEN_BITS+7)/8)
103#define AMR_FT_3_LEN ((AMR_FT_3_LEN_BITS+7)/8)
104#define AMR_FT_4_LEN ((AMR_FT_4_LEN_BITS+7)/8)
105#define AMR_FT_5_LEN ((AMR_FT_5_LEN_BITS+7)/8)
106#define AMR_FT_6_LEN ((AMR_FT_6_LEN_BITS+7)/8)
107#define AMR_FT_7_LEN ((AMR_FT_7_LEN_BITS+7)/8)
108#define AMR_FT_SID_LEN ((AMR_FT_SID_LEN_BITS+7)/8)
110int osmo_amr_ft_valid(uint8_t amr_ft);
111size_t osmo_amr_bytes(uint8_t amr_cmr);
113bool osmo_amr_is_oa(uint8_t *payload,
unsigned int payload_len);
114int osmo_amr_oa_to_bwe(uint8_t *payload,
unsigned int payload_len);
115int osmo_amr_bwe_to_oa(uint8_t *payload,
unsigned int payload_len,
116 unsigned int payload_maxlen);