[PATCH] osmo-bts[master]: sysmobts: 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
Wed Jun 8 11:38:56 UTC 2016


Hello Neels Hofmeyr, Harald Welte, Jenkins Builder,

I'd like you to reexamine a change.  Please visit

    https://gerrit.osmocom.org/204

to look at the new patch set (#3).

sysmobts: use libosmocodec for AMR RTP

Use libosmocodec function to parse RTP with AMR payload. This replaces
"manual" parsing of AMR frame with function covered by test suite and
makes adding DTXd support easier.

Related: OS#1563
Change-Id: I1464f9a12e3f92926d03d5dd5d18e8f0f7206dd9
---
M src/osmo-bts-sysmo/Makefile.am
M src/osmo-bts-sysmo/tch.c
M tests/sysmobts/Makefile.am
3 files changed, 15 insertions(+), 19 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/04/204/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: newpatchset
Gerrit-Change-Id: I1464f9a12e3f92926d03d5dd5d18e8f0f7206dd9
Gerrit-PatchSet: 3
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr at sysmocom.de>



More information about the gerrit-log mailing list