aboutsummaryrefslogtreecommitdiffstats
path: root/include/osmocom/netif/amr.h
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@gnumonks.org>2012-07-07 17:43:14 +0200
committerPablo Neira Ayuso <pablo@gnumonks.org>2012-07-07 17:43:14 +0200
commita359315c8b6353e382d093ef45ab426a70d9ac5b (patch)
treeb725cf66099321bc4fde63b849ccb925c79614ec /include/osmocom/netif/amr.h
parente142ddfd7714cb067fa15216a432e758218027bf (diff)
include: add AMR definitions in amr.h header
As defined by RFC3267 in Octed-Aligned mode.
Diffstat (limited to 'include/osmocom/netif/amr.h')
-rw-r--r--include/osmocom/netif/amr.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/include/osmocom/netif/amr.h b/include/osmocom/netif/amr.h
new file mode 100644
index 0000000..7a48923
--- /dev/null
+++ b/include/osmocom/netif/amr.h
@@ -0,0 +1,65 @@
+#ifndef _OSMO_AMR_H_
+#define _OSMO_AMR_H_
+
+/* As defined by RFC3267: Adaptive Multi-Rate (AMR) */
+
+/*
+ * +----------------+-------------------+----------------
+ * | payload header | table of contents | speech data ...
+ * +----------------+-------------------+----------------
+ */
+
+/*
+ * 4.4. Octet-aligned Mode:
+ *
+ * 4.4.1. The Payload Header:
+ *
+ * 0 1 2 3 4 5 6 7
+ * +-+-+-+-+-+-+-+-+
+ * | CMR |X X X X|
+ * +-+-+-+-+-+-+-+-+
+ *
+ * According to: 3GPP TS 26.201 "AMR Wideband speech codec; Frame Structure",
+ * version 5.0.0 (2001-03), 3rd Generation Partnership Project (3GPP):
+ *
+ * Possible AMR-CMR values:
+ *
+ * 0-8 for AMR-WB (from 6.60 kbit/s to 23.85 kbit/s)
+ * 9 (SID) confort noise.
+ * 10-13 future use.
+ * 14 means lost speech frame (only available for AMR-WB)
+ * 15 means no data
+ *
+ * 4.4.2. The table of contents:
+ *
+ * 0 1 2 3 4 5 6 7
+ * +-+-+-+-+-+-+-+-+
+ * |F| FT |Q|X X|
+ * +-+-+-+-+-+-+-+-+
+ *
+ * X means padding.
+ */
+
+struct amr_hdr {
+#if __BYTE_ORDER == __BIG_ENDIAN
+ /* Payload Header */
+ uint8_t cmr:4, /* Codec Mode Request */
+ pad1:4;
+ /* Table of Contents */
+ uint8_t f:1, /* followed by another speech frame? */
+ ft:4, /* coding mode */
+ q:1, /* OK (not damaged) at origin? */
+ pad2:2;
+#elif __BYTE_ORDER == __LITTLE_ENDIAN
+ /* Payload Header */
+ uint8_t pad1:4,
+ cmr:4;
+ /* Table of Contents */
+ uint8_t pad2:2,
+ q:1,
+ ft:4,
+ f:1;
+#endif
+};
+
+#endif