Portability fix: Adding local partial copy of libosmocore (TODO: minimize it)
diff --git a/lib/decoding/osmocom/codec/codec.h b/lib/decoding/osmocom/codec/codec.h
new file mode 100644
index 0000000..6a1bf9f
--- /dev/null
+++ b/lib/decoding/osmocom/codec/codec.h
@@ -0,0 +1,81 @@
+/*! \file codec.h */
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include <osmocom/core/utils.h>
+
+/* TS 101318 Chapter 5.1: 260 bits + 4bit sig */
+#define GSM_FR_BYTES	33
+/* TS 101318 Chapter 5.2: 112 bits, no sig */
+#define GSM_HR_BYTES	14
+/* TS 101318 Chapter 5.3: 244 bits + 4bit sig */
+#define GSM_EFR_BYTES	31
+
+extern const uint16_t gsm610_bitorder[];	/* FR */
+extern const uint16_t gsm620_unvoiced_bitorder[]; /* HR unvoiced */
+extern const uint16_t gsm620_voiced_bitorder[];   /* HR voiced */
+extern const uint16_t gsm660_bitorder[];	/* EFR */
+
+extern const uint16_t gsm690_12_2_bitorder[];	/* AMR 12.2  kbits */
+extern const uint16_t gsm690_10_2_bitorder[];	/* AMR 10.2  kbits */
+extern const uint16_t gsm690_7_95_bitorder[];	/* AMR  7.95 kbits */
+extern const uint16_t gsm690_7_4_bitorder[];	/* AMR  7.4  kbits */
+extern const uint16_t gsm690_6_7_bitorder[];	/* AMR  6.7  kbits */
+extern const uint16_t gsm690_5_9_bitorder[];	/* AMR  5.9  kbits */
+extern const uint16_t gsm690_5_15_bitorder[];	/* AMR  5.15 kbits */
+extern const uint16_t gsm690_4_75_bitorder[];	/* AMR  4.75 kbits */
+
+extern const struct value_string osmo_amr_type_names[];
+
+enum osmo_amr_type {
+       AMR_4_75 = 0,
+       AMR_5_15 = 1,
+       AMR_5_90 = 2,
+       AMR_6_70 = 3,
+       AMR_7_40 = 4,
+       AMR_7_95 = 5,
+       AMR_10_2 = 6,
+       AMR_12_2 = 7,
+       AMR_SID = 8,
+       AMR_GSM_EFR_SID = 9,
+       AMR_TDMA_EFR_SID = 10,
+       AMR_PDC_EFR_SID = 11,
+       AMR_NO_DATA = 15,
+};
+
+enum osmo_amr_quality {
+       AMR_BAD = 0,
+       AMR_GOOD = 1
+};
+
+/*! Check if given AMR Frame Type is a speech frame
+ *  \param[in] ft AMR Frame Type
+ *  \returns true if AMR with given Frame Type contains voice, false otherwise
+ */
+static inline bool osmo_amr_is_speech(enum osmo_amr_type ft)
+{
+	switch (ft) {
+	case AMR_4_75:
+	case AMR_5_15:
+	case AMR_5_90:
+	case AMR_6_70:
+	case AMR_7_40:
+	case AMR_7_95:
+	case AMR_10_2:
+	case AMR_12_2:
+		return true;
+	default:
+		return false;
+	}
+}
+
+bool osmo_fr_check_sid(const uint8_t *rtp_payload, size_t payload_len);
+bool osmo_hr_check_sid(const uint8_t *rtp_payload, size_t payload_len);
+int osmo_amr_rtp_enc(uint8_t *payload, uint8_t cmr, enum osmo_amr_type ft,
+		     enum osmo_amr_quality bfi);
+int osmo_amr_rtp_dec(const uint8_t *payload, int payload_len, uint8_t *cmr,
+		     int8_t *cmi, enum osmo_amr_type *ft,
+		     enum osmo_amr_quality *bfi, int8_t *sti);