MNCC: use codec_mapping, drop mgcp_codec_to_mncc_payload_msg_type()
Change-Id: I8995ef43b9f79bc1db5672362c6433e4d96dd9e0
diff --git a/src/libmsc/mncc_call.c b/src/libmsc/mncc_call.c
index c9a6d56..fbf96f3 100644
--- a/src/libmsc/mncc_call.c
+++ b/src/libmsc/mncc_call.c
@@ -35,6 +35,7 @@
#include <osmocom/msc/rtp_stream.h>
#include <osmocom/msc/msub.h>
#include <osmocom/msc/vlr.h>
+#include <osmocom/msc/codec_mapping.h>
struct osmo_fsm mncc_call_fsm;
static bool mncc_call_tx_rtp_create(struct mncc_call *mncc_call);
@@ -274,25 +275,6 @@
return mncc_call_tx_rtp_create(mncc_call);
}
-/* Convert enum mgcp_codecs to an gsm_mncc_rtp->payload_msg_type value. */
-uint32_t mgcp_codec_to_mncc_payload_msg_type(enum mgcp_codecs codec)
-{
- switch (codec) {
- default:
- /* disclaimer: i have no idea what i'm doing. */
- case CODEC_GSM_8000_1:
- return GSM_TCHF_FRAME;
- case CODEC_GSMEFR_8000_1:
- return GSM_TCHF_FRAME_EFR;
- case CODEC_GSMHR_8000_1:
- return GSM_TCHH_FRAME;
- case CODEC_AMR_8000_1:
- case CODEC_AMRWB_16000_1:
- //return GSM_TCHF_FRAME;
- return GSM_TCH_FRAME_AMR;
- }
-}
-
static bool mncc_call_tx_rtp_create(struct mncc_call *mncc_call)
{
if (!mncc_call->rtps || !osmo_sockaddr_str_is_nonzero(&mncc_call->rtps->local)) {
@@ -314,8 +296,15 @@
}
if (mncc_call->rtps->codec_known) {
- mncc_msg.rtp.payload_type = 0; /* ??? */
- mncc_msg.rtp.payload_msg_type = mgcp_codec_to_mncc_payload_msg_type(mncc_call->rtps->codec);
+ const struct codec_mapping *m = codec_mapping_by_mgcp_codec(mncc_call->rtps->codec);
+
+ if (!m) {
+ mncc_call_error(mncc_call, "Failed to resolve audio codec '%s'\n",
+ osmo_mgcpc_codec_name(mncc_call->rtps->codec));
+ return false;
+ }
+ mncc_msg.rtp.payload_type = m->sdp.payload_type;
+ mncc_msg.rtp.payload_msg_type = m->mncc_payload_msg_type;
}
if (mncc_call_tx(mncc_call, &mncc_msg))