blob: b7bcc78807165ed52049212126aecb4af003ad81 [file] [log] [blame]
Sylvain Munaut12ba7782014-06-16 10:13:40 +02001#pragma once
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +02002
3#include <stdint.h>
4
Max92db1502016-05-25 18:13:51 +02005#include <osmocom/core/utils.h>
6
Diego Elio Pettenò23431c72012-06-29 13:01:27 -07007extern const uint16_t gsm610_bitorder[]; /* FR */
8extern const uint16_t gsm620_unvoiced_bitorder[]; /* HR unvoiced */
9extern const uint16_t gsm620_voiced_bitorder[]; /* HR voiced */
10extern const uint16_t gsm660_bitorder[]; /* EFR */
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +020011
Diego Elio Pettenò23431c72012-06-29 13:01:27 -070012extern const uint16_t gsm690_12_2_bitorder[]; /* AMR 12.2 kbits */
13extern const uint16_t gsm690_10_2_bitorder[]; /* AMR 10.2 kbits */
14extern const uint16_t gsm690_7_95_bitorder[]; /* AMR 7.95 kbits */
15extern const uint16_t gsm690_7_4_bitorder[]; /* AMR 7.4 kbits */
16extern const uint16_t gsm690_6_7_bitorder[]; /* AMR 6.7 kbits */
17extern const uint16_t gsm690_5_9_bitorder[]; /* AMR 5.9 kbits */
18extern const uint16_t gsm690_5_15_bitorder[]; /* AMR 5.15 kbits */
19extern const uint16_t gsm690_4_75_bitorder[]; /* AMR 4.75 kbits */
Max92db1502016-05-25 18:13:51 +020020
21extern const struct value_string osmo_amr_type_names[];
22
23enum osmo_amr_type {
24 AMR_4_75 = 0,
25 AMR_5_15 = 1,
26 AMR_5_90 = 2,
27 AMR_6_70 = 3,
28 AMR_7_40 = 4,
29 AMR_7_95 = 5,
30 AMR_10_2 = 6,
31 AMR_12_2 = 7,
32 AMR_SID = 8,
33 AMR_GSM_EFR_SID = 9,
34 AMR_TDMA_EFR_SID = 10,
35 AMR_PDC_EFR_SID = 11,
36 AMR_NO_DATA = 15,
37};
38
39enum osmo_amr_quality {
40 AMR_BAD = 0,
41 AMR_GOOD = 1
42};
43
44int osmo_amr_rtp_enc(uint8_t *payload, uint8_t cmr, enum osmo_amr_type ft,
45 enum osmo_amr_quality bfi);
46int osmo_amr_rtp_dec(const uint8_t *payload, int payload_len, uint8_t *cmr,
47 int8_t *cmi, enum osmo_amr_type *ft,
48 enum osmo_amr_quality *bfi, int8_t *sti);