libosmocodec  0.11.0-dirty
Osmocom codec library
include/osmocom/codec/codec.h
Go to the documentation of this file.
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);
 All Data Structures Files Functions Variables Enumerations Enumerator Defines