[PATCH] osmo-bts[master]: Use libosmocodec for AMR RTP

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Max gerrit-no-reply at lists.osmocom.org
Mon Jun 6 10:52:04 UTC 2016


Review at  https://gerrit.osmocom.org/204

Use libosmocodec for AMR RTP

Add dependency on libosmocodec and use it to parse RTP with AMR payload.

Change-Id: I1464f9a12e3f92926d03d5dd5d18e8f0f7206dd9
---
M configure.ac
M src/osmo-bts-sysmo/Makefile.am
M src/osmo-bts-sysmo/tch.c
M tests/sysmobts/Makefile.am
4 files changed, 16 insertions(+), 19 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/04/204/1

diff --git a/configure.ac b/configure.ac
index 0951e18..60a9114 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,6 +22,7 @@
 
 dnl checks for libraries
 PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore  >= 0.3.9)
+PKG_CHECK_MODULES(LIBOSMOCODEC, libosmocodec)
 PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty)
 PKG_CHECK_MODULES(LIBOSMOTRAU, libosmotrau >= 0.3.2)
 PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 0.3.3)
diff --git a/src/osmo-bts-sysmo/Makefile.am b/src/osmo-bts-sysmo/Makefile.am
index 9ed89dc..34f4bb0 100644
--- a/src/osmo-bts-sysmo/Makefile.am
+++ b/src/osmo-bts-sysmo/Makefile.am
@@ -1,6 +1,6 @@
 AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(OPENBSC_INCDIR)
-AM_CFLAGS = -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOTRAU_CFLAGS) $(LIBOSMOABIS_CFLAGS) $(LIBOSMOCTRL_CFLAGS) $(LIBOSMOABIS_CFLAGS) $(LIBGPS_CFLAGS) $(ORTP_CFLAGS)
-COMMON_LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) $(LIBOSMOTRAU_LIBS) $(LIBOSMOABIS_LIBS) $(LIBOSMOCTRL_LIBS) $(ORTP_LIBS)
+AM_CFLAGS = -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOCODEC_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOTRAU_CFLAGS) $(LIBOSMOABIS_CFLAGS) $(LIBOSMOCTRL_CFLAGS) $(LIBOSMOABIS_CFLAGS) $(LIBGPS_CFLAGS) $(ORTP_CFLAGS)
+COMMON_LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOCODEC_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) $(LIBOSMOTRAU_LIBS) $(LIBOSMOABIS_LIBS) $(LIBOSMOCTRL_LIBS) $(ORTP_LIBS)
 
 EXTRA_DIST = misc/sysmobts_mgr.h misc/sysmobts_misc.h misc/sysmobts_par.h \
 	misc/sysmobts_eeprom.h misc/sysmobts_nl.h femtobts.h hw_misc.h \
diff --git a/src/osmo-bts-sysmo/tch.c b/src/osmo-bts-sysmo/tch.c
index e08d8a6..63d90af 100644
--- a/src/osmo-bts-sysmo/tch.c
+++ b/src/osmo-bts-sysmo/tch.c
@@ -32,6 +32,7 @@
 #include <osmocom/core/select.h>
 #include <osmocom/core/timer.h>
 #include <osmocom/core/bits.h>
+#include <osmocom/codec/codec.h>
 #include <osmocom/gsm/gsm_utils.h>
 #include <osmocom/trau/osmo_ortp.h>
 
@@ -298,10 +299,6 @@
 	return msg;
 }
 
-enum amr_frame_type {
-	AMR_FT_SID_AMR	= 8,
-};
-
 int get_amr_mode_idx(const struct amr_multirate_conf *amr_mrc, uint8_t cmi)
 {
 	unsigned int i;
@@ -323,12 +320,15 @@
 				struct gsm_lchan *lchan)
 {
 	struct amr_multirate_conf *amr_mrc = &lchan->tch.amr_mr;
-	uint8_t ft = (rtp_payload[1] >> 3) & 0xf;
-	uint8_t cmr = rtp_payload[0] >> 4;
-	uint8_t cmi, sti;
+	enum osmo_amr_type ft;
+	enum osmo_amr_quality bfi;
+	uint8_t cmr;
+	int8_t sti, cmi;
 	uint8_t *l1_cmi_idx = l1_payload;
 	uint8_t *l1_cmr_idx = l1_payload+1;
 	int rc;
+
+	osmo_amr_rtp_dec(rtp_payload, payload_len, &cmr, &cmi, &ft, &bfi, &sti);
 
 #ifdef USE_L1_RTP_MODE
 	memcpy(l1_payload+2, rtp_payload, payload_len);
@@ -353,11 +353,7 @@
 		cmi = ft;
 		LOGP(DRTP, LOGL_DEBUG, "SPEECH frame with CMI %u\n", cmi);
 		break;
-	case AMR_FT_SID_AMR:
-		/* extract the mode indiciation from last bits of
-		 * 39 bit SID frame (Table 6 / 26.101) */
-		cmi = (rtp_payload[2+4] >> 1) & 0x7;
-		sti = rtp_payload[2+4] & 0x10;
+	case AMR_SID:
 		LOGP(DRTP, LOGL_DEBUG, "SID %s frame with CMI %u\n",
 		     sti ? "UPDATE" : "FIRST", cmi);
 		break;
@@ -391,12 +387,12 @@
 	}
 #if 0
 	/* check for bad quality indication */
-	if (rtp_payload[1] & AMR_TOC_QBIT) {
+	if (bfi == AMR_GOOD) {
 		/* obtain frame type from AMR FT */
 		l1_payload[2] = ft;
 	} else {
 		/* bad quality, we should indicate that... */
-		if (ft == AMR_FT_SID_AMR) {
+		if (ft == AMR_SID) {
 			/* FIXME: Should we do GsmL1_TchPlType_Amr_SidBad? */
 			l1_payload[2] = ft;
 		} else {
@@ -405,7 +401,7 @@
 	}
 #endif
 
-	if (ft == AMR_FT_SID_AMR) {
+	if (ft == AMR_SID) {
 		/* store the last SID frame in lchan context */
 		unsigned int copy_len;
 		copy_len = OSMO_MIN(payload_len+1,
diff --git a/tests/sysmobts/Makefile.am b/tests/sysmobts/Makefile.am
index a00e7c2..2f267f3 100644
--- a/tests/sysmobts/Makefile.am
+++ b/tests/sysmobts/Makefile.am
@@ -1,6 +1,6 @@
 AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(OPENBSC_INCDIR) -I$(top_srcdir)/src/osmo-bts-sysmo
-AM_CFLAGS = -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOTRAU_CFLAGS) $(ORTP_CFLAGS)
-LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) $(LIBOSMOTRAU_LIBS) $(ORTP_LIBS)
+AM_CFLAGS = -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOCODEC_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOTRAU_CFLAGS) $(ORTP_CFLAGS)
+LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOCODEC_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) $(LIBOSMOTRAU_LIBS) $(ORTP_LIBS)
 
 noinst_PROGRAMS = sysmobts_test
 EXTRA_DIST = sysmobts_test.ok

-- 
To view, visit https://gerrit.osmocom.org/204
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1464f9a12e3f92926d03d5dd5d18e8f0f7206dd9
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>



More information about the gerrit-log mailing list