libosmocodec  0.9.6-15.20170220git32ee5af8.fc34
Osmocom codec library
codec.h
1 #pragma once
2 
3 #include <stdint.h>
4 #include <stdbool.h>
5 
6 #include <osmocom/core/utils.h>
7 
8 extern const uint16_t gsm610_bitorder[]; /* FR */
9 extern const uint16_t gsm620_unvoiced_bitorder[]; /* HR unvoiced */
10 extern const uint16_t gsm620_voiced_bitorder[]; /* HR voiced */
11 extern const uint16_t gsm660_bitorder[]; /* EFR */
12 
13 extern const uint16_t gsm690_12_2_bitorder[]; /* AMR 12.2 kbits */
14 extern const uint16_t gsm690_10_2_bitorder[]; /* AMR 10.2 kbits */
15 extern const uint16_t gsm690_7_95_bitorder[]; /* AMR 7.95 kbits */
16 extern const uint16_t gsm690_7_4_bitorder[]; /* AMR 7.4 kbits */
17 extern const uint16_t gsm690_6_7_bitorder[]; /* AMR 6.7 kbits */
18 extern const uint16_t gsm690_5_9_bitorder[]; /* AMR 5.9 kbits */
19 extern const uint16_t gsm690_5_15_bitorder[]; /* AMR 5.15 kbits */
20 extern const uint16_t gsm690_4_75_bitorder[]; /* AMR 4.75 kbits */
21 
22 extern const struct value_string osmo_amr_type_names[];
23 
24 enum 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 
40 enum osmo_amr_quality {
41  AMR_BAD = 0,
42  AMR_GOOD = 1
43 };
44 
49 static inline bool osmo_amr_is_speech(enum osmo_amr_type ft)
50 {
51  switch (ft) {
52  case AMR_4_75:
53  case AMR_5_15:
54  case AMR_5_90:
55  case AMR_6_70:
56  case AMR_7_40:
57  case AMR_7_95:
58  case AMR_10_2:
59  case AMR_12_2:
60  return true;
61  default:
62  return false;
63  }
64 }
65 
66 bool osmo_fr_check_sid(uint8_t *rtp_payload, size_t payload_len);
67 bool osmo_hr_check_sid(uint8_t *rtp_payload, size_t payload_len);
68 int osmo_amr_rtp_enc(uint8_t *payload, uint8_t cmr, enum osmo_amr_type ft,
69  enum osmo_amr_quality bfi);
70 int osmo_amr_rtp_dec(const uint8_t *payload, int payload_len, uint8_t *cmr,
71  int8_t *cmi, enum osmo_amr_type *ft,
72  enum osmo_amr_quality *bfi, int8_t *sti);