mgcp: Move the "codec" params to a struct

We might be offered multiple codecs by the remote and need to
switch between them once we receive data. Do this by moving it
to a struct so we can separate between proposed and current
codec. In SDP we can have multiple codecs but a global ptime.
The current code doesn't separate that clearly instead we write
it to the main codec.
diff --git a/openbsc/src/libmgcp/mgcp_transcode.c b/openbsc/src/libmgcp/mgcp_transcode.c
index 88de7d2..e961ba6 100644
--- a/openbsc/src/libmgcp/mgcp_transcode.c
+++ b/openbsc/src/libmgcp/mgcp_transcode.c
@@ -45,22 +45,22 @@
 			1) * state->src_frame_size;
 }
 
-static enum audio_format get_audio_format(const struct mgcp_rtp_end *rtp_end)
+static enum audio_format get_audio_format(const struct mgcp_rtp_codec *codec)
 {
-	if (rtp_end->subtype_name) {
-		if (!strcmp("GSM", rtp_end->subtype_name))
+	if (codec->subtype_name) {
+		if (!strcmp("GSM", codec->subtype_name))
 			return AF_GSM;
-		if (!strcmp("PCMA", rtp_end->subtype_name))
+		if (!strcmp("PCMA", codec->subtype_name))
 			return AF_PCMA;
 #ifdef HAVE_BCG729
-		if (!strcmp("G729", rtp_end->subtype_name))
+		if (!strcmp("G729", codec->subtype_name))
 			return AF_G729;
 #endif
-		if (!strcmp("L16", rtp_end->subtype_name))
+		if (!strcmp("L16", codec->subtype_name))
 			return AF_L16;
 	}
 
-	switch (rtp_end->payload_type) {
+	switch (codec->payload_type) {
 	case 3 /* GSM */:
 		return AF_GSM;
 	case 8 /* PCMA */:
@@ -141,6 +141,8 @@
 {
 	struct mgcp_process_rtp_state *state;
 	enum audio_format src_fmt, dst_fmt;
+	const struct mgcp_rtp_codec *src_codec = &src_end->codec;
+	const struct mgcp_rtp_codec *dst_codec = &dst_end->codec;
 
 	/* cleanup first */
 	if (dst_end->rtp_process_data) {
@@ -151,34 +153,34 @@
 	if (!src_end)
 		return 0;
 
-	src_fmt = get_audio_format(src_end);
-	dst_fmt = get_audio_format(dst_end);
+	src_fmt = get_audio_format(src_codec);
+	dst_fmt = get_audio_format(dst_codec);
 
 	LOGP(DMGCP, LOGL_ERROR,
 	     "Checking transcoding: %s (%d) -> %s (%d)\n",
-	     src_end->subtype_name, src_end->payload_type,
-	     dst_end->subtype_name, dst_end->payload_type);
+	     src_codec->subtype_name, src_codec->payload_type,
+	     dst_codec->subtype_name, dst_codec->payload_type);
 
 	if (src_fmt == AF_INVALID || dst_fmt == AF_INVALID) {
-		if (!src_end->subtype_name || !dst_end->subtype_name)
+		if (!src_codec->subtype_name || !dst_codec->subtype_name)
 			/* Not enough info, do nothing */
 			return 0;
 
-		if (strcmp(src_end->subtype_name, dst_end->subtype_name) == 0)
+		if (strcmp(src_codec->subtype_name, dst_codec->subtype_name) == 0)
 			/* Nothing to do */
 			return 0;
 
 		LOGP(DMGCP, LOGL_ERROR,
 		     "Cannot transcode: %s codec not supported (%s -> %s).\n",
 		     src_fmt != AF_INVALID ? "destination" : "source",
-		     src_end->audio_name, dst_end->audio_name);
+		     src_codec->audio_name, dst_codec->audio_name);
 		return -EINVAL;
 	}
 
-	if (src_end->rate && dst_end->rate && src_end->rate != dst_end->rate) {
+	if (src_codec->rate && dst_codec->rate && src_codec->rate != dst_codec->rate) {
 		LOGP(DMGCP, LOGL_ERROR,
 		     "Cannot transcode: rate conversion (%d -> %d) not supported.\n",
-		     src_end->rate, dst_end->rate);
+		     src_codec->rate, dst_codec->rate);
 		return -EINVAL;
 	}
 
@@ -269,8 +271,8 @@
 	     "Initialized RTP processing on: 0x%x "
 	     "conv: %d (%d, %d, %s) -> %d (%d, %d, %s)\n",
 	     ENDPOINT_NUMBER(endp),
-	     src_fmt, src_end->payload_type, src_end->rate, src_end->fmtp_extra,
-	     dst_fmt, dst_end->payload_type, dst_end->rate, dst_end->fmtp_extra);
+	     src_fmt, src_codec->payload_type, src_codec->rate, src_end->fmtp_extra,
+	     dst_fmt, dst_codec->payload_type, dst_codec->rate, dst_end->fmtp_extra);
 
 	return 0;
 }
@@ -281,16 +283,19 @@
 					  const char**fmtp_extra)
 {
 	struct mgcp_process_rtp_state *state = endp->net_end.rtp_process_data;
-	if (!state || endp->net_end.payload_type < 0) {
-		*payload_type = endp->bts_end.payload_type;
-		*audio_name = endp->bts_end.audio_name;
+	struct mgcp_rtp_codec *net_codec = &endp->net_end.codec;
+	struct mgcp_rtp_codec *bts_codec = &endp->bts_end.codec;
+
+	if (!state || net_codec->payload_type < 0) {
+		*payload_type = bts_codec->payload_type;
+		*audio_name = bts_codec->audio_name;
 		*fmtp_extra = endp->bts_end.fmtp_extra;
 		return;
 	}
 
-	*payload_type = endp->net_end.payload_type;
+	*payload_type = net_codec->payload_type;
+	*audio_name = net_codec->audio_name;
 	*fmtp_extra = endp->net_end.fmtp_extra;
-	*audio_name = endp->net_end.audio_name;
 }
 
 static int decode_audio(struct mgcp_process_rtp_state *state,