Rename and move func checking if amr mode is explicitly configured
The previous naming was quite confusing, since the function is not really checking whether a conversion is needed, but rather whether the codec has the AMR RTP mode defined explicitly and hence forced. The previous naming didn't harm because the amr_oa_bwe_convert also supports the conversion path OA<->OA and BE<->BE. Hence nowadays the amr_oa_bwe_convert() function is called always if the dst conn has its codec with AMR RTP mode explicitly set, no matter if the src and dst conn have the same mode. Related: SYS#6161 Change-Id: I8dce3038ebccf5e1e37e2908070a67d66693a96f
This commit is contained in:
parent
d266c374ee
commit
cca55247ed
|
@ -17,4 +17,5 @@ int mgcp_codec_decide(struct mgcp_conn_rtp *conn);
|
|||
int mgcp_codec_pt_translate(struct mgcp_conn_rtp *conn_src, struct mgcp_conn_rtp *conn_dst, int payload_type);
|
||||
const struct mgcp_rtp_codec *mgcp_codec_pt_find_by_subtype_name(struct mgcp_conn_rtp *conn,
|
||||
const char *subtype_name, unsigned int match_nr);
|
||||
bool mgcp_codec_amr_align_mode_is_indicated(const struct mgcp_rtp_codec *codec);
|
||||
bool mgcp_codec_amr_is_octet_aligned(const struct mgcp_rtp_codec *codec);
|
||||
|
|
|
@ -345,6 +345,18 @@ int mgcp_codec_decide(struct mgcp_conn_rtp *conn)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Check if the codec has a specific AMR mode (octet-aligned or bandwith-efficient) set. */
|
||||
bool mgcp_codec_amr_align_mode_is_indicated(const struct mgcp_rtp_codec *codec)
|
||||
{
|
||||
if (codec->param_present == false)
|
||||
return false;
|
||||
if (!codec->param.amr_octet_aligned_present)
|
||||
return false;
|
||||
if (strcmp(codec->subtype_name, "AMR") != 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Return true if octet-aligned is set in the given codec. Default to octet-aligned=0, i.e. bandwidth-efficient mode.
|
||||
* See RFC4867 "RTP Payload Format for AMR and AMR-WB" sections "8.1. AMR Media Type Registration" and "8.2. AMR-WB
|
||||
* Media Type Registration":
|
||||
|
|
|
@ -769,20 +769,6 @@ static int amr_oa_bwe_convert(struct mgcp_endpoint *endp, struct msgb *msg,
|
|||
return msgb_trim(msg, rc + sizeof(struct rtp_hdr));
|
||||
}
|
||||
|
||||
/* Check if a conversion between octet-aligned and bandwith-efficient mode is
|
||||
* indicated. */
|
||||
static bool amr_oa_bwe_convert_indicated(struct mgcp_rtp_codec *codec)
|
||||
{
|
||||
if (codec->param_present == false)
|
||||
return false;
|
||||
if (!codec->param.amr_octet_aligned_present)
|
||||
return false;
|
||||
if (strcmp(codec->subtype_name, "AMR") != 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/* Return whether an RTP packet with AMR payload is in octet-aligned mode.
|
||||
* Return 0 if in bandwidth-efficient mode, 1 for octet-aligned mode, and negative if the RTP data is invalid. */
|
||||
static int amr_oa_check(char *data, int len)
|
||||
|
@ -1221,7 +1207,7 @@ int mgcp_send(struct mgcp_endpoint *endp, int is_rtp, struct osmo_sockaddr *addr
|
|||
|
||||
if (mgcp_conn_rtp_is_iuup(conn_dst) || mgcp_conn_rtp_is_iuup(conn_src)) {
|
||||
/* the iuup code will correctly transform to the correct AMR mode */
|
||||
} else if (amr_oa_bwe_convert_indicated(conn_dst->end.codec)) {
|
||||
} else if (mgcp_codec_amr_align_mode_is_indicated(conn_dst->end.codec)) {
|
||||
rc = amr_oa_bwe_convert(endp, msg,
|
||||
conn_dst->end.codec->param.amr_octet_aligned);
|
||||
if (rc < 0) {
|
||||
|
@ -1535,7 +1521,7 @@ static int rx_rtp(struct msgb *msg)
|
|||
* defined, then we check if the incoming payload matches that
|
||||
* expectation. */
|
||||
if (mc->proto == MGCP_PROTO_RTP &&
|
||||
amr_oa_bwe_convert_indicated(conn_src->end.codec)) {
|
||||
mgcp_codec_amr_align_mode_is_indicated(conn_src->end.codec)) {
|
||||
int oa = amr_oa_check((char*)msgb_data(msg), msgb_length(msg));
|
||||
if (oa < 0)
|
||||
return -1;
|
||||
|
|
Loading…
Reference in New Issue