libosmocodec
0.11.0-dirty
Osmocom codec library
|
00001 00003 #pragma once 00004 00005 #include <stdint.h> 00006 #include <stdbool.h> 00007 00008 #include <osmocom/core/utils.h> 00009 00010 /* TS 101318 Chapter 5.1: 260 bits + 4bit sig */ 00011 #define GSM_FR_BYTES 33 00012 /* TS 101318 Chapter 5.2: 112 bits, no sig */ 00013 #define GSM_HR_BYTES 14 00014 /* TS 101318 Chapter 5.3: 244 bits + 4bit sig */ 00015 #define GSM_EFR_BYTES 31 00016 00017 extern const uint16_t gsm610_bitorder[]; /* FR */ 00018 extern const uint16_t gsm620_unvoiced_bitorder[]; /* HR unvoiced */ 00019 extern const uint16_t gsm620_voiced_bitorder[]; /* HR voiced */ 00020 extern const uint16_t gsm660_bitorder[]; /* EFR */ 00021 00022 extern const uint16_t gsm690_12_2_bitorder[]; /* AMR 12.2 kbits */ 00023 extern const uint16_t gsm690_10_2_bitorder[]; /* AMR 10.2 kbits */ 00024 extern const uint16_t gsm690_7_95_bitorder[]; /* AMR 7.95 kbits */ 00025 extern const uint16_t gsm690_7_4_bitorder[]; /* AMR 7.4 kbits */ 00026 extern const uint16_t gsm690_6_7_bitorder[]; /* AMR 6.7 kbits */ 00027 extern const uint16_t gsm690_5_9_bitorder[]; /* AMR 5.9 kbits */ 00028 extern const uint16_t gsm690_5_15_bitorder[]; /* AMR 5.15 kbits */ 00029 extern const uint16_t gsm690_4_75_bitorder[]; /* AMR 4.75 kbits */ 00030 00031 extern const struct value_string osmo_amr_type_names[]; 00032 00033 enum osmo_amr_type { 00034 AMR_4_75 = 0, 00035 AMR_5_15 = 1, 00036 AMR_5_90 = 2, 00037 AMR_6_70 = 3, 00038 AMR_7_40 = 4, 00039 AMR_7_95 = 5, 00040 AMR_10_2 = 6, 00041 AMR_12_2 = 7, 00042 AMR_SID = 8, 00043 AMR_GSM_EFR_SID = 9, 00044 AMR_TDMA_EFR_SID = 10, 00045 AMR_PDC_EFR_SID = 11, 00046 AMR_NO_DATA = 15, 00047 }; 00048 00049 enum osmo_amr_quality { 00050 AMR_BAD = 0, 00051 AMR_GOOD = 1 00052 }; 00053 00058 static inline bool osmo_amr_is_speech(enum osmo_amr_type ft) 00059 { 00060 switch (ft) { 00061 case AMR_4_75: 00062 case AMR_5_15: 00063 case AMR_5_90: 00064 case AMR_6_70: 00065 case AMR_7_40: 00066 case AMR_7_95: 00067 case AMR_10_2: 00068 case AMR_12_2: 00069 return true; 00070 default: 00071 return false; 00072 } 00073 } 00074 00075 bool osmo_fr_check_sid(const uint8_t *rtp_payload, size_t payload_len); 00076 bool osmo_hr_check_sid(const uint8_t *rtp_payload, size_t payload_len); 00077 int osmo_amr_rtp_enc(uint8_t *payload, uint8_t cmr, enum osmo_amr_type ft, 00078 enum osmo_amr_quality bfi); 00079 int osmo_amr_rtp_dec(const uint8_t *payload, int payload_len, uint8_t *cmr, 00080 int8_t *cmi, enum osmo_amr_type *ft, 00081 enum osmo_amr_quality *bfi, int8_t *sti);