blob: f7a8ad961206ee6224e65a77e4c08eac33d4f242 [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>
Maxec8f1922016-05-31 14:50:21 +02004#include <stdbool.h>
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +02005
Max92db1502016-05-25 18:13:51 +02006#include <osmocom/core/utils.h>
7
Diego Elio Pettenò23431c72012-06-29 13:01:27 -07008extern const uint16_t gsm610_bitorder[]; /* FR */
9extern const uint16_t gsm620_unvoiced_bitorder[]; /* HR unvoiced */
10extern const uint16_t gsm620_voiced_bitorder[]; /* HR voiced */
11extern const uint16_t gsm660_bitorder[]; /* EFR */
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +020012
Diego Elio Pettenò23431c72012-06-29 13:01:27 -070013extern const uint16_t gsm690_12_2_bitorder[]; /* AMR 12.2 kbits */
14extern const uint16_t gsm690_10_2_bitorder[]; /* AMR 10.2 kbits */
15extern const uint16_t gsm690_7_95_bitorder[]; /* AMR 7.95 kbits */
16extern const uint16_t gsm690_7_4_bitorder[]; /* AMR 7.4 kbits */
17extern const uint16_t gsm690_6_7_bitorder[]; /* AMR 6.7 kbits */
18extern const uint16_t gsm690_5_9_bitorder[]; /* AMR 5.9 kbits */
19extern const uint16_t gsm690_5_15_bitorder[]; /* AMR 5.15 kbits */
20extern const uint16_t gsm690_4_75_bitorder[]; /* AMR 4.75 kbits */
Max92db1502016-05-25 18:13:51 +020021
22extern const struct value_string osmo_amr_type_names[];
23
24enum osmo_amr_type {
25 AMR_4_75 = 0,
26 AMR_5_15 = 1,
27 AMR_5_90 = 2,
28 AMR_6_70 = 3,
29 AMR_7_40 = 4,
30 AMR_7_95 = 5,
31 AMR_10_2 = 6,
32 AMR_12_2 = 7,
33 AMR_SID = 8,
34 AMR_GSM_EFR_SID = 9,
35 AMR_TDMA_EFR_SID = 10,
36 AMR_PDC_EFR_SID = 11,
37 AMR_NO_DATA = 15,
38};
39
40enum osmo_amr_quality {
41 AMR_BAD = 0,
42 AMR_GOOD = 1
43};
44
Maxec8f1922016-05-31 14:50:21 +020045bool osmo_fr_check_sid(uint8_t *rtp_payload, size_t payload_len);
46bool osmo_hr_check_sid(uint8_t *rtp_payload, size_t payload_len);
Max92db1502016-05-25 18:13:51 +020047int osmo_amr_rtp_enc(uint8_t *payload, uint8_t cmr, enum osmo_amr_type ft,
48 enum osmo_amr_quality bfi);
49int osmo_amr_rtp_dec(const uint8_t *payload, int payload_len, uint8_t *cmr,
50 int8_t *cmi, enum osmo_amr_type *ft,
51 enum osmo_amr_quality *bfi, int8_t *sti);